mirror of https://github.com/vladmandic/human
add blazepose v2 and add annotations to body results
parent
3e1160237e
commit
3e53ba4726
|
@ -9,8 +9,9 @@
|
||||||
|
|
||||||
## Changelog
|
## Changelog
|
||||||
|
|
||||||
### **HEAD -> main** 2021/10/02 mandic00@live.com
|
### **HEAD -> main** 2021/10/03 mandic00@live.com
|
||||||
|
|
||||||
|
- added docker notes
|
||||||
- breaking change: new similarity and match methods
|
- breaking change: new similarity and match methods
|
||||||
- release candidate
|
- release candidate
|
||||||
- tweaked default values
|
- tweaked default values
|
||||||
|
|
|
@ -31,6 +31,13 @@ import jsonView from './helpers/jsonview.js';
|
||||||
let human;
|
let human;
|
||||||
|
|
||||||
let userConfig = {
|
let userConfig = {
|
||||||
|
face: { enabled: false },
|
||||||
|
object: { enabled: false },
|
||||||
|
gesture: { enabled: true },
|
||||||
|
hand: { enabled: false },
|
||||||
|
body: { enabled: true, modelPath: 'https://vladmandic.github.io/human-models/models/blazepose-lite.json' },
|
||||||
|
segmentation: { enabled: false },
|
||||||
|
|
||||||
/*
|
/*
|
||||||
warmup: 'none',
|
warmup: 'none',
|
||||||
backend: 'humangl',
|
backend: 'humangl',
|
||||||
|
@ -108,7 +115,7 @@ const ui = {
|
||||||
lastFrame: 0, // time of last frame processing
|
lastFrame: 0, // time of last frame processing
|
||||||
viewportSet: false, // internal, has custom viewport been set
|
viewportSet: false, // internal, has custom viewport been set
|
||||||
background: null, // holds instance of segmentation background image
|
background: null, // holds instance of segmentation background image
|
||||||
exceptionHandler: true, // should capture all unhandled exceptions
|
exceptionHandler: false, // should capture all unhandled exceptions
|
||||||
|
|
||||||
// webrtc
|
// webrtc
|
||||||
useWebRTC: false, // use webrtc as camera source instead of local webcam
|
useWebRTC: false, // use webrtc as camera source instead of local webcam
|
||||||
|
|
|
@ -173,7 +173,7 @@ var config = {
|
||||||
},
|
},
|
||||||
maxDetected: -1,
|
maxDetected: -1,
|
||||||
minConfidence: 0.2,
|
minConfidence: 0.2,
|
||||||
skipFrames: 1
|
skipFrames: 5
|
||||||
},
|
},
|
||||||
hand: {
|
hand: {
|
||||||
enabled: true,
|
enabled: true,
|
||||||
|
@ -1177,6 +1177,8 @@ function process2(input, config3) {
|
||||||
tempCanvas.height = targetHeight;
|
tempCanvas.height = targetHeight;
|
||||||
const tempCtx = tempCanvas.getContext("2d");
|
const tempCtx = tempCanvas.getContext("2d");
|
||||||
tempCtx == null ? void 0 : tempCtx.drawImage(outCanvas, 0, 0);
|
tempCtx == null ? void 0 : tempCtx.drawImage(outCanvas, 0, 0);
|
||||||
|
console.log("PIXELS", tempCanvas);
|
||||||
|
pixels = tfjs_esm_exports.browser && env2.browser ? tfjs_esm_exports.browser.fromPixels(tempCanvas) : null;
|
||||||
try {
|
try {
|
||||||
pixels = tfjs_esm_exports.browser && env2.browser ? tfjs_esm_exports.browser.fromPixels(tempCanvas) : null;
|
pixels = tfjs_esm_exports.browser && env2.browser ? tfjs_esm_exports.browser.fromPixels(tempCanvas) : null;
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
|
@ -8732,11 +8734,11 @@ var HandPipeline = class {
|
||||||
const rawCoords = await keypointsReshaped.array();
|
const rawCoords = await keypointsReshaped.array();
|
||||||
tfjs_esm_exports.dispose(keypoints3);
|
tfjs_esm_exports.dispose(keypoints3);
|
||||||
tfjs_esm_exports.dispose(keypointsReshaped);
|
tfjs_esm_exports.dispose(keypointsReshaped);
|
||||||
const coords4 = this.transformRawCoords(rawCoords, newBox, angle, rotationMatrix);
|
const coords7 = this.transformRawCoords(rawCoords, newBox, angle, rotationMatrix);
|
||||||
const nextBoundingBox = this.getBoxForHandLandmarks(coords4);
|
const nextBoundingBox = this.getBoxForHandLandmarks(coords7);
|
||||||
this.storedBoxes[i] = { ...nextBoundingBox, confidence };
|
this.storedBoxes[i] = { ...nextBoundingBox, confidence };
|
||||||
const result = {
|
const result = {
|
||||||
landmarks: coords4,
|
landmarks: coords7,
|
||||||
confidence,
|
confidence,
|
||||||
boxConfidence: currentBox.confidence,
|
boxConfidence: currentBox.confidence,
|
||||||
fingerConfidence: confidence,
|
fingerConfidence: confidence,
|
||||||
|
@ -9163,10 +9165,10 @@ async function predict5(input, config3) {
|
||||||
return [];
|
return [];
|
||||||
const hands = [];
|
const hands = [];
|
||||||
for (let i = 0; i < predictions.length; i++) {
|
for (let i = 0; i < predictions.length; i++) {
|
||||||
const annotations3 = {};
|
const annotations2 = {};
|
||||||
if (predictions[i].landmarks) {
|
if (predictions[i].landmarks) {
|
||||||
for (const key of Object.keys(meshAnnotations2)) {
|
for (const key of Object.keys(meshAnnotations2)) {
|
||||||
annotations3[key] = meshAnnotations2[key].map((index) => predictions[i].landmarks[index]);
|
annotations2[key] = meshAnnotations2[key].map((index) => predictions[i].landmarks[index]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
const keypoints3 = predictions[i].landmarks;
|
const keypoints3 = predictions[i].landmarks;
|
||||||
|
@ -9210,7 +9212,7 @@ async function predict5(input, config3) {
|
||||||
box: box4,
|
box: box4,
|
||||||
boxRaw: boxRaw2,
|
boxRaw: boxRaw2,
|
||||||
keypoints: keypoints3,
|
keypoints: keypoints3,
|
||||||
annotations: annotations3,
|
annotations: annotations2,
|
||||||
landmarks
|
landmarks
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
@ -9249,9 +9251,9 @@ async function load7(config3) {
|
||||||
}
|
}
|
||||||
|
|
||||||
// src/util/box.ts
|
// src/util/box.ts
|
||||||
function scale(keypoints3, boxScaleFact2, outputSize3) {
|
function scale(keypoints3, boxScaleFact2, outputSize2) {
|
||||||
const coords4 = [keypoints3.map((pt) => pt[0]), keypoints3.map((pt) => pt[1])];
|
const coords7 = [keypoints3.map((pt) => pt[0]), keypoints3.map((pt) => pt[1])];
|
||||||
const maxmin = [Math.max(...coords4[0]), Math.min(...coords4[0]), Math.max(...coords4[1]), Math.min(...coords4[1])];
|
const maxmin = [Math.max(...coords7[0]), Math.min(...coords7[0]), Math.max(...coords7[1]), Math.min(...coords7[1])];
|
||||||
const center = [(maxmin[0] + maxmin[1]) / 2, (maxmin[2] + maxmin[3]) / 2];
|
const center = [(maxmin[0] + maxmin[1]) / 2, (maxmin[2] + maxmin[3]) / 2];
|
||||||
const diff = Math.max(center[0] - maxmin[1], center[1] - maxmin[3], -center[0] + maxmin[0], -center[1] + maxmin[2]) * boxScaleFact2;
|
const diff = Math.max(center[0] - maxmin[1], center[1] - maxmin[3], -center[0] + maxmin[0], -center[1] + maxmin[2]) * boxScaleFact2;
|
||||||
const box4 = [
|
const box4 = [
|
||||||
|
@ -9261,10 +9263,10 @@ function scale(keypoints3, boxScaleFact2, outputSize3) {
|
||||||
Math.trunc(2 * diff)
|
Math.trunc(2 * diff)
|
||||||
];
|
];
|
||||||
const boxRaw2 = [
|
const boxRaw2 = [
|
||||||
box4[0] / outputSize3[0],
|
box4[0] / outputSize2[0],
|
||||||
box4[1] / outputSize3[1],
|
box4[1] / outputSize2[1],
|
||||||
box4[2] / outputSize3[0],
|
box4[2] / outputSize2[0],
|
||||||
box4[3] / outputSize3[1]
|
box4[3] / outputSize2[1]
|
||||||
];
|
];
|
||||||
const yxBox = [
|
const yxBox = [
|
||||||
boxRaw2[1],
|
boxRaw2[1],
|
||||||
|
@ -9452,8 +9454,17 @@ async function predict6(input, config3) {
|
||||||
return hands;
|
return hands;
|
||||||
}
|
}
|
||||||
|
|
||||||
// src/body/annotations.ts
|
// src/body/blazepose.ts
|
||||||
var full = [
|
import {
|
||||||
|
dispose as dispose12,
|
||||||
|
div as div8,
|
||||||
|
image as image13,
|
||||||
|
loadGraphModel as loadGraphModel9,
|
||||||
|
pad
|
||||||
|
} from "@tensorflow/tfjs";
|
||||||
|
|
||||||
|
// src/body/blazeposecoords.ts
|
||||||
|
var kpt = [
|
||||||
"nose",
|
"nose",
|
||||||
"leftEyeInside",
|
"leftEyeInside",
|
||||||
"leftEye",
|
"leftEye",
|
||||||
|
@ -9487,58 +9498,38 @@ var full = [
|
||||||
"rightHeel",
|
"rightHeel",
|
||||||
"leftFoot",
|
"leftFoot",
|
||||||
"rightFoot",
|
"rightFoot",
|
||||||
"midHip",
|
"bodyCenter",
|
||||||
"forehead",
|
"bodyTop",
|
||||||
"leftThumb",
|
"leftThumb",
|
||||||
"leftHand",
|
"leftHand",
|
||||||
"rightThumb",
|
"rightThumb",
|
||||||
"rightHand"
|
"rightHand"
|
||||||
];
|
];
|
||||||
var upper = [
|
var connected = {
|
||||||
"nose",
|
leftLeg: ["leftHip", "leftKnee", "leftAnkle", "leftHeel", "leftFoot"],
|
||||||
"leftEyeInside",
|
rightLeg: ["rightHip", "rightKnee", "rightAnkle", "rightHeel", "rightFoot"],
|
||||||
"leftEye",
|
torso: ["leftShoulder", "rightShoulder", "rightHip", "leftHip", "leftShoulder"],
|
||||||
"leftEyeOutside",
|
leftArm: ["leftShoulder", "leftElbow", "leftWrist", "leftPalm"],
|
||||||
"rightEyeInside",
|
rightArm: ["rightShoulder", "rightElbow", "rightWrist", "rightPalm"],
|
||||||
"rightEye",
|
leftHand: [],
|
||||||
"rightEyeOutside",
|
rightHand: [],
|
||||||
"leftEar",
|
head: []
|
||||||
"rightEar",
|
};
|
||||||
"leftMouth",
|
|
||||||
"rightMouth",
|
|
||||||
"leftShoulder",
|
|
||||||
"rightShoulder",
|
|
||||||
"leftElbow",
|
|
||||||
"rightElbow",
|
|
||||||
"left:15",
|
|
||||||
"right:16",
|
|
||||||
"left:17",
|
|
||||||
"right:18",
|
|
||||||
"left:19",
|
|
||||||
"right:20",
|
|
||||||
"left:21",
|
|
||||||
"right:22",
|
|
||||||
"leftChest",
|
|
||||||
"rightChest",
|
|
||||||
"neck",
|
|
||||||
"forehead",
|
|
||||||
"left:27",
|
|
||||||
"right:28",
|
|
||||||
"left:29",
|
|
||||||
"right:30"
|
|
||||||
];
|
|
||||||
|
|
||||||
// src/body/blazepose.ts
|
// src/body/blazepose.ts
|
||||||
|
var env3 = { initial: true };
|
||||||
var models2 = [null, null];
|
var models2 = [null, null];
|
||||||
var outputNodes = ["ld_3d", "activation_segmentation", "activation_heatmap", "world_3d", "output_poseflag"];
|
|
||||||
var inputSize5 = [[0, 0], [0, 0]];
|
var inputSize5 = [[0, 0], [0, 0]];
|
||||||
var outputSize2 = [0, 0];
|
var skipped5 = Number.MAX_SAFE_INTEGER;
|
||||||
|
var outputNodes;
|
||||||
|
var cache2 = null;
|
||||||
|
var padding = [[0, 0], [0, 0], [0, 0], [0, 0]];
|
||||||
async function loadDetect2(config3) {
|
async function loadDetect2(config3) {
|
||||||
var _a;
|
var _a, _b;
|
||||||
if (env2.initial)
|
if (env3.initial)
|
||||||
models2[0] = null;
|
models2[0] = null;
|
||||||
if (!models2[0]) {
|
if (!models2[0] && ((_a = config3.body.detector) == null ? void 0 : _a.modelPath) || "") {
|
||||||
models2[0] = await tfjs_esm_exports.loadGraphModel(join(config3.modelBasePath, ((_a = config3.body.detector) == null ? void 0 : _a.modelPath) || ""));
|
models2[0] = await loadGraphModel9(join(config3.modelBasePath, ((_b = config3.body.detector) == null ? void 0 : _b.modelPath) || ""));
|
||||||
const inputs = Object.values(models2[0].modelSignature["inputs"]);
|
const inputs = Object.values(models2[0].modelSignature["inputs"]);
|
||||||
inputSize5[0][0] = Array.isArray(inputs) ? parseInt(inputs[0].tensorShape.dim[1].size) : 0;
|
inputSize5[0][0] = Array.isArray(inputs) ? parseInt(inputs[0].tensorShape.dim[1].size) : 0;
|
||||||
inputSize5[0][1] = Array.isArray(inputs) ? parseInt(inputs[0].tensorShape.dim[2].size) : 0;
|
inputSize5[0][1] = Array.isArray(inputs) ? parseInt(inputs[0].tensorShape.dim[2].size) : 0;
|
||||||
|
@ -9546,18 +9537,23 @@ async function loadDetect2(config3) {
|
||||||
log("load model failed:", config3.object.modelPath);
|
log("load model failed:", config3.object.modelPath);
|
||||||
else if (config3.debug)
|
else if (config3.debug)
|
||||||
log("load model:", models2[0]["modelUrl"]);
|
log("load model:", models2[0]["modelUrl"]);
|
||||||
} else if (config3.debug)
|
} else if (config3.debug && models2[0])
|
||||||
log("cached model:", models2[0]["modelUrl"]);
|
log("cached model:", models2[0]["modelUrl"]);
|
||||||
return models2[0];
|
return models2[0];
|
||||||
}
|
}
|
||||||
async function loadPose(config3) {
|
async function loadPose(config3) {
|
||||||
if (env2.initial)
|
var _a;
|
||||||
|
if (env3.initial)
|
||||||
models2[1] = null;
|
models2[1] = null;
|
||||||
if (!models2[1]) {
|
if (!models2[1]) {
|
||||||
models2[1] = await tfjs_esm_exports.loadGraphModel(join(config3.modelBasePath, config3.body.modelPath || ""));
|
models2[1] = await loadGraphModel9(join(config3.modelBasePath, config3.body.modelPath || ""));
|
||||||
const inputs = Object.values(models2[1].modelSignature["inputs"]);
|
const inputs = Object.values(models2[1].modelSignature["inputs"]);
|
||||||
inputSize5[1][0] = Array.isArray(inputs) ? parseInt(inputs[0].tensorShape.dim[1].size) : 0;
|
inputSize5[1][0] = Array.isArray(inputs) ? parseInt(inputs[0].tensorShape.dim[1].size) : 0;
|
||||||
inputSize5[1][1] = Array.isArray(inputs) ? parseInt(inputs[0].tensorShape.dim[2].size) : 0;
|
inputSize5[1][1] = Array.isArray(inputs) ? parseInt(inputs[0].tensorShape.dim[2].size) : 0;
|
||||||
|
if ((_a = config3.body.modelPath) == null ? void 0 : _a.includes("lite"))
|
||||||
|
outputNodes = ["ld_3d", "output_segmentation", "output_heatmap", "world_3d", "output_poseflag"];
|
||||||
|
else
|
||||||
|
outputNodes = ["Identity", "Identity_2", "Identity_3", "Identity_4", "Identity_1"];
|
||||||
if (!models2[1] || !models2[1]["modelUrl"])
|
if (!models2[1] || !models2[1]["modelUrl"])
|
||||||
log("load model failed:", config3.object.modelPath);
|
log("load model failed:", config3.object.modelPath);
|
||||||
else if (config3.debug)
|
else if (config3.debug)
|
||||||
|
@ -9566,63 +9562,125 @@ async function loadPose(config3) {
|
||||||
log("cached model:", models2[1]["modelUrl"]);
|
log("cached model:", models2[1]["modelUrl"]);
|
||||||
return models2[1];
|
return models2[1];
|
||||||
}
|
}
|
||||||
async function detectParts(input, config3) {
|
function calculateBoxes(keypoints3, outputSize2) {
|
||||||
var _a;
|
|
||||||
const t = {};
|
|
||||||
t.resize = tfjs_esm_exports.image.resizeBilinear(input, [inputSize5[1][0], inputSize5[1][1]]);
|
|
||||||
[t.ld, t.segmentation, t.heatmap, t.world, t.poseflag] = await ((_a = models2[1]) == null ? void 0 : _a.execute(t.resize, outputNodes));
|
|
||||||
const points = await t.ld.data();
|
|
||||||
const keypoints3 = [];
|
|
||||||
const labels2 = (points == null ? void 0 : points.length) === 195 ? full : upper;
|
|
||||||
const depth = 5;
|
|
||||||
for (let i = 0; i < points.length / depth; i++) {
|
|
||||||
const score3 = (100 - Math.trunc(100 / (1 + Math.exp(points[depth * i + 3])))) / 100;
|
|
||||||
if (score3 > (config3.body.minConfidence || 0)) {
|
|
||||||
keypoints3.push({
|
|
||||||
part: labels2[i],
|
|
||||||
position: [
|
|
||||||
Math.trunc(outputSize2[0] * points[depth * i + 0] / 255),
|
|
||||||
Math.trunc(outputSize2[1] * points[depth * i + 1] / 255),
|
|
||||||
Math.trunc(points[depth * i + 2]) + 0
|
|
||||||
],
|
|
||||||
positionRaw: [
|
|
||||||
points[depth * i + 0] / 255,
|
|
||||||
points[depth * i + 1] / 255,
|
|
||||||
points[depth * i + 2] + 0
|
|
||||||
],
|
|
||||||
score: score3
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
|
||||||
const x = keypoints3.map((a) => a.position[0]);
|
const x = keypoints3.map((a) => a.position[0]);
|
||||||
const y = keypoints3.map((a) => a.position[1]);
|
const y = keypoints3.map((a) => a.position[1]);
|
||||||
const box4 = [
|
const keypointsBox = [Math.min(...x), Math.min(...y), Math.max(...x) - Math.min(...x), Math.max(...y) - Math.min(...y)];
|
||||||
Math.min(...x),
|
const keypointsBoxRaw = [keypointsBox[0] / outputSize2[0], keypointsBox[1] / outputSize2[1], keypointsBox[2] / outputSize2[0], keypointsBox[3] / outputSize2[1]];
|
||||||
Math.min(...y),
|
return { keypointsBox, keypointsBoxRaw };
|
||||||
Math.max(...x) - Math.min(...x),
|
}
|
||||||
Math.max(...y) - Math.min(...x)
|
async function prepareImage(input) {
|
||||||
|
const t = {};
|
||||||
|
if (!input.shape || !input.shape[1] || !input.shape[2])
|
||||||
|
return input;
|
||||||
|
padding = [
|
||||||
|
[0, 0],
|
||||||
|
[input.shape[2] > input.shape[1] ? Math.trunc((input.shape[2] - input.shape[1]) / 2) : 0, input.shape[2] > input.shape[1] ? Math.trunc((input.shape[2] - input.shape[1]) / 2) : 0],
|
||||||
|
[input.shape[1] > input.shape[2] ? Math.trunc((input.shape[1] - input.shape[2]) / 2) : 0, input.shape[1] > input.shape[2] ? Math.trunc((input.shape[1] - input.shape[2]) / 2) : 0],
|
||||||
|
[0, 0]
|
||||||
];
|
];
|
||||||
const boxRaw2 = [0, 0, 0, 0];
|
t.pad = pad(input, padding);
|
||||||
const score2 = keypoints3.reduce((prev, curr) => curr.score > prev ? curr.score : prev, 0);
|
t.resize = image13.resizeBilinear(t.pad, [inputSize5[1][0], inputSize5[1][1]]);
|
||||||
Object.keys(t).forEach((tensor3) => tfjs_esm_exports.dispose(t[tensor3]));
|
const final = div8(t.resize, 255);
|
||||||
return { id: 0, score: score2, box: box4, boxRaw: boxRaw2, keypoints: keypoints3 };
|
Object.keys(t).forEach((tensor3) => dispose12(t[tensor3]));
|
||||||
|
return final;
|
||||||
|
}
|
||||||
|
function rescaleKeypoints(keypoints3, outputSize2) {
|
||||||
|
for (const kpt4 of keypoints3) {
|
||||||
|
kpt4.position = [
|
||||||
|
kpt4.position[0] * (outputSize2[0] + padding[2][0] + padding[2][1]) / outputSize2[0] - padding[2][0],
|
||||||
|
kpt4.position[1] * (outputSize2[1] + padding[1][0] + padding[1][1]) / outputSize2[1] - padding[1][0],
|
||||||
|
kpt4.position[2]
|
||||||
|
];
|
||||||
|
kpt4.positionRaw = [
|
||||||
|
kpt4.position[0] / outputSize2[0],
|
||||||
|
kpt4.position[1] / outputSize2[1],
|
||||||
|
kpt4.position[2]
|
||||||
|
];
|
||||||
|
}
|
||||||
|
return keypoints3;
|
||||||
|
}
|
||||||
|
async function detectParts(input, config3, outputSize2) {
|
||||||
|
var _a;
|
||||||
|
const t = {};
|
||||||
|
t.input = await prepareImage(input);
|
||||||
|
[t.ld, t.segmentation, t.heatmap, t.world, t.poseflag] = await ((_a = models2[1]) == null ? void 0 : _a.execute(t.input, outputNodes));
|
||||||
|
const points = await t.ld.data();
|
||||||
|
const keypointsRelative = [];
|
||||||
|
const depth = 5;
|
||||||
|
for (let i = 0; i < points.length / depth; i++) {
|
||||||
|
const score2 = (100 - Math.trunc(100 / (1 + Math.exp(points[depth * i + 3])))) / 100;
|
||||||
|
const positionRaw = [points[depth * i + 0] / inputSize5[1][0], points[depth * i + 1] / inputSize5[1][1], points[depth * i + 2] + 0];
|
||||||
|
const position = [Math.trunc(outputSize2[0] * positionRaw[0]), Math.trunc(outputSize2[1] * positionRaw[1]), positionRaw[2]];
|
||||||
|
keypointsRelative.push({ part: kpt[i], positionRaw, position, score: score2 });
|
||||||
|
}
|
||||||
|
const avgScore = Math.round(100 * keypointsRelative.reduce((prev, curr) => prev += curr.score, 0) / keypointsRelative.length) / 100;
|
||||||
|
if (avgScore < (config3.body.minConfidence || 0))
|
||||||
|
return null;
|
||||||
|
const keypoints3 = rescaleKeypoints(keypointsRelative, outputSize2);
|
||||||
|
const boxes = calculateBoxes(keypoints3, [outputSize2[0], outputSize2[1]]);
|
||||||
|
Object.keys(t).forEach((tensor3) => dispose12(t[tensor3]));
|
||||||
|
const annotations2 = {};
|
||||||
|
for (const [name, indexes] of Object.entries(connected)) {
|
||||||
|
const pt = [];
|
||||||
|
for (let i = 0; i < indexes.length - 1; i++) {
|
||||||
|
const pt0 = keypoints3.find((kpt4) => kpt4.part === indexes[i]);
|
||||||
|
const pt1 = keypoints3.find((kpt4) => kpt4.part === indexes[i + 1]);
|
||||||
|
if (pt0 && pt1 && pt0.score > (config3.body.minConfidence || 0) && pt1.score > (config3.body.minConfidence || 0))
|
||||||
|
pt.push([pt0.position, pt1.position]);
|
||||||
|
}
|
||||||
|
annotations2[name] = pt;
|
||||||
|
}
|
||||||
|
return { id: 0, score: avgScore, box: boxes.keypointsBox, boxRaw: boxes.keypointsBoxRaw, keypoints: keypoints3, annotations: annotations2 };
|
||||||
}
|
}
|
||||||
async function predict7(input, config3) {
|
async function predict7(input, config3) {
|
||||||
outputSize2 = [input.shape[2] || 0, input.shape[1] || 0];
|
const outputSize2 = [input.shape[2] || 0, input.shape[1] || 0];
|
||||||
const bodies = [];
|
if (skipped5 < (config3.body.skipFrames || 0) && config3.skipFrame) {
|
||||||
const body4 = await detectParts(input, config3);
|
skipped5++;
|
||||||
bodies.push(body4);
|
} else {
|
||||||
return bodies;
|
cache2 = await detectParts(input, config3, outputSize2);
|
||||||
|
skipped5 = 0;
|
||||||
|
}
|
||||||
|
if (cache2)
|
||||||
|
return [cache2];
|
||||||
|
return [];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// src/body/efficientposecoords.ts
|
||||||
|
var kpt2 = [
|
||||||
|
"head",
|
||||||
|
"neck",
|
||||||
|
"rightShoulder",
|
||||||
|
"rightElbow",
|
||||||
|
"rightWrist",
|
||||||
|
"chest",
|
||||||
|
"leftShoulder",
|
||||||
|
"leftElbow",
|
||||||
|
"leftWrist",
|
||||||
|
"bodyCenter",
|
||||||
|
"rightHip",
|
||||||
|
"rightKnee",
|
||||||
|
"rightAnkle",
|
||||||
|
"leftHip",
|
||||||
|
"leftKnee",
|
||||||
|
"leftAnkle"
|
||||||
|
];
|
||||||
|
var connected2 = {
|
||||||
|
leftLeg: ["leftHip", "leftKnee", "leftAnkle"],
|
||||||
|
rightLeg: ["rightHip", "rightKnee", "rightAnkle"],
|
||||||
|
torso: ["leftShoulder", "rightShoulder", "rightHip", "leftHip", "leftShoulder"],
|
||||||
|
leftArm: ["leftShoulder", "leftElbow", "leftWrist"],
|
||||||
|
rightArm: ["rightShoulder", "rightElbow", "rightWrist"],
|
||||||
|
head: []
|
||||||
|
};
|
||||||
|
|
||||||
// src/body/efficientpose.ts
|
// src/body/efficientpose.ts
|
||||||
var model7;
|
var model7;
|
||||||
var keypoints = [];
|
var keypoints = [];
|
||||||
var box3 = [0, 0, 0, 0];
|
var box3 = [0, 0, 0, 0];
|
||||||
var boxRaw = [0, 0, 0, 0];
|
var boxRaw = [0, 0, 0, 0];
|
||||||
var score = 0;
|
var score = 0;
|
||||||
var skipped5 = Number.MAX_SAFE_INTEGER;
|
var skipped6 = Number.MAX_SAFE_INTEGER;
|
||||||
var bodyParts = ["head", "neck", "rightShoulder", "rightElbow", "rightWrist", "chest", "leftShoulder", "leftElbow", "leftWrist", "pelvis", "rightHip", "rightKnee", "rightAnkle", "leftHip", "leftKnee", "leftAnkle"];
|
|
||||||
async function load8(config3) {
|
async function load8(config3) {
|
||||||
if (env2.initial)
|
if (env2.initial)
|
||||||
model7 = null;
|
model7 = null;
|
||||||
|
@ -9643,9 +9701,9 @@ function max2d(inputs, minScore) {
|
||||||
const reshaped = tfjs_esm_exports.reshape(inputs, [height * width]);
|
const reshaped = tfjs_esm_exports.reshape(inputs, [height * width]);
|
||||||
const newScore = tfjs_esm_exports.max(reshaped, 0).dataSync()[0];
|
const newScore = tfjs_esm_exports.max(reshaped, 0).dataSync()[0];
|
||||||
if (newScore > minScore) {
|
if (newScore > minScore) {
|
||||||
const coords4 = tfjs_esm_exports.argMax(reshaped, 0);
|
const coordinates = tfjs_esm_exports.argMax(reshaped, 0);
|
||||||
const x = mod(coords4, width).dataSync()[0];
|
const x = mod(coordinates, width).dataSync()[0];
|
||||||
const y = tfjs_esm_exports.div(coords4, tfjs_esm_exports.scalar(width, "int32")).dataSync()[0];
|
const y = tfjs_esm_exports.div(coordinates, tfjs_esm_exports.scalar(width, "int32")).dataSync()[0];
|
||||||
return [x, y, newScore];
|
return [x, y, newScore];
|
||||||
}
|
}
|
||||||
return [0, 0, newScore];
|
return [0, 0, newScore];
|
||||||
|
@ -9653,11 +9711,11 @@ function max2d(inputs, minScore) {
|
||||||
}
|
}
|
||||||
async function predict8(image24, config3) {
|
async function predict8(image24, config3) {
|
||||||
var _a;
|
var _a;
|
||||||
if (skipped5 < (((_a = config3.body) == null ? void 0 : _a.skipFrames) || 0) && config3.skipFrame && Object.keys(keypoints).length > 0) {
|
if (skipped6 < (((_a = config3.body) == null ? void 0 : _a.skipFrames) || 0) && config3.skipFrame && Object.keys(keypoints).length > 0) {
|
||||||
skipped5++;
|
skipped6++;
|
||||||
return [{ id: 0, score, box: box3, boxRaw, keypoints }];
|
return [{ id: 0, score, box: box3, boxRaw, keypoints, annotations: {} }];
|
||||||
}
|
}
|
||||||
skipped5 = 0;
|
skipped6 = 0;
|
||||||
return new Promise(async (resolve) => {
|
return new Promise(async (resolve) => {
|
||||||
var _a2;
|
var _a2;
|
||||||
const tensor3 = tfjs_esm_exports.tidy(() => {
|
const tensor3 = tfjs_esm_exports.tidy(() => {
|
||||||
|
@ -9683,7 +9741,7 @@ async function predict8(image24, config3) {
|
||||||
if (score > (((_a2 = config3.body) == null ? void 0 : _a2.minConfidence) || 0)) {
|
if (score > (((_a2 = config3.body) == null ? void 0 : _a2.minConfidence) || 0)) {
|
||||||
keypoints.push({
|
keypoints.push({
|
||||||
score: Math.round(100 * partScore) / 100,
|
score: Math.round(100 * partScore) / 100,
|
||||||
part: bodyParts[id],
|
part: kpt2[id],
|
||||||
positionRaw: [
|
positionRaw: [
|
||||||
x2 / model7.inputs[0].shape[2],
|
x2 / model7.inputs[0].shape[2],
|
||||||
y2 / model7.inputs[0].shape[1]
|
y2 / model7.inputs[0].shape[1]
|
||||||
|
@ -9714,17 +9772,56 @@ async function predict8(image24, config3) {
|
||||||
Math.max(...xRaw) - Math.min(...xRaw),
|
Math.max(...xRaw) - Math.min(...xRaw),
|
||||||
Math.max(...yRaw) - Math.min(...yRaw)
|
Math.max(...yRaw) - Math.min(...yRaw)
|
||||||
];
|
];
|
||||||
resolve([{ id: 0, score, box: box3, boxRaw, keypoints }]);
|
const annotations2 = {};
|
||||||
|
for (const [name, indexes] of Object.entries(connected2)) {
|
||||||
|
const pt = [];
|
||||||
|
for (let i = 0; i < indexes.length - 1; i++) {
|
||||||
|
const pt0 = keypoints.find((kpt4) => kpt4.part === indexes[i]);
|
||||||
|
const pt1 = keypoints.find((kpt4) => kpt4.part === indexes[i + 1]);
|
||||||
|
if (pt0 && pt1 && pt0.score > (config3.body.minConfidence || 0) && pt1.score > (config3.body.minConfidence || 0))
|
||||||
|
pt.push([pt0.position, pt1.position]);
|
||||||
|
}
|
||||||
|
annotations2[name] = pt;
|
||||||
|
}
|
||||||
|
resolve([{ id: 0, score, box: box3, boxRaw, keypoints, annotations: annotations2 }]);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// src/body/movenetcoords.ts
|
||||||
|
var kpt3 = [
|
||||||
|
"nose",
|
||||||
|
"leftEye",
|
||||||
|
"rightEye",
|
||||||
|
"leftEar",
|
||||||
|
"rightEar",
|
||||||
|
"leftShoulder",
|
||||||
|
"rightShoulder",
|
||||||
|
"leftElbow",
|
||||||
|
"rightElbow",
|
||||||
|
"leftWrist",
|
||||||
|
"rightWrist",
|
||||||
|
"leftHip",
|
||||||
|
"rightHip",
|
||||||
|
"leftKnee",
|
||||||
|
"rightKnee",
|
||||||
|
"leftAnkle",
|
||||||
|
"rightAnkle"
|
||||||
|
];
|
||||||
|
var connected3 = {
|
||||||
|
leftLeg: ["leftHip", "leftKnee", "leftAnkle"],
|
||||||
|
rightLeg: ["rightHip", "rightKnee", "rightAnkle"],
|
||||||
|
torso: ["leftShoulder", "rightShoulder", "rightHip", "leftHip", "leftShoulder"],
|
||||||
|
leftArm: ["leftShoulder", "leftElbow", "leftWrist"],
|
||||||
|
rightArm: ["rightShoulder", "rightElbow", "rightWrist"],
|
||||||
|
head: []
|
||||||
|
};
|
||||||
|
|
||||||
// src/body/movenet.ts
|
// src/body/movenet.ts
|
||||||
var model8;
|
var model8;
|
||||||
var inputSize6 = 0;
|
var inputSize6 = 0;
|
||||||
var cachedBoxes = [];
|
var cachedBoxes = [];
|
||||||
var skipped6 = Number.MAX_SAFE_INTEGER;
|
var skipped7 = Number.MAX_SAFE_INTEGER;
|
||||||
var keypoints2 = [];
|
var keypoints2 = [];
|
||||||
var bodyParts2 = ["nose", "leftEye", "rightEye", "leftEar", "rightEar", "leftShoulder", "rightShoulder", "leftElbow", "rightElbow", "leftWrist", "rightWrist", "leftHip", "rightHip", "leftKnee", "rightKnee", "leftAnkle", "rightAnkle"];
|
|
||||||
async function load9(config3) {
|
async function load9(config3) {
|
||||||
if (env2.initial)
|
if (env2.initial)
|
||||||
model8 = null;
|
model8 = null;
|
||||||
|
@ -9762,19 +9859,19 @@ function createBox2(points) {
|
||||||
return [box4, boxRaw2];
|
return [box4, boxRaw2];
|
||||||
}
|
}
|
||||||
async function parseSinglePose(res, config3, image24, inputBox) {
|
async function parseSinglePose(res, config3, image24, inputBox) {
|
||||||
const kpt = res[0][0];
|
const kpt4 = res[0][0];
|
||||||
keypoints2.length = 0;
|
keypoints2.length = 0;
|
||||||
let score2 = 0;
|
let score2 = 0;
|
||||||
for (let id = 0; id < kpt.length; id++) {
|
for (let id = 0; id < kpt4.length; id++) {
|
||||||
score2 = kpt[id][2];
|
score2 = kpt4[id][2];
|
||||||
if (score2 > config3.body.minConfidence) {
|
if (score2 > config3.body.minConfidence) {
|
||||||
const positionRaw = [
|
const positionRaw = [
|
||||||
(inputBox[3] - inputBox[1]) * kpt[id][1] + inputBox[1],
|
(inputBox[3] - inputBox[1]) * kpt4[id][1] + inputBox[1],
|
||||||
(inputBox[2] - inputBox[0]) * kpt[id][0] + inputBox[0]
|
(inputBox[2] - inputBox[0]) * kpt4[id][0] + inputBox[0]
|
||||||
];
|
];
|
||||||
keypoints2.push({
|
keypoints2.push({
|
||||||
score: Math.round(100 * score2) / 100,
|
score: Math.round(100 * score2) / 100,
|
||||||
part: bodyParts2[id],
|
part: kpt3[id],
|
||||||
positionRaw,
|
positionRaw,
|
||||||
position: [
|
position: [
|
||||||
Math.round((image24.shape[2] || 0) * positionRaw[0]),
|
Math.round((image24.shape[2] || 0) * positionRaw[0]),
|
||||||
|
@ -9786,25 +9883,36 @@ async function parseSinglePose(res, config3, image24, inputBox) {
|
||||||
score2 = keypoints2.reduce((prev, curr) => curr.score > prev ? curr.score : prev, 0);
|
score2 = keypoints2.reduce((prev, curr) => curr.score > prev ? curr.score : prev, 0);
|
||||||
const bodies = [];
|
const bodies = [];
|
||||||
const [box4, boxRaw2] = createBox2(keypoints2);
|
const [box4, boxRaw2] = createBox2(keypoints2);
|
||||||
bodies.push({ id: 0, score: score2, box: box4, boxRaw: boxRaw2, keypoints: keypoints2 });
|
const annotations2 = {};
|
||||||
|
for (const [name, indexes] of Object.entries(connected3)) {
|
||||||
|
const pt = [];
|
||||||
|
for (let i = 0; i < indexes.length - 1; i++) {
|
||||||
|
const pt0 = keypoints2.find((kp) => kp.part === indexes[i]);
|
||||||
|
const pt1 = keypoints2.find((kp) => kp.part === indexes[i + 1]);
|
||||||
|
if (pt0 && pt1 && pt0.score > (config3.body.minConfidence || 0) && pt1.score > (config3.body.minConfidence || 0))
|
||||||
|
pt.push([pt0.position, pt1.position]);
|
||||||
|
}
|
||||||
|
annotations2[name] = pt;
|
||||||
|
}
|
||||||
|
bodies.push({ id: 0, score: score2, box: box4, boxRaw: boxRaw2, keypoints: keypoints2, annotations: annotations2 });
|
||||||
return bodies;
|
return bodies;
|
||||||
}
|
}
|
||||||
async function parseMultiPose(res, config3, image24, inputBox) {
|
async function parseMultiPose(res, config3, image24, inputBox) {
|
||||||
const bodies = [];
|
const bodies = [];
|
||||||
for (let id = 0; id < res[0].length; id++) {
|
for (let id = 0; id < res[0].length; id++) {
|
||||||
const kpt = res[0][id];
|
const kpt4 = res[0][id];
|
||||||
const totalScore = Math.round(100 * kpt[51 + 4]) / 100;
|
const totalScore = Math.round(100 * kpt4[51 + 4]) / 100;
|
||||||
if (totalScore > config3.body.minConfidence) {
|
if (totalScore > config3.body.minConfidence) {
|
||||||
keypoints2.length = 0;
|
keypoints2.length = 0;
|
||||||
for (let i = 0; i < 17; i++) {
|
for (let i = 0; i < 17; i++) {
|
||||||
const score2 = kpt[3 * i + 2];
|
const score2 = kpt4[3 * i + 2];
|
||||||
if (score2 > config3.body.minConfidence) {
|
if (score2 > config3.body.minConfidence) {
|
||||||
const positionRaw = [
|
const positionRaw = [
|
||||||
(inputBox[3] - inputBox[1]) * kpt[3 * i + 1] + inputBox[1],
|
(inputBox[3] - inputBox[1]) * kpt4[3 * i + 1] + inputBox[1],
|
||||||
(inputBox[2] - inputBox[0]) * kpt[3 * i + 0] + inputBox[0]
|
(inputBox[2] - inputBox[0]) * kpt4[3 * i + 0] + inputBox[0]
|
||||||
];
|
];
|
||||||
keypoints2.push({
|
keypoints2.push({
|
||||||
part: bodyParts2[i],
|
part: kpt3[i],
|
||||||
score: Math.round(100 * score2) / 100,
|
score: Math.round(100 * score2) / 100,
|
||||||
positionRaw,
|
positionRaw,
|
||||||
position: [
|
position: [
|
||||||
|
@ -9814,9 +9922,19 @@ async function parseMultiPose(res, config3, image24, inputBox) {
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
const boxRaw2 = [kpt[51 + 1], kpt[51 + 0], kpt[51 + 3] - kpt[51 + 1], kpt[51 + 2] - kpt[51 + 0]];
|
const [box4, boxRaw2] = createBox2(keypoints2);
|
||||||
const box4 = [Math.trunc(boxRaw2[0] * (image24.shape[2] || 0)), Math.trunc(boxRaw2[1] * (image24.shape[1] || 0)), Math.trunc(boxRaw2[2] * (image24.shape[2] || 0)), Math.trunc(boxRaw2[3] * (image24.shape[1] || 0))];
|
const annotations2 = {};
|
||||||
bodies.push({ id, score: totalScore, boxRaw: boxRaw2, box: box4, keypoints: [...keypoints2] });
|
for (const [name, indexes] of Object.entries(connected3)) {
|
||||||
|
const pt = [];
|
||||||
|
for (let i = 0; i < indexes.length - 1; i++) {
|
||||||
|
const pt0 = keypoints2.find((kp) => kp.part === indexes[i]);
|
||||||
|
const pt1 = keypoints2.find((kp) => kp.part === indexes[i + 1]);
|
||||||
|
if (pt0 && pt1 && pt0.score > (config3.body.minConfidence || 0) && pt1.score > (config3.body.minConfidence || 0))
|
||||||
|
pt.push([pt0.position, pt1.position]);
|
||||||
|
}
|
||||||
|
annotations2[name] = pt;
|
||||||
|
}
|
||||||
|
bodies.push({ id, score: totalScore, boxRaw: boxRaw2, box: box4, keypoints: [...keypoints2], annotations: annotations2 });
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
bodies.sort((a, b) => b.score - a.score);
|
bodies.sort((a, b) => b.score - a.score);
|
||||||
|
@ -9832,7 +9950,7 @@ async function predict9(input, config3) {
|
||||||
let bodies = [];
|
let bodies = [];
|
||||||
if (!config3.skipFrame)
|
if (!config3.skipFrame)
|
||||||
cachedBoxes.length = 0;
|
cachedBoxes.length = 0;
|
||||||
skipped6++;
|
skipped7++;
|
||||||
for (let i = 0; i < cachedBoxes.length; i++) {
|
for (let i = 0; i < cachedBoxes.length; i++) {
|
||||||
t.crop = tfjs_esm_exports.image.cropAndResize(input, [cachedBoxes[i]], [0], [inputSize6, inputSize6], "bilinear");
|
t.crop = tfjs_esm_exports.image.cropAndResize(input, [cachedBoxes[i]], [0], [inputSize6, inputSize6], "bilinear");
|
||||||
t.cast = tfjs_esm_exports.cast(t.crop, "int32");
|
t.cast = tfjs_esm_exports.cast(t.crop, "int32");
|
||||||
|
@ -9842,7 +9960,7 @@ async function predict9(input, config3) {
|
||||||
bodies = bodies.concat(newBodies);
|
bodies = bodies.concat(newBodies);
|
||||||
Object.keys(t).forEach((tensor3) => tfjs_esm_exports.dispose(t[tensor3]));
|
Object.keys(t).forEach((tensor3) => tfjs_esm_exports.dispose(t[tensor3]));
|
||||||
}
|
}
|
||||||
if (bodies.length !== config3.body.maxDetected && skipped6 > (config3.body.skipFrames || 0)) {
|
if (bodies.length !== config3.body.maxDetected && skipped7 > (config3.body.skipFrames || 0)) {
|
||||||
t.resized = tfjs_esm_exports.image.resizeBilinear(input, [inputSize6, inputSize6], false);
|
t.resized = tfjs_esm_exports.image.resizeBilinear(input, [inputSize6, inputSize6], false);
|
||||||
t.cast = tfjs_esm_exports.cast(t.resized, "int32");
|
t.cast = tfjs_esm_exports.cast(t.resized, "int32");
|
||||||
t.res = await (model8 == null ? void 0 : model8.predict(t.cast));
|
t.res = await (model8 == null ? void 0 : model8.predict(t.cast));
|
||||||
|
@ -9850,13 +9968,13 @@ async function predict9(input, config3) {
|
||||||
bodies = t.res.shape[2] === 17 ? await parseSinglePose(res, config3, input, [0, 0, 1, 1]) : await parseMultiPose(res, config3, input, [0, 0, 1, 1]);
|
bodies = t.res.shape[2] === 17 ? await parseSinglePose(res, config3, input, [0, 0, 1, 1]) : await parseMultiPose(res, config3, input, [0, 0, 1, 1]);
|
||||||
Object.keys(t).forEach((tensor3) => tfjs_esm_exports.dispose(t[tensor3]));
|
Object.keys(t).forEach((tensor3) => tfjs_esm_exports.dispose(t[tensor3]));
|
||||||
cachedBoxes.length = 0;
|
cachedBoxes.length = 0;
|
||||||
skipped6 = 0;
|
skipped7 = 0;
|
||||||
}
|
}
|
||||||
if (config3.skipFrame) {
|
if (config3.skipFrame) {
|
||||||
cachedBoxes.length = 0;
|
cachedBoxes.length = 0;
|
||||||
for (let i = 0; i < bodies.length; i++) {
|
for (let i = 0; i < bodies.length; i++) {
|
||||||
if (bodies[i].keypoints.length > 10) {
|
if (bodies[i].keypoints.length > 10) {
|
||||||
const kpts = bodies[i].keypoints.map((kpt) => kpt.position);
|
const kpts = bodies[i].keypoints.map((kpt4) => kpt4.position);
|
||||||
const newBox = scale(kpts, 1.5, [input.shape[2], input.shape[1]]);
|
const newBox = scale(kpts, 1.5, [input.shape[2], input.shape[1]]);
|
||||||
cachedBoxes.push([...newBox.yxBox]);
|
cachedBoxes.push([...newBox.yxBox]);
|
||||||
}
|
}
|
||||||
|
@ -9953,7 +10071,7 @@ var labels = [
|
||||||
// src/object/nanodet.ts
|
// src/object/nanodet.ts
|
||||||
var model9;
|
var model9;
|
||||||
var last3 = [];
|
var last3 = [];
|
||||||
var skipped7 = Number.MAX_SAFE_INTEGER;
|
var skipped8 = Number.MAX_SAFE_INTEGER;
|
||||||
var scaleBox = 2.5;
|
var scaleBox = 2.5;
|
||||||
async function load10(config3) {
|
async function load10(config3) {
|
||||||
if (!model9 || env2.initial) {
|
if (!model9 || env2.initial) {
|
||||||
|
@ -10032,15 +10150,15 @@ async function process3(res, inputSize8, outputShape, config3) {
|
||||||
return results;
|
return results;
|
||||||
}
|
}
|
||||||
async function predict10(image24, config3) {
|
async function predict10(image24, config3) {
|
||||||
if (skipped7 < (config3.object.skipFrames || 0) && config3.skipFrame && last3.length > 0) {
|
if (skipped8 < (config3.object.skipFrames || 0) && config3.skipFrame && last3.length > 0) {
|
||||||
skipped7++;
|
skipped8++;
|
||||||
return last3;
|
return last3;
|
||||||
}
|
}
|
||||||
skipped7 = 0;
|
skipped8 = 0;
|
||||||
if (!env2.kernels.includes("mod") || !env2.kernels.includes("sparsetodense"))
|
if (!env2.kernels.includes("mod") || !env2.kernels.includes("sparsetodense"))
|
||||||
return last3;
|
return last3;
|
||||||
return new Promise(async (resolve) => {
|
return new Promise(async (resolve) => {
|
||||||
const outputSize3 = [image24.shape[2], image24.shape[1]];
|
const outputSize2 = [image24.shape[2], image24.shape[1]];
|
||||||
const resize = tfjs_esm_exports.image.resizeBilinear(image24, [model9.inputSize, model9.inputSize], false);
|
const resize = tfjs_esm_exports.image.resizeBilinear(image24, [model9.inputSize, model9.inputSize], false);
|
||||||
const norm = tfjs_esm_exports.div(resize, 255);
|
const norm = tfjs_esm_exports.div(resize, 255);
|
||||||
const transpose = norm.transpose([0, 3, 1, 2]);
|
const transpose = norm.transpose([0, 3, 1, 2]);
|
||||||
|
@ -10050,7 +10168,7 @@ async function predict10(image24, config3) {
|
||||||
if (config3.object.enabled)
|
if (config3.object.enabled)
|
||||||
objectT = await model9.predict(transpose);
|
objectT = await model9.predict(transpose);
|
||||||
tfjs_esm_exports.dispose(transpose);
|
tfjs_esm_exports.dispose(transpose);
|
||||||
const obj = await process3(objectT, model9.inputSize, outputSize3, config3);
|
const obj = await process3(objectT, model9.inputSize, outputSize2, config3);
|
||||||
last3 = obj;
|
last3 = obj;
|
||||||
resolve(obj);
|
resolve(obj);
|
||||||
});
|
});
|
||||||
|
@ -10060,7 +10178,7 @@ async function predict10(image24, config3) {
|
||||||
var model10;
|
var model10;
|
||||||
var inputSize7 = 0;
|
var inputSize7 = 0;
|
||||||
var last4 = [];
|
var last4 = [];
|
||||||
var skipped8 = Number.MAX_SAFE_INTEGER;
|
var skipped9 = Number.MAX_SAFE_INTEGER;
|
||||||
async function load11(config3) {
|
async function load11(config3) {
|
||||||
if (env2.initial)
|
if (env2.initial)
|
||||||
model10 = null;
|
model10 = null;
|
||||||
|
@ -10124,19 +10242,19 @@ async function process4(res, outputShape, config3) {
|
||||||
return results;
|
return results;
|
||||||
}
|
}
|
||||||
async function predict11(input, config3) {
|
async function predict11(input, config3) {
|
||||||
if (skipped8 < (config3.object.skipFrames || 0) && config3.skipFrame && last4.length > 0) {
|
if (skipped9 < (config3.object.skipFrames || 0) && config3.skipFrame && last4.length > 0) {
|
||||||
skipped8++;
|
skipped9++;
|
||||||
return last4;
|
return last4;
|
||||||
}
|
}
|
||||||
skipped8 = 0;
|
skipped9 = 0;
|
||||||
if (!env2.kernels.includes("mod") || !env2.kernels.includes("sparsetodense"))
|
if (!env2.kernels.includes("mod") || !env2.kernels.includes("sparsetodense"))
|
||||||
return last4;
|
return last4;
|
||||||
return new Promise(async (resolve) => {
|
return new Promise(async (resolve) => {
|
||||||
const outputSize3 = [input.shape[2], input.shape[1]];
|
const outputSize2 = [input.shape[2], input.shape[1]];
|
||||||
const resize = tfjs_esm_exports.image.resizeBilinear(input, [inputSize7, inputSize7]);
|
const resize = tfjs_esm_exports.image.resizeBilinear(input, [inputSize7, inputSize7]);
|
||||||
const objectT = config3.object.enabled ? model10 == null ? void 0 : model10.execute(resize, ["tower_0/detections"]) : null;
|
const objectT = config3.object.enabled ? model10 == null ? void 0 : model10.execute(resize, ["tower_0/detections"]) : null;
|
||||||
tfjs_esm_exports.dispose(resize);
|
tfjs_esm_exports.dispose(resize);
|
||||||
const obj = await process4(objectT, outputSize3, config3);
|
const obj = await process4(objectT, outputSize2, config3);
|
||||||
last4 = obj;
|
last4 = obj;
|
||||||
resolve(obj);
|
resolve(obj);
|
||||||
});
|
});
|
||||||
|
@ -10227,7 +10345,7 @@ async function process5(input, background, config3) {
|
||||||
|
|
||||||
// src/gear/gear-agegenderrace.ts
|
// src/gear/gear-agegenderrace.ts
|
||||||
var model12;
|
var model12;
|
||||||
var skipped9 = Number.MAX_SAFE_INTEGER;
|
var skipped10 = Number.MAX_SAFE_INTEGER;
|
||||||
async function load13(config3) {
|
async function load13(config3) {
|
||||||
if (env2.initial)
|
if (env2.initial)
|
||||||
model12 = null;
|
model12 = null;
|
||||||
|
@ -10407,7 +10525,6 @@ async function register(instance) {
|
||||||
log("error: humangl:", e.type);
|
log("error: humangl:", e.type);
|
||||||
log("possible browser memory leak using webgl");
|
log("possible browser memory leak using webgl");
|
||||||
instance.emit("error");
|
instance.emit("error");
|
||||||
throw new Error("browser webgl error");
|
|
||||||
});
|
});
|
||||||
config2.canvas.addEventListener("webglcontextrestored", (e) => {
|
config2.canvas.addEventListener("webglcontextrestored", (e) => {
|
||||||
log("error: humangl context restored:", e);
|
log("error: humangl context restored:", e);
|
||||||
|
@ -10542,10 +10659,8 @@ async function check(instance, force = false) {
|
||||||
log(`gl version:${gl.getParameter(gl.VERSION)} renderer:${gl.getParameter(gl.RENDERER)}`);
|
log(`gl version:${gl.getParameter(gl.VERSION)} renderer:${gl.getParameter(gl.RENDERER)}`);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (tfjs_esm_exports.getBackend() === "humangl") {
|
if (tfjs_esm_exports.getBackend() === "webgpu") {
|
||||||
tfjs_esm_exports.ENV.set("WEBGPU_USE_GLSL", true);
|
tfjs_esm_exports.ENV.set("WEBGPU_USE_GLSL", true);
|
||||||
tfjs_esm_exports.ENV.set("WEBGL_PACK_DEPTHWISECONV", false);
|
|
||||||
tfjs_esm_exports.ENV.set("WEBGL_USE_SHAPES_UNIFORMS", true);
|
|
||||||
}
|
}
|
||||||
tfjs_esm_exports.enableProdMode();
|
tfjs_esm_exports.enableProdMode();
|
||||||
await tfjs_esm_exports.ready();
|
await tfjs_esm_exports.ready();
|
||||||
|
@ -10817,109 +10932,24 @@ async function body(inCanvas2, result, drawOptions) {
|
||||||
ctx.fillText(`body ${100 * result[i].score}%`, result[i].box[0] + 2, 0 + result[i].box[1] + localOptions.lineHeight, result[i].box[2]);
|
ctx.fillText(`body ${100 * result[i].score}%`, result[i].box[0] + 2, 0 + result[i].box[1] + localOptions.lineHeight, result[i].box[2]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (localOptions.drawPoints) {
|
if (localOptions.drawPoints && result[i].keypoints) {
|
||||||
for (let pt = 0; pt < result[i].keypoints.length; pt++) {
|
for (let pt = 0; pt < result[i].keypoints.length; pt++) {
|
||||||
ctx.fillStyle = localOptions.useDepth && result[i].keypoints[pt].position[2] ? `rgba(${127.5 + 2 * (result[i].keypoints[pt].position[2] || 0)}, ${127.5 - 2 * (result[i].keypoints[pt].position[2] || 0)}, 255, 0.5)` : localOptions.color;
|
ctx.fillStyle = localOptions.useDepth && result[i].keypoints[pt].position[2] ? `rgba(${127.5 + 2 * (result[i].keypoints[pt].position[2] || 0)}, ${127.5 - 2 * (result[i].keypoints[pt].position[2] || 0)}, 255, 0.5)` : localOptions.color;
|
||||||
point(ctx, result[i].keypoints[pt].position[0], result[i].keypoints[pt].position[1], 0, localOptions);
|
point(ctx, result[i].keypoints[pt].position[0], result[i].keypoints[pt].position[1], 0, localOptions);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (localOptions.drawLabels) {
|
if (localOptions.drawLabels && result[i].keypoints) {
|
||||||
ctx.font = localOptions.font;
|
ctx.font = localOptions.font;
|
||||||
if (result[i].keypoints) {
|
for (const pt of result[i].keypoints) {
|
||||||
for (const pt of result[i].keypoints) {
|
ctx.fillStyle = localOptions.useDepth && pt.position[2] ? `rgba(${127.5 + 2 * pt.position[2]}, ${127.5 - 2 * pt.position[2]}, 255, 0.5)` : localOptions.color;
|
||||||
ctx.fillStyle = localOptions.useDepth && pt.position[2] ? `rgba(${127.5 + 2 * pt.position[2]}, ${127.5 - 2 * pt.position[2]}, 255, 0.5)` : localOptions.color;
|
ctx.fillText(`${pt.part} ${Math.trunc(100 * pt.score)}%`, pt.position[0] + 4, pt.position[1] + 4);
|
||||||
ctx.fillText(`${pt.part} ${Math.trunc(100 * pt.score)}%`, pt.position[0] + 4, pt.position[1] + 4);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (localOptions.drawPolygons && result[i].keypoints) {
|
if (localOptions.drawPolygons && result[i].keypoints && result[i].annotations) {
|
||||||
let part;
|
for (const part of Object.values(result[i].annotations)) {
|
||||||
const points = [];
|
for (const connected4 of part)
|
||||||
points.length = 0;
|
curves(ctx, connected4, localOptions);
|
||||||
part = result[i].keypoints.find((a) => a.part === "leftShoulder");
|
}
|
||||||
if (part)
|
|
||||||
points.push([part.position[0], part.position[1]]);
|
|
||||||
part = result[i].keypoints.find((a) => a.part === "rightShoulder");
|
|
||||||
if (part)
|
|
||||||
points.push([part.position[0], part.position[1]]);
|
|
||||||
curves(ctx, points, localOptions);
|
|
||||||
points.length = 0;
|
|
||||||
part = result[i].keypoints.find((a) => a.part === "rightShoulder");
|
|
||||||
if (part)
|
|
||||||
points.push([part.position[0], part.position[1]]);
|
|
||||||
part = result[i].keypoints.find((a) => a.part === "rightHip");
|
|
||||||
if (part)
|
|
||||||
points.push([part.position[0], part.position[1]]);
|
|
||||||
part = result[i].keypoints.find((a) => a.part === "leftHip");
|
|
||||||
if (part)
|
|
||||||
points.push([part.position[0], part.position[1]]);
|
|
||||||
part = result[i].keypoints.find((a) => a.part === "leftShoulder");
|
|
||||||
if (part)
|
|
||||||
points.push([part.position[0], part.position[1]]);
|
|
||||||
if (points.length === 4)
|
|
||||||
lines(ctx, points, localOptions);
|
|
||||||
points.length = 0;
|
|
||||||
part = result[i].keypoints.find((a) => a.part === "leftHip");
|
|
||||||
if (part)
|
|
||||||
points.push([part.position[0], part.position[1]]);
|
|
||||||
part = result[i].keypoints.find((a) => a.part === "leftKnee");
|
|
||||||
if (part)
|
|
||||||
points.push([part.position[0], part.position[1]]);
|
|
||||||
part = result[i].keypoints.find((a) => a.part === "leftAnkle");
|
|
||||||
if (part)
|
|
||||||
points.push([part.position[0], part.position[1]]);
|
|
||||||
part = result[i].keypoints.find((a) => a.part === "leftHeel");
|
|
||||||
if (part)
|
|
||||||
points.push([part.position[0], part.position[1]]);
|
|
||||||
part = result[i].keypoints.find((a) => a.part === "leftFoot");
|
|
||||||
if (part)
|
|
||||||
points.push([part.position[0], part.position[1]]);
|
|
||||||
curves(ctx, points, localOptions);
|
|
||||||
points.length = 0;
|
|
||||||
part = result[i].keypoints.find((a) => a.part === "rightHip");
|
|
||||||
if (part)
|
|
||||||
points.push([part.position[0], part.position[1]]);
|
|
||||||
part = result[i].keypoints.find((a) => a.part === "rightKnee");
|
|
||||||
if (part)
|
|
||||||
points.push([part.position[0], part.position[1]]);
|
|
||||||
part = result[i].keypoints.find((a) => a.part === "rightAnkle");
|
|
||||||
if (part)
|
|
||||||
points.push([part.position[0], part.position[1]]);
|
|
||||||
part = result[i].keypoints.find((a) => a.part === "rightHeel");
|
|
||||||
if (part)
|
|
||||||
points.push([part.position[0], part.position[1]]);
|
|
||||||
part = result[i].keypoints.find((a) => a.part === "rightFoot");
|
|
||||||
if (part)
|
|
||||||
points.push([part.position[0], part.position[1]]);
|
|
||||||
curves(ctx, points, localOptions);
|
|
||||||
points.length = 0;
|
|
||||||
part = result[i].keypoints.find((a) => a.part === "leftShoulder");
|
|
||||||
if (part)
|
|
||||||
points.push([part.position[0], part.position[1]]);
|
|
||||||
part = result[i].keypoints.find((a) => a.part === "leftElbow");
|
|
||||||
if (part)
|
|
||||||
points.push([part.position[0], part.position[1]]);
|
|
||||||
part = result[i].keypoints.find((a) => a.part === "leftWrist");
|
|
||||||
if (part)
|
|
||||||
points.push([part.position[0], part.position[1]]);
|
|
||||||
part = result[i].keypoints.find((a) => a.part === "leftPalm");
|
|
||||||
if (part)
|
|
||||||
points.push([part.position[0], part.position[1]]);
|
|
||||||
curves(ctx, points, localOptions);
|
|
||||||
points.length = 0;
|
|
||||||
part = result[i].keypoints.find((a) => a.part === "rightShoulder");
|
|
||||||
if (part)
|
|
||||||
points.push([part.position[0], part.position[1]]);
|
|
||||||
part = result[i].keypoints.find((a) => a.part === "rightElbow");
|
|
||||||
if (part)
|
|
||||||
points.push([part.position[0], part.position[1]]);
|
|
||||||
part = result[i].keypoints.find((a) => a.part === "rightWrist");
|
|
||||||
if (part)
|
|
||||||
points.push([part.position[0], part.position[1]]);
|
|
||||||
part = result[i].keypoints.find((a) => a.part === "rightPalm");
|
|
||||||
if (part)
|
|
||||||
points.push([part.position[0], part.position[1]]);
|
|
||||||
curves(ctx, points, localOptions);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -11409,15 +11439,15 @@ function calc(newResult) {
|
||||||
if (bufferedResult.hand[i].keypoints.length !== newResult.hand[i].keypoints.length)
|
if (bufferedResult.hand[i].keypoints.length !== newResult.hand[i].keypoints.length)
|
||||||
bufferedResult.hand[i].keypoints = newResult.hand[i].keypoints;
|
bufferedResult.hand[i].keypoints = newResult.hand[i].keypoints;
|
||||||
const keypoints3 = newResult.hand[i].keypoints && newResult.hand[i].keypoints.length > 0 ? newResult.hand[i].keypoints.map((landmark, j) => landmark.map((coord, k) => ((bufferedFactor - 1) * (bufferedResult.hand[i].keypoints[j][k] || 1) + (coord || 0)) / bufferedFactor)) : [];
|
const keypoints3 = newResult.hand[i].keypoints && newResult.hand[i].keypoints.length > 0 ? newResult.hand[i].keypoints.map((landmark, j) => landmark.map((coord, k) => ((bufferedFactor - 1) * (bufferedResult.hand[i].keypoints[j][k] || 1) + (coord || 0)) / bufferedFactor)) : [];
|
||||||
const annotations3 = {};
|
const annotations2 = {};
|
||||||
if (Object.keys(bufferedResult.hand[i].annotations).length !== Object.keys(newResult.hand[i].annotations).length)
|
if (Object.keys(bufferedResult.hand[i].annotations).length !== Object.keys(newResult.hand[i].annotations).length)
|
||||||
bufferedResult.hand[i].annotations = newResult.hand[i].annotations;
|
bufferedResult.hand[i].annotations = newResult.hand[i].annotations;
|
||||||
if (newResult.hand[i].annotations) {
|
if (newResult.hand[i].annotations) {
|
||||||
for (const key of Object.keys(newResult.hand[i].annotations)) {
|
for (const key of Object.keys(newResult.hand[i].annotations)) {
|
||||||
annotations3[key] = newResult.hand[i].annotations[key] && newResult.hand[i].annotations[key][0] ? newResult.hand[i].annotations[key].map((val, j) => val.map((coord, k) => ((bufferedFactor - 1) * bufferedResult.hand[i].annotations[key][j][k] + coord) / bufferedFactor)) : null;
|
annotations2[key] = newResult.hand[i].annotations[key] && newResult.hand[i].annotations[key][0] ? newResult.hand[i].annotations[key].map((val, j) => val.map((coord, k) => ((bufferedFactor - 1) * bufferedResult.hand[i].annotations[key][j][k] + coord) / bufferedFactor)) : null;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
bufferedResult.hand[i] = { ...newResult.hand[i], box: box4, boxRaw: boxRaw2, keypoints: keypoints3, annotations: annotations3 };
|
bufferedResult.hand[i] = { ...newResult.hand[i], box: box4, boxRaw: boxRaw2, keypoints: keypoints3, annotations: annotations2 };
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (!bufferedResult.face || newResult.face.length !== bufferedResult.face.length) {
|
if (!bufferedResult.face || newResult.face.length !== bufferedResult.face.length) {
|
||||||
|
|
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
|
@ -216,7 +216,7 @@ var config = {
|
||||||
},
|
},
|
||||||
maxDetected: -1,
|
maxDetected: -1,
|
||||||
minConfidence: 0.2,
|
minConfidence: 0.2,
|
||||||
skipFrames: 1
|
skipFrames: 5
|
||||||
},
|
},
|
||||||
hand: {
|
hand: {
|
||||||
enabled: true,
|
enabled: true,
|
||||||
|
@ -1200,6 +1200,8 @@ function process2(input, config3) {
|
||||||
tempCanvas.height = targetHeight;
|
tempCanvas.height = targetHeight;
|
||||||
const tempCtx = tempCanvas.getContext("2d");
|
const tempCtx = tempCanvas.getContext("2d");
|
||||||
tempCtx == null ? void 0 : tempCtx.drawImage(outCanvas, 0, 0);
|
tempCtx == null ? void 0 : tempCtx.drawImage(outCanvas, 0, 0);
|
||||||
|
console.log("PIXELS", tempCanvas);
|
||||||
|
pixels = tf2.browser && env2.browser ? tf2.browser.fromPixels(tempCanvas) : null;
|
||||||
try {
|
try {
|
||||||
pixels = tf2.browser && env2.browser ? tf2.browser.fromPixels(tempCanvas) : null;
|
pixels = tf2.browser && env2.browser ? tf2.browser.fromPixels(tempCanvas) : null;
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
|
@ -8780,11 +8782,11 @@ var HandPipeline = class {
|
||||||
const rawCoords = await keypointsReshaped.array();
|
const rawCoords = await keypointsReshaped.array();
|
||||||
tf12.dispose(keypoints3);
|
tf12.dispose(keypoints3);
|
||||||
tf12.dispose(keypointsReshaped);
|
tf12.dispose(keypointsReshaped);
|
||||||
const coords4 = this.transformRawCoords(rawCoords, newBox, angle, rotationMatrix);
|
const coords7 = this.transformRawCoords(rawCoords, newBox, angle, rotationMatrix);
|
||||||
const nextBoundingBox = this.getBoxForHandLandmarks(coords4);
|
const nextBoundingBox = this.getBoxForHandLandmarks(coords7);
|
||||||
this.storedBoxes[i] = { ...nextBoundingBox, confidence };
|
this.storedBoxes[i] = { ...nextBoundingBox, confidence };
|
||||||
const result = {
|
const result = {
|
||||||
landmarks: coords4,
|
landmarks: coords7,
|
||||||
confidence,
|
confidence,
|
||||||
boxConfidence: currentBox.confidence,
|
boxConfidence: currentBox.confidence,
|
||||||
fingerConfidence: confidence,
|
fingerConfidence: confidence,
|
||||||
|
@ -9211,10 +9213,10 @@ async function predict5(input, config3) {
|
||||||
return [];
|
return [];
|
||||||
const hands = [];
|
const hands = [];
|
||||||
for (let i = 0; i < predictions.length; i++) {
|
for (let i = 0; i < predictions.length; i++) {
|
||||||
const annotations3 = {};
|
const annotations2 = {};
|
||||||
if (predictions[i].landmarks) {
|
if (predictions[i].landmarks) {
|
||||||
for (const key of Object.keys(meshAnnotations2)) {
|
for (const key of Object.keys(meshAnnotations2)) {
|
||||||
annotations3[key] = meshAnnotations2[key].map((index) => predictions[i].landmarks[index]);
|
annotations2[key] = meshAnnotations2[key].map((index) => predictions[i].landmarks[index]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
const keypoints3 = predictions[i].landmarks;
|
const keypoints3 = predictions[i].landmarks;
|
||||||
|
@ -9258,7 +9260,7 @@ async function predict5(input, config3) {
|
||||||
box: box4,
|
box: box4,
|
||||||
boxRaw: boxRaw2,
|
boxRaw: boxRaw2,
|
||||||
keypoints: keypoints3,
|
keypoints: keypoints3,
|
||||||
annotations: annotations3,
|
annotations: annotations2,
|
||||||
landmarks
|
landmarks
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
@ -9297,9 +9299,9 @@ async function load7(config3) {
|
||||||
}
|
}
|
||||||
|
|
||||||
// src/util/box.ts
|
// src/util/box.ts
|
||||||
function scale(keypoints3, boxScaleFact2, outputSize3) {
|
function scale(keypoints3, boxScaleFact2, outputSize2) {
|
||||||
const coords4 = [keypoints3.map((pt) => pt[0]), keypoints3.map((pt) => pt[1])];
|
const coords7 = [keypoints3.map((pt) => pt[0]), keypoints3.map((pt) => pt[1])];
|
||||||
const maxmin = [Math.max(...coords4[0]), Math.min(...coords4[0]), Math.max(...coords4[1]), Math.min(...coords4[1])];
|
const maxmin = [Math.max(...coords7[0]), Math.min(...coords7[0]), Math.max(...coords7[1]), Math.min(...coords7[1])];
|
||||||
const center = [(maxmin[0] + maxmin[1]) / 2, (maxmin[2] + maxmin[3]) / 2];
|
const center = [(maxmin[0] + maxmin[1]) / 2, (maxmin[2] + maxmin[3]) / 2];
|
||||||
const diff = Math.max(center[0] - maxmin[1], center[1] - maxmin[3], -center[0] + maxmin[0], -center[1] + maxmin[2]) * boxScaleFact2;
|
const diff = Math.max(center[0] - maxmin[1], center[1] - maxmin[3], -center[0] + maxmin[0], -center[1] + maxmin[2]) * boxScaleFact2;
|
||||||
const box4 = [
|
const box4 = [
|
||||||
|
@ -9309,10 +9311,10 @@ function scale(keypoints3, boxScaleFact2, outputSize3) {
|
||||||
Math.trunc(2 * diff)
|
Math.trunc(2 * diff)
|
||||||
];
|
];
|
||||||
const boxRaw2 = [
|
const boxRaw2 = [
|
||||||
box4[0] / outputSize3[0],
|
box4[0] / outputSize2[0],
|
||||||
box4[1] / outputSize3[1],
|
box4[1] / outputSize2[1],
|
||||||
box4[2] / outputSize3[0],
|
box4[2] / outputSize2[0],
|
||||||
box4[3] / outputSize3[1]
|
box4[3] / outputSize2[1]
|
||||||
];
|
];
|
||||||
const yxBox = [
|
const yxBox = [
|
||||||
boxRaw2[1],
|
boxRaw2[1],
|
||||||
|
@ -9502,10 +9504,10 @@ async function predict6(input, config3) {
|
||||||
}
|
}
|
||||||
|
|
||||||
// src/body/blazepose.ts
|
// src/body/blazepose.ts
|
||||||
var tf15 = __toModule(require_tfjs_esm());
|
var tf15 = __toModule(require("@tensorflow/tfjs"));
|
||||||
|
|
||||||
// src/body/annotations.ts
|
// src/body/blazeposecoords.ts
|
||||||
var full = [
|
var kpt = [
|
||||||
"nose",
|
"nose",
|
||||||
"leftEyeInside",
|
"leftEyeInside",
|
||||||
"leftEye",
|
"leftEye",
|
||||||
|
@ -9539,58 +9541,38 @@ var full = [
|
||||||
"rightHeel",
|
"rightHeel",
|
||||||
"leftFoot",
|
"leftFoot",
|
||||||
"rightFoot",
|
"rightFoot",
|
||||||
"midHip",
|
"bodyCenter",
|
||||||
"forehead",
|
"bodyTop",
|
||||||
"leftThumb",
|
"leftThumb",
|
||||||
"leftHand",
|
"leftHand",
|
||||||
"rightThumb",
|
"rightThumb",
|
||||||
"rightHand"
|
"rightHand"
|
||||||
];
|
];
|
||||||
var upper = [
|
var connected = {
|
||||||
"nose",
|
leftLeg: ["leftHip", "leftKnee", "leftAnkle", "leftHeel", "leftFoot"],
|
||||||
"leftEyeInside",
|
rightLeg: ["rightHip", "rightKnee", "rightAnkle", "rightHeel", "rightFoot"],
|
||||||
"leftEye",
|
torso: ["leftShoulder", "rightShoulder", "rightHip", "leftHip", "leftShoulder"],
|
||||||
"leftEyeOutside",
|
leftArm: ["leftShoulder", "leftElbow", "leftWrist", "leftPalm"],
|
||||||
"rightEyeInside",
|
rightArm: ["rightShoulder", "rightElbow", "rightWrist", "rightPalm"],
|
||||||
"rightEye",
|
leftHand: [],
|
||||||
"rightEyeOutside",
|
rightHand: [],
|
||||||
"leftEar",
|
head: []
|
||||||
"rightEar",
|
};
|
||||||
"leftMouth",
|
|
||||||
"rightMouth",
|
|
||||||
"leftShoulder",
|
|
||||||
"rightShoulder",
|
|
||||||
"leftElbow",
|
|
||||||
"rightElbow",
|
|
||||||
"left:15",
|
|
||||||
"right:16",
|
|
||||||
"left:17",
|
|
||||||
"right:18",
|
|
||||||
"left:19",
|
|
||||||
"right:20",
|
|
||||||
"left:21",
|
|
||||||
"right:22",
|
|
||||||
"leftChest",
|
|
||||||
"rightChest",
|
|
||||||
"neck",
|
|
||||||
"forehead",
|
|
||||||
"left:27",
|
|
||||||
"right:28",
|
|
||||||
"left:29",
|
|
||||||
"right:30"
|
|
||||||
];
|
|
||||||
|
|
||||||
// src/body/blazepose.ts
|
// src/body/blazepose.ts
|
||||||
|
var env3 = { initial: true };
|
||||||
var models2 = [null, null];
|
var models2 = [null, null];
|
||||||
var outputNodes = ["ld_3d", "activation_segmentation", "activation_heatmap", "world_3d", "output_poseflag"];
|
|
||||||
var inputSize5 = [[0, 0], [0, 0]];
|
var inputSize5 = [[0, 0], [0, 0]];
|
||||||
var outputSize2 = [0, 0];
|
var skipped5 = Number.MAX_SAFE_INTEGER;
|
||||||
|
var outputNodes;
|
||||||
|
var cache2 = null;
|
||||||
|
var padding = [[0, 0], [0, 0], [0, 0], [0, 0]];
|
||||||
async function loadDetect2(config3) {
|
async function loadDetect2(config3) {
|
||||||
var _a;
|
var _a, _b;
|
||||||
if (env2.initial)
|
if (env3.initial)
|
||||||
models2[0] = null;
|
models2[0] = null;
|
||||||
if (!models2[0]) {
|
if (!models2[0] && ((_a = config3.body.detector) == null ? void 0 : _a.modelPath) || "") {
|
||||||
models2[0] = await tf15.loadGraphModel(join(config3.modelBasePath, ((_a = config3.body.detector) == null ? void 0 : _a.modelPath) || ""));
|
models2[0] = await tf15.loadGraphModel(join(config3.modelBasePath, ((_b = config3.body.detector) == null ? void 0 : _b.modelPath) || ""));
|
||||||
const inputs = Object.values(models2[0].modelSignature["inputs"]);
|
const inputs = Object.values(models2[0].modelSignature["inputs"]);
|
||||||
inputSize5[0][0] = Array.isArray(inputs) ? parseInt(inputs[0].tensorShape.dim[1].size) : 0;
|
inputSize5[0][0] = Array.isArray(inputs) ? parseInt(inputs[0].tensorShape.dim[1].size) : 0;
|
||||||
inputSize5[0][1] = Array.isArray(inputs) ? parseInt(inputs[0].tensorShape.dim[2].size) : 0;
|
inputSize5[0][1] = Array.isArray(inputs) ? parseInt(inputs[0].tensorShape.dim[2].size) : 0;
|
||||||
|
@ -9598,18 +9580,23 @@ async function loadDetect2(config3) {
|
||||||
log("load model failed:", config3.object.modelPath);
|
log("load model failed:", config3.object.modelPath);
|
||||||
else if (config3.debug)
|
else if (config3.debug)
|
||||||
log("load model:", models2[0]["modelUrl"]);
|
log("load model:", models2[0]["modelUrl"]);
|
||||||
} else if (config3.debug)
|
} else if (config3.debug && models2[0])
|
||||||
log("cached model:", models2[0]["modelUrl"]);
|
log("cached model:", models2[0]["modelUrl"]);
|
||||||
return models2[0];
|
return models2[0];
|
||||||
}
|
}
|
||||||
async function loadPose(config3) {
|
async function loadPose(config3) {
|
||||||
if (env2.initial)
|
var _a;
|
||||||
|
if (env3.initial)
|
||||||
models2[1] = null;
|
models2[1] = null;
|
||||||
if (!models2[1]) {
|
if (!models2[1]) {
|
||||||
models2[1] = await tf15.loadGraphModel(join(config3.modelBasePath, config3.body.modelPath || ""));
|
models2[1] = await tf15.loadGraphModel(join(config3.modelBasePath, config3.body.modelPath || ""));
|
||||||
const inputs = Object.values(models2[1].modelSignature["inputs"]);
|
const inputs = Object.values(models2[1].modelSignature["inputs"]);
|
||||||
inputSize5[1][0] = Array.isArray(inputs) ? parseInt(inputs[0].tensorShape.dim[1].size) : 0;
|
inputSize5[1][0] = Array.isArray(inputs) ? parseInt(inputs[0].tensorShape.dim[1].size) : 0;
|
||||||
inputSize5[1][1] = Array.isArray(inputs) ? parseInt(inputs[0].tensorShape.dim[2].size) : 0;
|
inputSize5[1][1] = Array.isArray(inputs) ? parseInt(inputs[0].tensorShape.dim[2].size) : 0;
|
||||||
|
if ((_a = config3.body.modelPath) == null ? void 0 : _a.includes("lite"))
|
||||||
|
outputNodes = ["ld_3d", "output_segmentation", "output_heatmap", "world_3d", "output_poseflag"];
|
||||||
|
else
|
||||||
|
outputNodes = ["Identity", "Identity_2", "Identity_3", "Identity_4", "Identity_1"];
|
||||||
if (!models2[1] || !models2[1]["modelUrl"])
|
if (!models2[1] || !models2[1]["modelUrl"])
|
||||||
log("load model failed:", config3.object.modelPath);
|
log("load model failed:", config3.object.modelPath);
|
||||||
else if (config3.debug)
|
else if (config3.debug)
|
||||||
|
@ -9618,64 +9605,128 @@ async function loadPose(config3) {
|
||||||
log("cached model:", models2[1]["modelUrl"]);
|
log("cached model:", models2[1]["modelUrl"]);
|
||||||
return models2[1];
|
return models2[1];
|
||||||
}
|
}
|
||||||
async function detectParts(input, config3) {
|
function calculateBoxes(keypoints3, outputSize2) {
|
||||||
var _a;
|
|
||||||
const t = {};
|
|
||||||
t.resize = tf15.image.resizeBilinear(input, [inputSize5[1][0], inputSize5[1][1]]);
|
|
||||||
[t.ld, t.segmentation, t.heatmap, t.world, t.poseflag] = await ((_a = models2[1]) == null ? void 0 : _a.execute(t.resize, outputNodes));
|
|
||||||
const points = await t.ld.data();
|
|
||||||
const keypoints3 = [];
|
|
||||||
const labels2 = (points == null ? void 0 : points.length) === 195 ? full : upper;
|
|
||||||
const depth = 5;
|
|
||||||
for (let i = 0; i < points.length / depth; i++) {
|
|
||||||
const score3 = (100 - Math.trunc(100 / (1 + Math.exp(points[depth * i + 3])))) / 100;
|
|
||||||
if (score3 > (config3.body.minConfidence || 0)) {
|
|
||||||
keypoints3.push({
|
|
||||||
part: labels2[i],
|
|
||||||
position: [
|
|
||||||
Math.trunc(outputSize2[0] * points[depth * i + 0] / 255),
|
|
||||||
Math.trunc(outputSize2[1] * points[depth * i + 1] / 255),
|
|
||||||
Math.trunc(points[depth * i + 2]) + 0
|
|
||||||
],
|
|
||||||
positionRaw: [
|
|
||||||
points[depth * i + 0] / 255,
|
|
||||||
points[depth * i + 1] / 255,
|
|
||||||
points[depth * i + 2] + 0
|
|
||||||
],
|
|
||||||
score: score3
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
|
||||||
const x = keypoints3.map((a) => a.position[0]);
|
const x = keypoints3.map((a) => a.position[0]);
|
||||||
const y = keypoints3.map((a) => a.position[1]);
|
const y = keypoints3.map((a) => a.position[1]);
|
||||||
const box4 = [
|
const keypointsBox = [Math.min(...x), Math.min(...y), Math.max(...x) - Math.min(...x), Math.max(...y) - Math.min(...y)];
|
||||||
Math.min(...x),
|
const keypointsBoxRaw = [keypointsBox[0] / outputSize2[0], keypointsBox[1] / outputSize2[1], keypointsBox[2] / outputSize2[0], keypointsBox[3] / outputSize2[1]];
|
||||||
Math.min(...y),
|
return { keypointsBox, keypointsBoxRaw };
|
||||||
Math.max(...x) - Math.min(...x),
|
}
|
||||||
Math.max(...y) - Math.min(...x)
|
async function prepareImage(input) {
|
||||||
|
const t = {};
|
||||||
|
if (!input.shape || !input.shape[1] || !input.shape[2])
|
||||||
|
return input;
|
||||||
|
padding = [
|
||||||
|
[0, 0],
|
||||||
|
[input.shape[2] > input.shape[1] ? Math.trunc((input.shape[2] - input.shape[1]) / 2) : 0, input.shape[2] > input.shape[1] ? Math.trunc((input.shape[2] - input.shape[1]) / 2) : 0],
|
||||||
|
[input.shape[1] > input.shape[2] ? Math.trunc((input.shape[1] - input.shape[2]) / 2) : 0, input.shape[1] > input.shape[2] ? Math.trunc((input.shape[1] - input.shape[2]) / 2) : 0],
|
||||||
|
[0, 0]
|
||||||
];
|
];
|
||||||
const boxRaw2 = [0, 0, 0, 0];
|
t.pad = tf15.pad(input, padding);
|
||||||
const score2 = keypoints3.reduce((prev, curr) => curr.score > prev ? curr.score : prev, 0);
|
t.resize = tf15.image.resizeBilinear(t.pad, [inputSize5[1][0], inputSize5[1][1]]);
|
||||||
|
const final = tf15.div(t.resize, 255);
|
||||||
Object.keys(t).forEach((tensor3) => tf15.dispose(t[tensor3]));
|
Object.keys(t).forEach((tensor3) => tf15.dispose(t[tensor3]));
|
||||||
return { id: 0, score: score2, box: box4, boxRaw: boxRaw2, keypoints: keypoints3 };
|
return final;
|
||||||
|
}
|
||||||
|
function rescaleKeypoints(keypoints3, outputSize2) {
|
||||||
|
for (const kpt4 of keypoints3) {
|
||||||
|
kpt4.position = [
|
||||||
|
kpt4.position[0] * (outputSize2[0] + padding[2][0] + padding[2][1]) / outputSize2[0] - padding[2][0],
|
||||||
|
kpt4.position[1] * (outputSize2[1] + padding[1][0] + padding[1][1]) / outputSize2[1] - padding[1][0],
|
||||||
|
kpt4.position[2]
|
||||||
|
];
|
||||||
|
kpt4.positionRaw = [
|
||||||
|
kpt4.position[0] / outputSize2[0],
|
||||||
|
kpt4.position[1] / outputSize2[1],
|
||||||
|
kpt4.position[2]
|
||||||
|
];
|
||||||
|
}
|
||||||
|
return keypoints3;
|
||||||
|
}
|
||||||
|
async function detectParts(input, config3, outputSize2) {
|
||||||
|
var _a;
|
||||||
|
const t = {};
|
||||||
|
t.input = await prepareImage(input);
|
||||||
|
[t.ld, t.segmentation, t.heatmap, t.world, t.poseflag] = await ((_a = models2[1]) == null ? void 0 : _a.execute(t.input, outputNodes));
|
||||||
|
const points = await t.ld.data();
|
||||||
|
const keypointsRelative = [];
|
||||||
|
const depth = 5;
|
||||||
|
for (let i = 0; i < points.length / depth; i++) {
|
||||||
|
const score2 = (100 - Math.trunc(100 / (1 + Math.exp(points[depth * i + 3])))) / 100;
|
||||||
|
const positionRaw = [points[depth * i + 0] / inputSize5[1][0], points[depth * i + 1] / inputSize5[1][1], points[depth * i + 2] + 0];
|
||||||
|
const position = [Math.trunc(outputSize2[0] * positionRaw[0]), Math.trunc(outputSize2[1] * positionRaw[1]), positionRaw[2]];
|
||||||
|
keypointsRelative.push({ part: kpt[i], positionRaw, position, score: score2 });
|
||||||
|
}
|
||||||
|
const avgScore = Math.round(100 * keypointsRelative.reduce((prev, curr) => prev += curr.score, 0) / keypointsRelative.length) / 100;
|
||||||
|
if (avgScore < (config3.body.minConfidence || 0))
|
||||||
|
return null;
|
||||||
|
const keypoints3 = rescaleKeypoints(keypointsRelative, outputSize2);
|
||||||
|
const boxes = calculateBoxes(keypoints3, [outputSize2[0], outputSize2[1]]);
|
||||||
|
Object.keys(t).forEach((tensor3) => tf15.dispose(t[tensor3]));
|
||||||
|
const annotations2 = {};
|
||||||
|
for (const [name, indexes] of Object.entries(connected)) {
|
||||||
|
const pt = [];
|
||||||
|
for (let i = 0; i < indexes.length - 1; i++) {
|
||||||
|
const pt0 = keypoints3.find((kpt4) => kpt4.part === indexes[i]);
|
||||||
|
const pt1 = keypoints3.find((kpt4) => kpt4.part === indexes[i + 1]);
|
||||||
|
if (pt0 && pt1 && pt0.score > (config3.body.minConfidence || 0) && pt1.score > (config3.body.minConfidence || 0))
|
||||||
|
pt.push([pt0.position, pt1.position]);
|
||||||
|
}
|
||||||
|
annotations2[name] = pt;
|
||||||
|
}
|
||||||
|
return { id: 0, score: avgScore, box: boxes.keypointsBox, boxRaw: boxes.keypointsBoxRaw, keypoints: keypoints3, annotations: annotations2 };
|
||||||
}
|
}
|
||||||
async function predict7(input, config3) {
|
async function predict7(input, config3) {
|
||||||
outputSize2 = [input.shape[2] || 0, input.shape[1] || 0];
|
const outputSize2 = [input.shape[2] || 0, input.shape[1] || 0];
|
||||||
const bodies = [];
|
if (skipped5 < (config3.body.skipFrames || 0) && config3.skipFrame) {
|
||||||
const body4 = await detectParts(input, config3);
|
skipped5++;
|
||||||
bodies.push(body4);
|
} else {
|
||||||
return bodies;
|
cache2 = await detectParts(input, config3, outputSize2);
|
||||||
|
skipped5 = 0;
|
||||||
|
}
|
||||||
|
if (cache2)
|
||||||
|
return [cache2];
|
||||||
|
return [];
|
||||||
}
|
}
|
||||||
|
|
||||||
// src/body/efficientpose.ts
|
// src/body/efficientpose.ts
|
||||||
var tf16 = __toModule(require_tfjs_esm());
|
var tf16 = __toModule(require_tfjs_esm());
|
||||||
|
|
||||||
|
// src/body/efficientposecoords.ts
|
||||||
|
var kpt2 = [
|
||||||
|
"head",
|
||||||
|
"neck",
|
||||||
|
"rightShoulder",
|
||||||
|
"rightElbow",
|
||||||
|
"rightWrist",
|
||||||
|
"chest",
|
||||||
|
"leftShoulder",
|
||||||
|
"leftElbow",
|
||||||
|
"leftWrist",
|
||||||
|
"bodyCenter",
|
||||||
|
"rightHip",
|
||||||
|
"rightKnee",
|
||||||
|
"rightAnkle",
|
||||||
|
"leftHip",
|
||||||
|
"leftKnee",
|
||||||
|
"leftAnkle"
|
||||||
|
];
|
||||||
|
var connected2 = {
|
||||||
|
leftLeg: ["leftHip", "leftKnee", "leftAnkle"],
|
||||||
|
rightLeg: ["rightHip", "rightKnee", "rightAnkle"],
|
||||||
|
torso: ["leftShoulder", "rightShoulder", "rightHip", "leftHip", "leftShoulder"],
|
||||||
|
leftArm: ["leftShoulder", "leftElbow", "leftWrist"],
|
||||||
|
rightArm: ["rightShoulder", "rightElbow", "rightWrist"],
|
||||||
|
head: []
|
||||||
|
};
|
||||||
|
|
||||||
|
// src/body/efficientpose.ts
|
||||||
var model7;
|
var model7;
|
||||||
var keypoints = [];
|
var keypoints = [];
|
||||||
var box3 = [0, 0, 0, 0];
|
var box3 = [0, 0, 0, 0];
|
||||||
var boxRaw = [0, 0, 0, 0];
|
var boxRaw = [0, 0, 0, 0];
|
||||||
var score = 0;
|
var score = 0;
|
||||||
var skipped5 = Number.MAX_SAFE_INTEGER;
|
var skipped6 = Number.MAX_SAFE_INTEGER;
|
||||||
var bodyParts = ["head", "neck", "rightShoulder", "rightElbow", "rightWrist", "chest", "leftShoulder", "leftElbow", "leftWrist", "pelvis", "rightHip", "rightKnee", "rightAnkle", "leftHip", "leftKnee", "leftAnkle"];
|
|
||||||
async function load8(config3) {
|
async function load8(config3) {
|
||||||
if (env2.initial)
|
if (env2.initial)
|
||||||
model7 = null;
|
model7 = null;
|
||||||
|
@ -9696,9 +9747,9 @@ function max2d(inputs, minScore) {
|
||||||
const reshaped = tf16.reshape(inputs, [height * width]);
|
const reshaped = tf16.reshape(inputs, [height * width]);
|
||||||
const newScore = tf16.max(reshaped, 0).dataSync()[0];
|
const newScore = tf16.max(reshaped, 0).dataSync()[0];
|
||||||
if (newScore > minScore) {
|
if (newScore > minScore) {
|
||||||
const coords4 = tf16.argMax(reshaped, 0);
|
const coordinates = tf16.argMax(reshaped, 0);
|
||||||
const x = mod(coords4, width).dataSync()[0];
|
const x = mod(coordinates, width).dataSync()[0];
|
||||||
const y = tf16.div(coords4, tf16.scalar(width, "int32")).dataSync()[0];
|
const y = tf16.div(coordinates, tf16.scalar(width, "int32")).dataSync()[0];
|
||||||
return [x, y, newScore];
|
return [x, y, newScore];
|
||||||
}
|
}
|
||||||
return [0, 0, newScore];
|
return [0, 0, newScore];
|
||||||
|
@ -9706,11 +9757,11 @@ function max2d(inputs, minScore) {
|
||||||
}
|
}
|
||||||
async function predict8(image24, config3) {
|
async function predict8(image24, config3) {
|
||||||
var _a;
|
var _a;
|
||||||
if (skipped5 < (((_a = config3.body) == null ? void 0 : _a.skipFrames) || 0) && config3.skipFrame && Object.keys(keypoints).length > 0) {
|
if (skipped6 < (((_a = config3.body) == null ? void 0 : _a.skipFrames) || 0) && config3.skipFrame && Object.keys(keypoints).length > 0) {
|
||||||
skipped5++;
|
skipped6++;
|
||||||
return [{ id: 0, score, box: box3, boxRaw, keypoints }];
|
return [{ id: 0, score, box: box3, boxRaw, keypoints, annotations: {} }];
|
||||||
}
|
}
|
||||||
skipped5 = 0;
|
skipped6 = 0;
|
||||||
return new Promise(async (resolve) => {
|
return new Promise(async (resolve) => {
|
||||||
var _a2;
|
var _a2;
|
||||||
const tensor3 = tf16.tidy(() => {
|
const tensor3 = tf16.tidy(() => {
|
||||||
|
@ -9736,7 +9787,7 @@ async function predict8(image24, config3) {
|
||||||
if (score > (((_a2 = config3.body) == null ? void 0 : _a2.minConfidence) || 0)) {
|
if (score > (((_a2 = config3.body) == null ? void 0 : _a2.minConfidence) || 0)) {
|
||||||
keypoints.push({
|
keypoints.push({
|
||||||
score: Math.round(100 * partScore) / 100,
|
score: Math.round(100 * partScore) / 100,
|
||||||
part: bodyParts[id],
|
part: kpt2[id],
|
||||||
positionRaw: [
|
positionRaw: [
|
||||||
x2 / model7.inputs[0].shape[2],
|
x2 / model7.inputs[0].shape[2],
|
||||||
y2 / model7.inputs[0].shape[1]
|
y2 / model7.inputs[0].shape[1]
|
||||||
|
@ -9767,18 +9818,59 @@ async function predict8(image24, config3) {
|
||||||
Math.max(...xRaw) - Math.min(...xRaw),
|
Math.max(...xRaw) - Math.min(...xRaw),
|
||||||
Math.max(...yRaw) - Math.min(...yRaw)
|
Math.max(...yRaw) - Math.min(...yRaw)
|
||||||
];
|
];
|
||||||
resolve([{ id: 0, score, box: box3, boxRaw, keypoints }]);
|
const annotations2 = {};
|
||||||
|
for (const [name, indexes] of Object.entries(connected2)) {
|
||||||
|
const pt = [];
|
||||||
|
for (let i = 0; i < indexes.length - 1; i++) {
|
||||||
|
const pt0 = keypoints.find((kpt4) => kpt4.part === indexes[i]);
|
||||||
|
const pt1 = keypoints.find((kpt4) => kpt4.part === indexes[i + 1]);
|
||||||
|
if (pt0 && pt1 && pt0.score > (config3.body.minConfidence || 0) && pt1.score > (config3.body.minConfidence || 0))
|
||||||
|
pt.push([pt0.position, pt1.position]);
|
||||||
|
}
|
||||||
|
annotations2[name] = pt;
|
||||||
|
}
|
||||||
|
resolve([{ id: 0, score, box: box3, boxRaw, keypoints, annotations: annotations2 }]);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
// src/body/movenet.ts
|
// src/body/movenet.ts
|
||||||
var tf17 = __toModule(require_tfjs_esm());
|
var tf17 = __toModule(require_tfjs_esm());
|
||||||
|
|
||||||
|
// src/body/movenetcoords.ts
|
||||||
|
var kpt3 = [
|
||||||
|
"nose",
|
||||||
|
"leftEye",
|
||||||
|
"rightEye",
|
||||||
|
"leftEar",
|
||||||
|
"rightEar",
|
||||||
|
"leftShoulder",
|
||||||
|
"rightShoulder",
|
||||||
|
"leftElbow",
|
||||||
|
"rightElbow",
|
||||||
|
"leftWrist",
|
||||||
|
"rightWrist",
|
||||||
|
"leftHip",
|
||||||
|
"rightHip",
|
||||||
|
"leftKnee",
|
||||||
|
"rightKnee",
|
||||||
|
"leftAnkle",
|
||||||
|
"rightAnkle"
|
||||||
|
];
|
||||||
|
var connected3 = {
|
||||||
|
leftLeg: ["leftHip", "leftKnee", "leftAnkle"],
|
||||||
|
rightLeg: ["rightHip", "rightKnee", "rightAnkle"],
|
||||||
|
torso: ["leftShoulder", "rightShoulder", "rightHip", "leftHip", "leftShoulder"],
|
||||||
|
leftArm: ["leftShoulder", "leftElbow", "leftWrist"],
|
||||||
|
rightArm: ["rightShoulder", "rightElbow", "rightWrist"],
|
||||||
|
head: []
|
||||||
|
};
|
||||||
|
|
||||||
|
// src/body/movenet.ts
|
||||||
var model8;
|
var model8;
|
||||||
var inputSize6 = 0;
|
var inputSize6 = 0;
|
||||||
var cachedBoxes = [];
|
var cachedBoxes = [];
|
||||||
var skipped6 = Number.MAX_SAFE_INTEGER;
|
var skipped7 = Number.MAX_SAFE_INTEGER;
|
||||||
var keypoints2 = [];
|
var keypoints2 = [];
|
||||||
var bodyParts2 = ["nose", "leftEye", "rightEye", "leftEar", "rightEar", "leftShoulder", "rightShoulder", "leftElbow", "rightElbow", "leftWrist", "rightWrist", "leftHip", "rightHip", "leftKnee", "rightKnee", "leftAnkle", "rightAnkle"];
|
|
||||||
async function load9(config3) {
|
async function load9(config3) {
|
||||||
if (env2.initial)
|
if (env2.initial)
|
||||||
model8 = null;
|
model8 = null;
|
||||||
|
@ -9816,19 +9908,19 @@ function createBox2(points) {
|
||||||
return [box4, boxRaw2];
|
return [box4, boxRaw2];
|
||||||
}
|
}
|
||||||
async function parseSinglePose(res, config3, image24, inputBox) {
|
async function parseSinglePose(res, config3, image24, inputBox) {
|
||||||
const kpt = res[0][0];
|
const kpt4 = res[0][0];
|
||||||
keypoints2.length = 0;
|
keypoints2.length = 0;
|
||||||
let score2 = 0;
|
let score2 = 0;
|
||||||
for (let id = 0; id < kpt.length; id++) {
|
for (let id = 0; id < kpt4.length; id++) {
|
||||||
score2 = kpt[id][2];
|
score2 = kpt4[id][2];
|
||||||
if (score2 > config3.body.minConfidence) {
|
if (score2 > config3.body.minConfidence) {
|
||||||
const positionRaw = [
|
const positionRaw = [
|
||||||
(inputBox[3] - inputBox[1]) * kpt[id][1] + inputBox[1],
|
(inputBox[3] - inputBox[1]) * kpt4[id][1] + inputBox[1],
|
||||||
(inputBox[2] - inputBox[0]) * kpt[id][0] + inputBox[0]
|
(inputBox[2] - inputBox[0]) * kpt4[id][0] + inputBox[0]
|
||||||
];
|
];
|
||||||
keypoints2.push({
|
keypoints2.push({
|
||||||
score: Math.round(100 * score2) / 100,
|
score: Math.round(100 * score2) / 100,
|
||||||
part: bodyParts2[id],
|
part: kpt3[id],
|
||||||
positionRaw,
|
positionRaw,
|
||||||
position: [
|
position: [
|
||||||
Math.round((image24.shape[2] || 0) * positionRaw[0]),
|
Math.round((image24.shape[2] || 0) * positionRaw[0]),
|
||||||
|
@ -9840,25 +9932,36 @@ async function parseSinglePose(res, config3, image24, inputBox) {
|
||||||
score2 = keypoints2.reduce((prev, curr) => curr.score > prev ? curr.score : prev, 0);
|
score2 = keypoints2.reduce((prev, curr) => curr.score > prev ? curr.score : prev, 0);
|
||||||
const bodies = [];
|
const bodies = [];
|
||||||
const [box4, boxRaw2] = createBox2(keypoints2);
|
const [box4, boxRaw2] = createBox2(keypoints2);
|
||||||
bodies.push({ id: 0, score: score2, box: box4, boxRaw: boxRaw2, keypoints: keypoints2 });
|
const annotations2 = {};
|
||||||
|
for (const [name, indexes] of Object.entries(connected3)) {
|
||||||
|
const pt = [];
|
||||||
|
for (let i = 0; i < indexes.length - 1; i++) {
|
||||||
|
const pt0 = keypoints2.find((kp) => kp.part === indexes[i]);
|
||||||
|
const pt1 = keypoints2.find((kp) => kp.part === indexes[i + 1]);
|
||||||
|
if (pt0 && pt1 && pt0.score > (config3.body.minConfidence || 0) && pt1.score > (config3.body.minConfidence || 0))
|
||||||
|
pt.push([pt0.position, pt1.position]);
|
||||||
|
}
|
||||||
|
annotations2[name] = pt;
|
||||||
|
}
|
||||||
|
bodies.push({ id: 0, score: score2, box: box4, boxRaw: boxRaw2, keypoints: keypoints2, annotations: annotations2 });
|
||||||
return bodies;
|
return bodies;
|
||||||
}
|
}
|
||||||
async function parseMultiPose(res, config3, image24, inputBox) {
|
async function parseMultiPose(res, config3, image24, inputBox) {
|
||||||
const bodies = [];
|
const bodies = [];
|
||||||
for (let id = 0; id < res[0].length; id++) {
|
for (let id = 0; id < res[0].length; id++) {
|
||||||
const kpt = res[0][id];
|
const kpt4 = res[0][id];
|
||||||
const totalScore = Math.round(100 * kpt[51 + 4]) / 100;
|
const totalScore = Math.round(100 * kpt4[51 + 4]) / 100;
|
||||||
if (totalScore > config3.body.minConfidence) {
|
if (totalScore > config3.body.minConfidence) {
|
||||||
keypoints2.length = 0;
|
keypoints2.length = 0;
|
||||||
for (let i = 0; i < 17; i++) {
|
for (let i = 0; i < 17; i++) {
|
||||||
const score2 = kpt[3 * i + 2];
|
const score2 = kpt4[3 * i + 2];
|
||||||
if (score2 > config3.body.minConfidence) {
|
if (score2 > config3.body.minConfidence) {
|
||||||
const positionRaw = [
|
const positionRaw = [
|
||||||
(inputBox[3] - inputBox[1]) * kpt[3 * i + 1] + inputBox[1],
|
(inputBox[3] - inputBox[1]) * kpt4[3 * i + 1] + inputBox[1],
|
||||||
(inputBox[2] - inputBox[0]) * kpt[3 * i + 0] + inputBox[0]
|
(inputBox[2] - inputBox[0]) * kpt4[3 * i + 0] + inputBox[0]
|
||||||
];
|
];
|
||||||
keypoints2.push({
|
keypoints2.push({
|
||||||
part: bodyParts2[i],
|
part: kpt3[i],
|
||||||
score: Math.round(100 * score2) / 100,
|
score: Math.round(100 * score2) / 100,
|
||||||
positionRaw,
|
positionRaw,
|
||||||
position: [
|
position: [
|
||||||
|
@ -9868,9 +9971,19 @@ async function parseMultiPose(res, config3, image24, inputBox) {
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
const boxRaw2 = [kpt[51 + 1], kpt[51 + 0], kpt[51 + 3] - kpt[51 + 1], kpt[51 + 2] - kpt[51 + 0]];
|
const [box4, boxRaw2] = createBox2(keypoints2);
|
||||||
const box4 = [Math.trunc(boxRaw2[0] * (image24.shape[2] || 0)), Math.trunc(boxRaw2[1] * (image24.shape[1] || 0)), Math.trunc(boxRaw2[2] * (image24.shape[2] || 0)), Math.trunc(boxRaw2[3] * (image24.shape[1] || 0))];
|
const annotations2 = {};
|
||||||
bodies.push({ id, score: totalScore, boxRaw: boxRaw2, box: box4, keypoints: [...keypoints2] });
|
for (const [name, indexes] of Object.entries(connected3)) {
|
||||||
|
const pt = [];
|
||||||
|
for (let i = 0; i < indexes.length - 1; i++) {
|
||||||
|
const pt0 = keypoints2.find((kp) => kp.part === indexes[i]);
|
||||||
|
const pt1 = keypoints2.find((kp) => kp.part === indexes[i + 1]);
|
||||||
|
if (pt0 && pt1 && pt0.score > (config3.body.minConfidence || 0) && pt1.score > (config3.body.minConfidence || 0))
|
||||||
|
pt.push([pt0.position, pt1.position]);
|
||||||
|
}
|
||||||
|
annotations2[name] = pt;
|
||||||
|
}
|
||||||
|
bodies.push({ id, score: totalScore, boxRaw: boxRaw2, box: box4, keypoints: [...keypoints2], annotations: annotations2 });
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
bodies.sort((a, b) => b.score - a.score);
|
bodies.sort((a, b) => b.score - a.score);
|
||||||
|
@ -9886,7 +9999,7 @@ async function predict9(input, config3) {
|
||||||
let bodies = [];
|
let bodies = [];
|
||||||
if (!config3.skipFrame)
|
if (!config3.skipFrame)
|
||||||
cachedBoxes.length = 0;
|
cachedBoxes.length = 0;
|
||||||
skipped6++;
|
skipped7++;
|
||||||
for (let i = 0; i < cachedBoxes.length; i++) {
|
for (let i = 0; i < cachedBoxes.length; i++) {
|
||||||
t.crop = tf17.image.cropAndResize(input, [cachedBoxes[i]], [0], [inputSize6, inputSize6], "bilinear");
|
t.crop = tf17.image.cropAndResize(input, [cachedBoxes[i]], [0], [inputSize6, inputSize6], "bilinear");
|
||||||
t.cast = tf17.cast(t.crop, "int32");
|
t.cast = tf17.cast(t.crop, "int32");
|
||||||
|
@ -9896,7 +10009,7 @@ async function predict9(input, config3) {
|
||||||
bodies = bodies.concat(newBodies);
|
bodies = bodies.concat(newBodies);
|
||||||
Object.keys(t).forEach((tensor3) => tf17.dispose(t[tensor3]));
|
Object.keys(t).forEach((tensor3) => tf17.dispose(t[tensor3]));
|
||||||
}
|
}
|
||||||
if (bodies.length !== config3.body.maxDetected && skipped6 > (config3.body.skipFrames || 0)) {
|
if (bodies.length !== config3.body.maxDetected && skipped7 > (config3.body.skipFrames || 0)) {
|
||||||
t.resized = tf17.image.resizeBilinear(input, [inputSize6, inputSize6], false);
|
t.resized = tf17.image.resizeBilinear(input, [inputSize6, inputSize6], false);
|
||||||
t.cast = tf17.cast(t.resized, "int32");
|
t.cast = tf17.cast(t.resized, "int32");
|
||||||
t.res = await (model8 == null ? void 0 : model8.predict(t.cast));
|
t.res = await (model8 == null ? void 0 : model8.predict(t.cast));
|
||||||
|
@ -9904,13 +10017,13 @@ async function predict9(input, config3) {
|
||||||
bodies = t.res.shape[2] === 17 ? await parseSinglePose(res, config3, input, [0, 0, 1, 1]) : await parseMultiPose(res, config3, input, [0, 0, 1, 1]);
|
bodies = t.res.shape[2] === 17 ? await parseSinglePose(res, config3, input, [0, 0, 1, 1]) : await parseMultiPose(res, config3, input, [0, 0, 1, 1]);
|
||||||
Object.keys(t).forEach((tensor3) => tf17.dispose(t[tensor3]));
|
Object.keys(t).forEach((tensor3) => tf17.dispose(t[tensor3]));
|
||||||
cachedBoxes.length = 0;
|
cachedBoxes.length = 0;
|
||||||
skipped6 = 0;
|
skipped7 = 0;
|
||||||
}
|
}
|
||||||
if (config3.skipFrame) {
|
if (config3.skipFrame) {
|
||||||
cachedBoxes.length = 0;
|
cachedBoxes.length = 0;
|
||||||
for (let i = 0; i < bodies.length; i++) {
|
for (let i = 0; i < bodies.length; i++) {
|
||||||
if (bodies[i].keypoints.length > 10) {
|
if (bodies[i].keypoints.length > 10) {
|
||||||
const kpts = bodies[i].keypoints.map((kpt) => kpt.position);
|
const kpts = bodies[i].keypoints.map((kpt4) => kpt4.position);
|
||||||
const newBox = scale(kpts, 1.5, [input.shape[2], input.shape[1]]);
|
const newBox = scale(kpts, 1.5, [input.shape[2], input.shape[1]]);
|
||||||
cachedBoxes.push([...newBox.yxBox]);
|
cachedBoxes.push([...newBox.yxBox]);
|
||||||
}
|
}
|
||||||
|
@ -10010,7 +10123,7 @@ var labels = [
|
||||||
// src/object/nanodet.ts
|
// src/object/nanodet.ts
|
||||||
var model9;
|
var model9;
|
||||||
var last3 = [];
|
var last3 = [];
|
||||||
var skipped7 = Number.MAX_SAFE_INTEGER;
|
var skipped8 = Number.MAX_SAFE_INTEGER;
|
||||||
var scaleBox = 2.5;
|
var scaleBox = 2.5;
|
||||||
async function load10(config3) {
|
async function load10(config3) {
|
||||||
if (!model9 || env2.initial) {
|
if (!model9 || env2.initial) {
|
||||||
|
@ -10089,15 +10202,15 @@ async function process3(res, inputSize8, outputShape, config3) {
|
||||||
return results;
|
return results;
|
||||||
}
|
}
|
||||||
async function predict10(image24, config3) {
|
async function predict10(image24, config3) {
|
||||||
if (skipped7 < (config3.object.skipFrames || 0) && config3.skipFrame && last3.length > 0) {
|
if (skipped8 < (config3.object.skipFrames || 0) && config3.skipFrame && last3.length > 0) {
|
||||||
skipped7++;
|
skipped8++;
|
||||||
return last3;
|
return last3;
|
||||||
}
|
}
|
||||||
skipped7 = 0;
|
skipped8 = 0;
|
||||||
if (!env2.kernels.includes("mod") || !env2.kernels.includes("sparsetodense"))
|
if (!env2.kernels.includes("mod") || !env2.kernels.includes("sparsetodense"))
|
||||||
return last3;
|
return last3;
|
||||||
return new Promise(async (resolve) => {
|
return new Promise(async (resolve) => {
|
||||||
const outputSize3 = [image24.shape[2], image24.shape[1]];
|
const outputSize2 = [image24.shape[2], image24.shape[1]];
|
||||||
const resize = tf18.image.resizeBilinear(image24, [model9.inputSize, model9.inputSize], false);
|
const resize = tf18.image.resizeBilinear(image24, [model9.inputSize, model9.inputSize], false);
|
||||||
const norm = tf18.div(resize, 255);
|
const norm = tf18.div(resize, 255);
|
||||||
const transpose = norm.transpose([0, 3, 1, 2]);
|
const transpose = norm.transpose([0, 3, 1, 2]);
|
||||||
|
@ -10107,7 +10220,7 @@ async function predict10(image24, config3) {
|
||||||
if (config3.object.enabled)
|
if (config3.object.enabled)
|
||||||
objectT = await model9.predict(transpose);
|
objectT = await model9.predict(transpose);
|
||||||
tf18.dispose(transpose);
|
tf18.dispose(transpose);
|
||||||
const obj = await process3(objectT, model9.inputSize, outputSize3, config3);
|
const obj = await process3(objectT, model9.inputSize, outputSize2, config3);
|
||||||
last3 = obj;
|
last3 = obj;
|
||||||
resolve(obj);
|
resolve(obj);
|
||||||
});
|
});
|
||||||
|
@ -10118,7 +10231,7 @@ var tf19 = __toModule(require_tfjs_esm());
|
||||||
var model10;
|
var model10;
|
||||||
var inputSize7 = 0;
|
var inputSize7 = 0;
|
||||||
var last4 = [];
|
var last4 = [];
|
||||||
var skipped8 = Number.MAX_SAFE_INTEGER;
|
var skipped9 = Number.MAX_SAFE_INTEGER;
|
||||||
async function load11(config3) {
|
async function load11(config3) {
|
||||||
if (env2.initial)
|
if (env2.initial)
|
||||||
model10 = null;
|
model10 = null;
|
||||||
|
@ -10182,19 +10295,19 @@ async function process4(res, outputShape, config3) {
|
||||||
return results;
|
return results;
|
||||||
}
|
}
|
||||||
async function predict11(input, config3) {
|
async function predict11(input, config3) {
|
||||||
if (skipped8 < (config3.object.skipFrames || 0) && config3.skipFrame && last4.length > 0) {
|
if (skipped9 < (config3.object.skipFrames || 0) && config3.skipFrame && last4.length > 0) {
|
||||||
skipped8++;
|
skipped9++;
|
||||||
return last4;
|
return last4;
|
||||||
}
|
}
|
||||||
skipped8 = 0;
|
skipped9 = 0;
|
||||||
if (!env2.kernels.includes("mod") || !env2.kernels.includes("sparsetodense"))
|
if (!env2.kernels.includes("mod") || !env2.kernels.includes("sparsetodense"))
|
||||||
return last4;
|
return last4;
|
||||||
return new Promise(async (resolve) => {
|
return new Promise(async (resolve) => {
|
||||||
const outputSize3 = [input.shape[2], input.shape[1]];
|
const outputSize2 = [input.shape[2], input.shape[1]];
|
||||||
const resize = tf19.image.resizeBilinear(input, [inputSize7, inputSize7]);
|
const resize = tf19.image.resizeBilinear(input, [inputSize7, inputSize7]);
|
||||||
const objectT = config3.object.enabled ? model10 == null ? void 0 : model10.execute(resize, ["tower_0/detections"]) : null;
|
const objectT = config3.object.enabled ? model10 == null ? void 0 : model10.execute(resize, ["tower_0/detections"]) : null;
|
||||||
tf19.dispose(resize);
|
tf19.dispose(resize);
|
||||||
const obj = await process4(objectT, outputSize3, config3);
|
const obj = await process4(objectT, outputSize2, config3);
|
||||||
last4 = obj;
|
last4 = obj;
|
||||||
resolve(obj);
|
resolve(obj);
|
||||||
});
|
});
|
||||||
|
@ -10287,7 +10400,7 @@ async function process5(input, background, config3) {
|
||||||
// src/gear/gear-agegenderrace.ts
|
// src/gear/gear-agegenderrace.ts
|
||||||
var tf21 = __toModule(require_tfjs_esm());
|
var tf21 = __toModule(require_tfjs_esm());
|
||||||
var model12;
|
var model12;
|
||||||
var skipped9 = Number.MAX_SAFE_INTEGER;
|
var skipped10 = Number.MAX_SAFE_INTEGER;
|
||||||
async function load13(config3) {
|
async function load13(config3) {
|
||||||
if (env2.initial)
|
if (env2.initial)
|
||||||
model12 = null;
|
model12 = null;
|
||||||
|
@ -10467,7 +10580,6 @@ async function register(instance) {
|
||||||
log("error: humangl:", e.type);
|
log("error: humangl:", e.type);
|
||||||
log("possible browser memory leak using webgl");
|
log("possible browser memory leak using webgl");
|
||||||
instance.emit("error");
|
instance.emit("error");
|
||||||
throw new Error("browser webgl error");
|
|
||||||
});
|
});
|
||||||
config2.canvas.addEventListener("webglcontextrestored", (e) => {
|
config2.canvas.addEventListener("webglcontextrestored", (e) => {
|
||||||
log("error: humangl context restored:", e);
|
log("error: humangl context restored:", e);
|
||||||
|
@ -10603,10 +10715,8 @@ async function check(instance, force = false) {
|
||||||
log(`gl version:${gl.getParameter(gl.VERSION)} renderer:${gl.getParameter(gl.RENDERER)}`);
|
log(`gl version:${gl.getParameter(gl.VERSION)} renderer:${gl.getParameter(gl.RENDERER)}`);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (tf23.getBackend() === "humangl") {
|
if (tf23.getBackend() === "webgpu") {
|
||||||
tf23.ENV.set("WEBGPU_USE_GLSL", true);
|
tf23.ENV.set("WEBGPU_USE_GLSL", true);
|
||||||
tf23.ENV.set("WEBGL_PACK_DEPTHWISECONV", false);
|
|
||||||
tf23.ENV.set("WEBGL_USE_SHAPES_UNIFORMS", true);
|
|
||||||
}
|
}
|
||||||
tf23.enableProdMode();
|
tf23.enableProdMode();
|
||||||
await tf23.ready();
|
await tf23.ready();
|
||||||
|
@ -10878,109 +10988,24 @@ async function body(inCanvas2, result, drawOptions) {
|
||||||
ctx.fillText(`body ${100 * result[i].score}%`, result[i].box[0] + 2, 0 + result[i].box[1] + localOptions.lineHeight, result[i].box[2]);
|
ctx.fillText(`body ${100 * result[i].score}%`, result[i].box[0] + 2, 0 + result[i].box[1] + localOptions.lineHeight, result[i].box[2]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (localOptions.drawPoints) {
|
if (localOptions.drawPoints && result[i].keypoints) {
|
||||||
for (let pt = 0; pt < result[i].keypoints.length; pt++) {
|
for (let pt = 0; pt < result[i].keypoints.length; pt++) {
|
||||||
ctx.fillStyle = localOptions.useDepth && result[i].keypoints[pt].position[2] ? `rgba(${127.5 + 2 * (result[i].keypoints[pt].position[2] || 0)}, ${127.5 - 2 * (result[i].keypoints[pt].position[2] || 0)}, 255, 0.5)` : localOptions.color;
|
ctx.fillStyle = localOptions.useDepth && result[i].keypoints[pt].position[2] ? `rgba(${127.5 + 2 * (result[i].keypoints[pt].position[2] || 0)}, ${127.5 - 2 * (result[i].keypoints[pt].position[2] || 0)}, 255, 0.5)` : localOptions.color;
|
||||||
point(ctx, result[i].keypoints[pt].position[0], result[i].keypoints[pt].position[1], 0, localOptions);
|
point(ctx, result[i].keypoints[pt].position[0], result[i].keypoints[pt].position[1], 0, localOptions);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (localOptions.drawLabels) {
|
if (localOptions.drawLabels && result[i].keypoints) {
|
||||||
ctx.font = localOptions.font;
|
ctx.font = localOptions.font;
|
||||||
if (result[i].keypoints) {
|
for (const pt of result[i].keypoints) {
|
||||||
for (const pt of result[i].keypoints) {
|
ctx.fillStyle = localOptions.useDepth && pt.position[2] ? `rgba(${127.5 + 2 * pt.position[2]}, ${127.5 - 2 * pt.position[2]}, 255, 0.5)` : localOptions.color;
|
||||||
ctx.fillStyle = localOptions.useDepth && pt.position[2] ? `rgba(${127.5 + 2 * pt.position[2]}, ${127.5 - 2 * pt.position[2]}, 255, 0.5)` : localOptions.color;
|
ctx.fillText(`${pt.part} ${Math.trunc(100 * pt.score)}%`, pt.position[0] + 4, pt.position[1] + 4);
|
||||||
ctx.fillText(`${pt.part} ${Math.trunc(100 * pt.score)}%`, pt.position[0] + 4, pt.position[1] + 4);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (localOptions.drawPolygons && result[i].keypoints) {
|
if (localOptions.drawPolygons && result[i].keypoints && result[i].annotations) {
|
||||||
let part;
|
for (const part of Object.values(result[i].annotations)) {
|
||||||
const points = [];
|
for (const connected4 of part)
|
||||||
points.length = 0;
|
curves(ctx, connected4, localOptions);
|
||||||
part = result[i].keypoints.find((a) => a.part === "leftShoulder");
|
}
|
||||||
if (part)
|
|
||||||
points.push([part.position[0], part.position[1]]);
|
|
||||||
part = result[i].keypoints.find((a) => a.part === "rightShoulder");
|
|
||||||
if (part)
|
|
||||||
points.push([part.position[0], part.position[1]]);
|
|
||||||
curves(ctx, points, localOptions);
|
|
||||||
points.length = 0;
|
|
||||||
part = result[i].keypoints.find((a) => a.part === "rightShoulder");
|
|
||||||
if (part)
|
|
||||||
points.push([part.position[0], part.position[1]]);
|
|
||||||
part = result[i].keypoints.find((a) => a.part === "rightHip");
|
|
||||||
if (part)
|
|
||||||
points.push([part.position[0], part.position[1]]);
|
|
||||||
part = result[i].keypoints.find((a) => a.part === "leftHip");
|
|
||||||
if (part)
|
|
||||||
points.push([part.position[0], part.position[1]]);
|
|
||||||
part = result[i].keypoints.find((a) => a.part === "leftShoulder");
|
|
||||||
if (part)
|
|
||||||
points.push([part.position[0], part.position[1]]);
|
|
||||||
if (points.length === 4)
|
|
||||||
lines(ctx, points, localOptions);
|
|
||||||
points.length = 0;
|
|
||||||
part = result[i].keypoints.find((a) => a.part === "leftHip");
|
|
||||||
if (part)
|
|
||||||
points.push([part.position[0], part.position[1]]);
|
|
||||||
part = result[i].keypoints.find((a) => a.part === "leftKnee");
|
|
||||||
if (part)
|
|
||||||
points.push([part.position[0], part.position[1]]);
|
|
||||||
part = result[i].keypoints.find((a) => a.part === "leftAnkle");
|
|
||||||
if (part)
|
|
||||||
points.push([part.position[0], part.position[1]]);
|
|
||||||
part = result[i].keypoints.find((a) => a.part === "leftHeel");
|
|
||||||
if (part)
|
|
||||||
points.push([part.position[0], part.position[1]]);
|
|
||||||
part = result[i].keypoints.find((a) => a.part === "leftFoot");
|
|
||||||
if (part)
|
|
||||||
points.push([part.position[0], part.position[1]]);
|
|
||||||
curves(ctx, points, localOptions);
|
|
||||||
points.length = 0;
|
|
||||||
part = result[i].keypoints.find((a) => a.part === "rightHip");
|
|
||||||
if (part)
|
|
||||||
points.push([part.position[0], part.position[1]]);
|
|
||||||
part = result[i].keypoints.find((a) => a.part === "rightKnee");
|
|
||||||
if (part)
|
|
||||||
points.push([part.position[0], part.position[1]]);
|
|
||||||
part = result[i].keypoints.find((a) => a.part === "rightAnkle");
|
|
||||||
if (part)
|
|
||||||
points.push([part.position[0], part.position[1]]);
|
|
||||||
part = result[i].keypoints.find((a) => a.part === "rightHeel");
|
|
||||||
if (part)
|
|
||||||
points.push([part.position[0], part.position[1]]);
|
|
||||||
part = result[i].keypoints.find((a) => a.part === "rightFoot");
|
|
||||||
if (part)
|
|
||||||
points.push([part.position[0], part.position[1]]);
|
|
||||||
curves(ctx, points, localOptions);
|
|
||||||
points.length = 0;
|
|
||||||
part = result[i].keypoints.find((a) => a.part === "leftShoulder");
|
|
||||||
if (part)
|
|
||||||
points.push([part.position[0], part.position[1]]);
|
|
||||||
part = result[i].keypoints.find((a) => a.part === "leftElbow");
|
|
||||||
if (part)
|
|
||||||
points.push([part.position[0], part.position[1]]);
|
|
||||||
part = result[i].keypoints.find((a) => a.part === "leftWrist");
|
|
||||||
if (part)
|
|
||||||
points.push([part.position[0], part.position[1]]);
|
|
||||||
part = result[i].keypoints.find((a) => a.part === "leftPalm");
|
|
||||||
if (part)
|
|
||||||
points.push([part.position[0], part.position[1]]);
|
|
||||||
curves(ctx, points, localOptions);
|
|
||||||
points.length = 0;
|
|
||||||
part = result[i].keypoints.find((a) => a.part === "rightShoulder");
|
|
||||||
if (part)
|
|
||||||
points.push([part.position[0], part.position[1]]);
|
|
||||||
part = result[i].keypoints.find((a) => a.part === "rightElbow");
|
|
||||||
if (part)
|
|
||||||
points.push([part.position[0], part.position[1]]);
|
|
||||||
part = result[i].keypoints.find((a) => a.part === "rightWrist");
|
|
||||||
if (part)
|
|
||||||
points.push([part.position[0], part.position[1]]);
|
|
||||||
part = result[i].keypoints.find((a) => a.part === "rightPalm");
|
|
||||||
if (part)
|
|
||||||
points.push([part.position[0], part.position[1]]);
|
|
||||||
curves(ctx, points, localOptions);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -11473,15 +11498,15 @@ function calc(newResult) {
|
||||||
if (bufferedResult.hand[i].keypoints.length !== newResult.hand[i].keypoints.length)
|
if (bufferedResult.hand[i].keypoints.length !== newResult.hand[i].keypoints.length)
|
||||||
bufferedResult.hand[i].keypoints = newResult.hand[i].keypoints;
|
bufferedResult.hand[i].keypoints = newResult.hand[i].keypoints;
|
||||||
const keypoints3 = newResult.hand[i].keypoints && newResult.hand[i].keypoints.length > 0 ? newResult.hand[i].keypoints.map((landmark, j) => landmark.map((coord, k) => ((bufferedFactor - 1) * (bufferedResult.hand[i].keypoints[j][k] || 1) + (coord || 0)) / bufferedFactor)) : [];
|
const keypoints3 = newResult.hand[i].keypoints && newResult.hand[i].keypoints.length > 0 ? newResult.hand[i].keypoints.map((landmark, j) => landmark.map((coord, k) => ((bufferedFactor - 1) * (bufferedResult.hand[i].keypoints[j][k] || 1) + (coord || 0)) / bufferedFactor)) : [];
|
||||||
const annotations3 = {};
|
const annotations2 = {};
|
||||||
if (Object.keys(bufferedResult.hand[i].annotations).length !== Object.keys(newResult.hand[i].annotations).length)
|
if (Object.keys(bufferedResult.hand[i].annotations).length !== Object.keys(newResult.hand[i].annotations).length)
|
||||||
bufferedResult.hand[i].annotations = newResult.hand[i].annotations;
|
bufferedResult.hand[i].annotations = newResult.hand[i].annotations;
|
||||||
if (newResult.hand[i].annotations) {
|
if (newResult.hand[i].annotations) {
|
||||||
for (const key of Object.keys(newResult.hand[i].annotations)) {
|
for (const key of Object.keys(newResult.hand[i].annotations)) {
|
||||||
annotations3[key] = newResult.hand[i].annotations[key] && newResult.hand[i].annotations[key][0] ? newResult.hand[i].annotations[key].map((val, j) => val.map((coord, k) => ((bufferedFactor - 1) * bufferedResult.hand[i].annotations[key][j][k] + coord) / bufferedFactor)) : null;
|
annotations2[key] = newResult.hand[i].annotations[key] && newResult.hand[i].annotations[key][0] ? newResult.hand[i].annotations[key].map((val, j) => val.map((coord, k) => ((bufferedFactor - 1) * bufferedResult.hand[i].annotations[key][j][k] + coord) / bufferedFactor)) : null;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
bufferedResult.hand[i] = { ...newResult.hand[i], box: box4, boxRaw: boxRaw2, keypoints: keypoints3, annotations: annotations3 };
|
bufferedResult.hand[i] = { ...newResult.hand[i], box: box4, boxRaw: boxRaw2, keypoints: keypoints3, annotations: annotations2 };
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (!bufferedResult.face || newResult.face.length !== bufferedResult.face.length) {
|
if (!bufferedResult.face || newResult.face.length !== bufferedResult.face.length) {
|
||||||
|
|
|
@ -217,7 +217,7 @@ var config = {
|
||||||
},
|
},
|
||||||
maxDetected: -1,
|
maxDetected: -1,
|
||||||
minConfidence: 0.2,
|
minConfidence: 0.2,
|
||||||
skipFrames: 1
|
skipFrames: 5
|
||||||
},
|
},
|
||||||
hand: {
|
hand: {
|
||||||
enabled: true,
|
enabled: true,
|
||||||
|
@ -1201,6 +1201,8 @@ function process2(input, config3) {
|
||||||
tempCanvas.height = targetHeight;
|
tempCanvas.height = targetHeight;
|
||||||
const tempCtx = tempCanvas.getContext("2d");
|
const tempCtx = tempCanvas.getContext("2d");
|
||||||
tempCtx == null ? void 0 : tempCtx.drawImage(outCanvas, 0, 0);
|
tempCtx == null ? void 0 : tempCtx.drawImage(outCanvas, 0, 0);
|
||||||
|
console.log("PIXELS", tempCanvas);
|
||||||
|
pixels = tf2.browser && env2.browser ? tf2.browser.fromPixels(tempCanvas) : null;
|
||||||
try {
|
try {
|
||||||
pixels = tf2.browser && env2.browser ? tf2.browser.fromPixels(tempCanvas) : null;
|
pixels = tf2.browser && env2.browser ? tf2.browser.fromPixels(tempCanvas) : null;
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
|
@ -8781,11 +8783,11 @@ var HandPipeline = class {
|
||||||
const rawCoords = await keypointsReshaped.array();
|
const rawCoords = await keypointsReshaped.array();
|
||||||
tf12.dispose(keypoints3);
|
tf12.dispose(keypoints3);
|
||||||
tf12.dispose(keypointsReshaped);
|
tf12.dispose(keypointsReshaped);
|
||||||
const coords4 = this.transformRawCoords(rawCoords, newBox, angle, rotationMatrix);
|
const coords7 = this.transformRawCoords(rawCoords, newBox, angle, rotationMatrix);
|
||||||
const nextBoundingBox = this.getBoxForHandLandmarks(coords4);
|
const nextBoundingBox = this.getBoxForHandLandmarks(coords7);
|
||||||
this.storedBoxes[i] = { ...nextBoundingBox, confidence };
|
this.storedBoxes[i] = { ...nextBoundingBox, confidence };
|
||||||
const result = {
|
const result = {
|
||||||
landmarks: coords4,
|
landmarks: coords7,
|
||||||
confidence,
|
confidence,
|
||||||
boxConfidence: currentBox.confidence,
|
boxConfidence: currentBox.confidence,
|
||||||
fingerConfidence: confidence,
|
fingerConfidence: confidence,
|
||||||
|
@ -9212,10 +9214,10 @@ async function predict5(input, config3) {
|
||||||
return [];
|
return [];
|
||||||
const hands = [];
|
const hands = [];
|
||||||
for (let i = 0; i < predictions.length; i++) {
|
for (let i = 0; i < predictions.length; i++) {
|
||||||
const annotations3 = {};
|
const annotations2 = {};
|
||||||
if (predictions[i].landmarks) {
|
if (predictions[i].landmarks) {
|
||||||
for (const key of Object.keys(meshAnnotations2)) {
|
for (const key of Object.keys(meshAnnotations2)) {
|
||||||
annotations3[key] = meshAnnotations2[key].map((index) => predictions[i].landmarks[index]);
|
annotations2[key] = meshAnnotations2[key].map((index) => predictions[i].landmarks[index]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
const keypoints3 = predictions[i].landmarks;
|
const keypoints3 = predictions[i].landmarks;
|
||||||
|
@ -9259,7 +9261,7 @@ async function predict5(input, config3) {
|
||||||
box: box4,
|
box: box4,
|
||||||
boxRaw: boxRaw2,
|
boxRaw: boxRaw2,
|
||||||
keypoints: keypoints3,
|
keypoints: keypoints3,
|
||||||
annotations: annotations3,
|
annotations: annotations2,
|
||||||
landmarks
|
landmarks
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
@ -9298,9 +9300,9 @@ async function load7(config3) {
|
||||||
}
|
}
|
||||||
|
|
||||||
// src/util/box.ts
|
// src/util/box.ts
|
||||||
function scale(keypoints3, boxScaleFact2, outputSize3) {
|
function scale(keypoints3, boxScaleFact2, outputSize2) {
|
||||||
const coords4 = [keypoints3.map((pt) => pt[0]), keypoints3.map((pt) => pt[1])];
|
const coords7 = [keypoints3.map((pt) => pt[0]), keypoints3.map((pt) => pt[1])];
|
||||||
const maxmin = [Math.max(...coords4[0]), Math.min(...coords4[0]), Math.max(...coords4[1]), Math.min(...coords4[1])];
|
const maxmin = [Math.max(...coords7[0]), Math.min(...coords7[0]), Math.max(...coords7[1]), Math.min(...coords7[1])];
|
||||||
const center = [(maxmin[0] + maxmin[1]) / 2, (maxmin[2] + maxmin[3]) / 2];
|
const center = [(maxmin[0] + maxmin[1]) / 2, (maxmin[2] + maxmin[3]) / 2];
|
||||||
const diff = Math.max(center[0] - maxmin[1], center[1] - maxmin[3], -center[0] + maxmin[0], -center[1] + maxmin[2]) * boxScaleFact2;
|
const diff = Math.max(center[0] - maxmin[1], center[1] - maxmin[3], -center[0] + maxmin[0], -center[1] + maxmin[2]) * boxScaleFact2;
|
||||||
const box4 = [
|
const box4 = [
|
||||||
|
@ -9310,10 +9312,10 @@ function scale(keypoints3, boxScaleFact2, outputSize3) {
|
||||||
Math.trunc(2 * diff)
|
Math.trunc(2 * diff)
|
||||||
];
|
];
|
||||||
const boxRaw2 = [
|
const boxRaw2 = [
|
||||||
box4[0] / outputSize3[0],
|
box4[0] / outputSize2[0],
|
||||||
box4[1] / outputSize3[1],
|
box4[1] / outputSize2[1],
|
||||||
box4[2] / outputSize3[0],
|
box4[2] / outputSize2[0],
|
||||||
box4[3] / outputSize3[1]
|
box4[3] / outputSize2[1]
|
||||||
];
|
];
|
||||||
const yxBox = [
|
const yxBox = [
|
||||||
boxRaw2[1],
|
boxRaw2[1],
|
||||||
|
@ -9503,10 +9505,10 @@ async function predict6(input, config3) {
|
||||||
}
|
}
|
||||||
|
|
||||||
// src/body/blazepose.ts
|
// src/body/blazepose.ts
|
||||||
var tf15 = __toModule(require_tfjs_esm());
|
var tf15 = __toModule(require("@tensorflow/tfjs"));
|
||||||
|
|
||||||
// src/body/annotations.ts
|
// src/body/blazeposecoords.ts
|
||||||
var full = [
|
var kpt = [
|
||||||
"nose",
|
"nose",
|
||||||
"leftEyeInside",
|
"leftEyeInside",
|
||||||
"leftEye",
|
"leftEye",
|
||||||
|
@ -9540,58 +9542,38 @@ var full = [
|
||||||
"rightHeel",
|
"rightHeel",
|
||||||
"leftFoot",
|
"leftFoot",
|
||||||
"rightFoot",
|
"rightFoot",
|
||||||
"midHip",
|
"bodyCenter",
|
||||||
"forehead",
|
"bodyTop",
|
||||||
"leftThumb",
|
"leftThumb",
|
||||||
"leftHand",
|
"leftHand",
|
||||||
"rightThumb",
|
"rightThumb",
|
||||||
"rightHand"
|
"rightHand"
|
||||||
];
|
];
|
||||||
var upper = [
|
var connected = {
|
||||||
"nose",
|
leftLeg: ["leftHip", "leftKnee", "leftAnkle", "leftHeel", "leftFoot"],
|
||||||
"leftEyeInside",
|
rightLeg: ["rightHip", "rightKnee", "rightAnkle", "rightHeel", "rightFoot"],
|
||||||
"leftEye",
|
torso: ["leftShoulder", "rightShoulder", "rightHip", "leftHip", "leftShoulder"],
|
||||||
"leftEyeOutside",
|
leftArm: ["leftShoulder", "leftElbow", "leftWrist", "leftPalm"],
|
||||||
"rightEyeInside",
|
rightArm: ["rightShoulder", "rightElbow", "rightWrist", "rightPalm"],
|
||||||
"rightEye",
|
leftHand: [],
|
||||||
"rightEyeOutside",
|
rightHand: [],
|
||||||
"leftEar",
|
head: []
|
||||||
"rightEar",
|
};
|
||||||
"leftMouth",
|
|
||||||
"rightMouth",
|
|
||||||
"leftShoulder",
|
|
||||||
"rightShoulder",
|
|
||||||
"leftElbow",
|
|
||||||
"rightElbow",
|
|
||||||
"left:15",
|
|
||||||
"right:16",
|
|
||||||
"left:17",
|
|
||||||
"right:18",
|
|
||||||
"left:19",
|
|
||||||
"right:20",
|
|
||||||
"left:21",
|
|
||||||
"right:22",
|
|
||||||
"leftChest",
|
|
||||||
"rightChest",
|
|
||||||
"neck",
|
|
||||||
"forehead",
|
|
||||||
"left:27",
|
|
||||||
"right:28",
|
|
||||||
"left:29",
|
|
||||||
"right:30"
|
|
||||||
];
|
|
||||||
|
|
||||||
// src/body/blazepose.ts
|
// src/body/blazepose.ts
|
||||||
|
var env3 = { initial: true };
|
||||||
var models2 = [null, null];
|
var models2 = [null, null];
|
||||||
var outputNodes = ["ld_3d", "activation_segmentation", "activation_heatmap", "world_3d", "output_poseflag"];
|
|
||||||
var inputSize5 = [[0, 0], [0, 0]];
|
var inputSize5 = [[0, 0], [0, 0]];
|
||||||
var outputSize2 = [0, 0];
|
var skipped5 = Number.MAX_SAFE_INTEGER;
|
||||||
|
var outputNodes;
|
||||||
|
var cache2 = null;
|
||||||
|
var padding = [[0, 0], [0, 0], [0, 0], [0, 0]];
|
||||||
async function loadDetect2(config3) {
|
async function loadDetect2(config3) {
|
||||||
var _a;
|
var _a, _b;
|
||||||
if (env2.initial)
|
if (env3.initial)
|
||||||
models2[0] = null;
|
models2[0] = null;
|
||||||
if (!models2[0]) {
|
if (!models2[0] && ((_a = config3.body.detector) == null ? void 0 : _a.modelPath) || "") {
|
||||||
models2[0] = await tf15.loadGraphModel(join(config3.modelBasePath, ((_a = config3.body.detector) == null ? void 0 : _a.modelPath) || ""));
|
models2[0] = await tf15.loadGraphModel(join(config3.modelBasePath, ((_b = config3.body.detector) == null ? void 0 : _b.modelPath) || ""));
|
||||||
const inputs = Object.values(models2[0].modelSignature["inputs"]);
|
const inputs = Object.values(models2[0].modelSignature["inputs"]);
|
||||||
inputSize5[0][0] = Array.isArray(inputs) ? parseInt(inputs[0].tensorShape.dim[1].size) : 0;
|
inputSize5[0][0] = Array.isArray(inputs) ? parseInt(inputs[0].tensorShape.dim[1].size) : 0;
|
||||||
inputSize5[0][1] = Array.isArray(inputs) ? parseInt(inputs[0].tensorShape.dim[2].size) : 0;
|
inputSize5[0][1] = Array.isArray(inputs) ? parseInt(inputs[0].tensorShape.dim[2].size) : 0;
|
||||||
|
@ -9599,18 +9581,23 @@ async function loadDetect2(config3) {
|
||||||
log("load model failed:", config3.object.modelPath);
|
log("load model failed:", config3.object.modelPath);
|
||||||
else if (config3.debug)
|
else if (config3.debug)
|
||||||
log("load model:", models2[0]["modelUrl"]);
|
log("load model:", models2[0]["modelUrl"]);
|
||||||
} else if (config3.debug)
|
} else if (config3.debug && models2[0])
|
||||||
log("cached model:", models2[0]["modelUrl"]);
|
log("cached model:", models2[0]["modelUrl"]);
|
||||||
return models2[0];
|
return models2[0];
|
||||||
}
|
}
|
||||||
async function loadPose(config3) {
|
async function loadPose(config3) {
|
||||||
if (env2.initial)
|
var _a;
|
||||||
|
if (env3.initial)
|
||||||
models2[1] = null;
|
models2[1] = null;
|
||||||
if (!models2[1]) {
|
if (!models2[1]) {
|
||||||
models2[1] = await tf15.loadGraphModel(join(config3.modelBasePath, config3.body.modelPath || ""));
|
models2[1] = await tf15.loadGraphModel(join(config3.modelBasePath, config3.body.modelPath || ""));
|
||||||
const inputs = Object.values(models2[1].modelSignature["inputs"]);
|
const inputs = Object.values(models2[1].modelSignature["inputs"]);
|
||||||
inputSize5[1][0] = Array.isArray(inputs) ? parseInt(inputs[0].tensorShape.dim[1].size) : 0;
|
inputSize5[1][0] = Array.isArray(inputs) ? parseInt(inputs[0].tensorShape.dim[1].size) : 0;
|
||||||
inputSize5[1][1] = Array.isArray(inputs) ? parseInt(inputs[0].tensorShape.dim[2].size) : 0;
|
inputSize5[1][1] = Array.isArray(inputs) ? parseInt(inputs[0].tensorShape.dim[2].size) : 0;
|
||||||
|
if ((_a = config3.body.modelPath) == null ? void 0 : _a.includes("lite"))
|
||||||
|
outputNodes = ["ld_3d", "output_segmentation", "output_heatmap", "world_3d", "output_poseflag"];
|
||||||
|
else
|
||||||
|
outputNodes = ["Identity", "Identity_2", "Identity_3", "Identity_4", "Identity_1"];
|
||||||
if (!models2[1] || !models2[1]["modelUrl"])
|
if (!models2[1] || !models2[1]["modelUrl"])
|
||||||
log("load model failed:", config3.object.modelPath);
|
log("load model failed:", config3.object.modelPath);
|
||||||
else if (config3.debug)
|
else if (config3.debug)
|
||||||
|
@ -9619,64 +9606,128 @@ async function loadPose(config3) {
|
||||||
log("cached model:", models2[1]["modelUrl"]);
|
log("cached model:", models2[1]["modelUrl"]);
|
||||||
return models2[1];
|
return models2[1];
|
||||||
}
|
}
|
||||||
async function detectParts(input, config3) {
|
function calculateBoxes(keypoints3, outputSize2) {
|
||||||
var _a;
|
|
||||||
const t = {};
|
|
||||||
t.resize = tf15.image.resizeBilinear(input, [inputSize5[1][0], inputSize5[1][1]]);
|
|
||||||
[t.ld, t.segmentation, t.heatmap, t.world, t.poseflag] = await ((_a = models2[1]) == null ? void 0 : _a.execute(t.resize, outputNodes));
|
|
||||||
const points = await t.ld.data();
|
|
||||||
const keypoints3 = [];
|
|
||||||
const labels2 = (points == null ? void 0 : points.length) === 195 ? full : upper;
|
|
||||||
const depth = 5;
|
|
||||||
for (let i = 0; i < points.length / depth; i++) {
|
|
||||||
const score3 = (100 - Math.trunc(100 / (1 + Math.exp(points[depth * i + 3])))) / 100;
|
|
||||||
if (score3 > (config3.body.minConfidence || 0)) {
|
|
||||||
keypoints3.push({
|
|
||||||
part: labels2[i],
|
|
||||||
position: [
|
|
||||||
Math.trunc(outputSize2[0] * points[depth * i + 0] / 255),
|
|
||||||
Math.trunc(outputSize2[1] * points[depth * i + 1] / 255),
|
|
||||||
Math.trunc(points[depth * i + 2]) + 0
|
|
||||||
],
|
|
||||||
positionRaw: [
|
|
||||||
points[depth * i + 0] / 255,
|
|
||||||
points[depth * i + 1] / 255,
|
|
||||||
points[depth * i + 2] + 0
|
|
||||||
],
|
|
||||||
score: score3
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
|
||||||
const x = keypoints3.map((a) => a.position[0]);
|
const x = keypoints3.map((a) => a.position[0]);
|
||||||
const y = keypoints3.map((a) => a.position[1]);
|
const y = keypoints3.map((a) => a.position[1]);
|
||||||
const box4 = [
|
const keypointsBox = [Math.min(...x), Math.min(...y), Math.max(...x) - Math.min(...x), Math.max(...y) - Math.min(...y)];
|
||||||
Math.min(...x),
|
const keypointsBoxRaw = [keypointsBox[0] / outputSize2[0], keypointsBox[1] / outputSize2[1], keypointsBox[2] / outputSize2[0], keypointsBox[3] / outputSize2[1]];
|
||||||
Math.min(...y),
|
return { keypointsBox, keypointsBoxRaw };
|
||||||
Math.max(...x) - Math.min(...x),
|
}
|
||||||
Math.max(...y) - Math.min(...x)
|
async function prepareImage(input) {
|
||||||
|
const t = {};
|
||||||
|
if (!input.shape || !input.shape[1] || !input.shape[2])
|
||||||
|
return input;
|
||||||
|
padding = [
|
||||||
|
[0, 0],
|
||||||
|
[input.shape[2] > input.shape[1] ? Math.trunc((input.shape[2] - input.shape[1]) / 2) : 0, input.shape[2] > input.shape[1] ? Math.trunc((input.shape[2] - input.shape[1]) / 2) : 0],
|
||||||
|
[input.shape[1] > input.shape[2] ? Math.trunc((input.shape[1] - input.shape[2]) / 2) : 0, input.shape[1] > input.shape[2] ? Math.trunc((input.shape[1] - input.shape[2]) / 2) : 0],
|
||||||
|
[0, 0]
|
||||||
];
|
];
|
||||||
const boxRaw2 = [0, 0, 0, 0];
|
t.pad = tf15.pad(input, padding);
|
||||||
const score2 = keypoints3.reduce((prev, curr) => curr.score > prev ? curr.score : prev, 0);
|
t.resize = tf15.image.resizeBilinear(t.pad, [inputSize5[1][0], inputSize5[1][1]]);
|
||||||
|
const final = tf15.div(t.resize, 255);
|
||||||
Object.keys(t).forEach((tensor3) => tf15.dispose(t[tensor3]));
|
Object.keys(t).forEach((tensor3) => tf15.dispose(t[tensor3]));
|
||||||
return { id: 0, score: score2, box: box4, boxRaw: boxRaw2, keypoints: keypoints3 };
|
return final;
|
||||||
|
}
|
||||||
|
function rescaleKeypoints(keypoints3, outputSize2) {
|
||||||
|
for (const kpt4 of keypoints3) {
|
||||||
|
kpt4.position = [
|
||||||
|
kpt4.position[0] * (outputSize2[0] + padding[2][0] + padding[2][1]) / outputSize2[0] - padding[2][0],
|
||||||
|
kpt4.position[1] * (outputSize2[1] + padding[1][0] + padding[1][1]) / outputSize2[1] - padding[1][0],
|
||||||
|
kpt4.position[2]
|
||||||
|
];
|
||||||
|
kpt4.positionRaw = [
|
||||||
|
kpt4.position[0] / outputSize2[0],
|
||||||
|
kpt4.position[1] / outputSize2[1],
|
||||||
|
kpt4.position[2]
|
||||||
|
];
|
||||||
|
}
|
||||||
|
return keypoints3;
|
||||||
|
}
|
||||||
|
async function detectParts(input, config3, outputSize2) {
|
||||||
|
var _a;
|
||||||
|
const t = {};
|
||||||
|
t.input = await prepareImage(input);
|
||||||
|
[t.ld, t.segmentation, t.heatmap, t.world, t.poseflag] = await ((_a = models2[1]) == null ? void 0 : _a.execute(t.input, outputNodes));
|
||||||
|
const points = await t.ld.data();
|
||||||
|
const keypointsRelative = [];
|
||||||
|
const depth = 5;
|
||||||
|
for (let i = 0; i < points.length / depth; i++) {
|
||||||
|
const score2 = (100 - Math.trunc(100 / (1 + Math.exp(points[depth * i + 3])))) / 100;
|
||||||
|
const positionRaw = [points[depth * i + 0] / inputSize5[1][0], points[depth * i + 1] / inputSize5[1][1], points[depth * i + 2] + 0];
|
||||||
|
const position = [Math.trunc(outputSize2[0] * positionRaw[0]), Math.trunc(outputSize2[1] * positionRaw[1]), positionRaw[2]];
|
||||||
|
keypointsRelative.push({ part: kpt[i], positionRaw, position, score: score2 });
|
||||||
|
}
|
||||||
|
const avgScore = Math.round(100 * keypointsRelative.reduce((prev, curr) => prev += curr.score, 0) / keypointsRelative.length) / 100;
|
||||||
|
if (avgScore < (config3.body.minConfidence || 0))
|
||||||
|
return null;
|
||||||
|
const keypoints3 = rescaleKeypoints(keypointsRelative, outputSize2);
|
||||||
|
const boxes = calculateBoxes(keypoints3, [outputSize2[0], outputSize2[1]]);
|
||||||
|
Object.keys(t).forEach((tensor3) => tf15.dispose(t[tensor3]));
|
||||||
|
const annotations2 = {};
|
||||||
|
for (const [name, indexes] of Object.entries(connected)) {
|
||||||
|
const pt = [];
|
||||||
|
for (let i = 0; i < indexes.length - 1; i++) {
|
||||||
|
const pt0 = keypoints3.find((kpt4) => kpt4.part === indexes[i]);
|
||||||
|
const pt1 = keypoints3.find((kpt4) => kpt4.part === indexes[i + 1]);
|
||||||
|
if (pt0 && pt1 && pt0.score > (config3.body.minConfidence || 0) && pt1.score > (config3.body.minConfidence || 0))
|
||||||
|
pt.push([pt0.position, pt1.position]);
|
||||||
|
}
|
||||||
|
annotations2[name] = pt;
|
||||||
|
}
|
||||||
|
return { id: 0, score: avgScore, box: boxes.keypointsBox, boxRaw: boxes.keypointsBoxRaw, keypoints: keypoints3, annotations: annotations2 };
|
||||||
}
|
}
|
||||||
async function predict7(input, config3) {
|
async function predict7(input, config3) {
|
||||||
outputSize2 = [input.shape[2] || 0, input.shape[1] || 0];
|
const outputSize2 = [input.shape[2] || 0, input.shape[1] || 0];
|
||||||
const bodies = [];
|
if (skipped5 < (config3.body.skipFrames || 0) && config3.skipFrame) {
|
||||||
const body4 = await detectParts(input, config3);
|
skipped5++;
|
||||||
bodies.push(body4);
|
} else {
|
||||||
return bodies;
|
cache2 = await detectParts(input, config3, outputSize2);
|
||||||
|
skipped5 = 0;
|
||||||
|
}
|
||||||
|
if (cache2)
|
||||||
|
return [cache2];
|
||||||
|
return [];
|
||||||
}
|
}
|
||||||
|
|
||||||
// src/body/efficientpose.ts
|
// src/body/efficientpose.ts
|
||||||
var tf16 = __toModule(require_tfjs_esm());
|
var tf16 = __toModule(require_tfjs_esm());
|
||||||
|
|
||||||
|
// src/body/efficientposecoords.ts
|
||||||
|
var kpt2 = [
|
||||||
|
"head",
|
||||||
|
"neck",
|
||||||
|
"rightShoulder",
|
||||||
|
"rightElbow",
|
||||||
|
"rightWrist",
|
||||||
|
"chest",
|
||||||
|
"leftShoulder",
|
||||||
|
"leftElbow",
|
||||||
|
"leftWrist",
|
||||||
|
"bodyCenter",
|
||||||
|
"rightHip",
|
||||||
|
"rightKnee",
|
||||||
|
"rightAnkle",
|
||||||
|
"leftHip",
|
||||||
|
"leftKnee",
|
||||||
|
"leftAnkle"
|
||||||
|
];
|
||||||
|
var connected2 = {
|
||||||
|
leftLeg: ["leftHip", "leftKnee", "leftAnkle"],
|
||||||
|
rightLeg: ["rightHip", "rightKnee", "rightAnkle"],
|
||||||
|
torso: ["leftShoulder", "rightShoulder", "rightHip", "leftHip", "leftShoulder"],
|
||||||
|
leftArm: ["leftShoulder", "leftElbow", "leftWrist"],
|
||||||
|
rightArm: ["rightShoulder", "rightElbow", "rightWrist"],
|
||||||
|
head: []
|
||||||
|
};
|
||||||
|
|
||||||
|
// src/body/efficientpose.ts
|
||||||
var model7;
|
var model7;
|
||||||
var keypoints = [];
|
var keypoints = [];
|
||||||
var box3 = [0, 0, 0, 0];
|
var box3 = [0, 0, 0, 0];
|
||||||
var boxRaw = [0, 0, 0, 0];
|
var boxRaw = [0, 0, 0, 0];
|
||||||
var score = 0;
|
var score = 0;
|
||||||
var skipped5 = Number.MAX_SAFE_INTEGER;
|
var skipped6 = Number.MAX_SAFE_INTEGER;
|
||||||
var bodyParts = ["head", "neck", "rightShoulder", "rightElbow", "rightWrist", "chest", "leftShoulder", "leftElbow", "leftWrist", "pelvis", "rightHip", "rightKnee", "rightAnkle", "leftHip", "leftKnee", "leftAnkle"];
|
|
||||||
async function load8(config3) {
|
async function load8(config3) {
|
||||||
if (env2.initial)
|
if (env2.initial)
|
||||||
model7 = null;
|
model7 = null;
|
||||||
|
@ -9697,9 +9748,9 @@ function max2d(inputs, minScore) {
|
||||||
const reshaped = tf16.reshape(inputs, [height * width]);
|
const reshaped = tf16.reshape(inputs, [height * width]);
|
||||||
const newScore = tf16.max(reshaped, 0).dataSync()[0];
|
const newScore = tf16.max(reshaped, 0).dataSync()[0];
|
||||||
if (newScore > minScore) {
|
if (newScore > minScore) {
|
||||||
const coords4 = tf16.argMax(reshaped, 0);
|
const coordinates = tf16.argMax(reshaped, 0);
|
||||||
const x = mod(coords4, width).dataSync()[0];
|
const x = mod(coordinates, width).dataSync()[0];
|
||||||
const y = tf16.div(coords4, tf16.scalar(width, "int32")).dataSync()[0];
|
const y = tf16.div(coordinates, tf16.scalar(width, "int32")).dataSync()[0];
|
||||||
return [x, y, newScore];
|
return [x, y, newScore];
|
||||||
}
|
}
|
||||||
return [0, 0, newScore];
|
return [0, 0, newScore];
|
||||||
|
@ -9707,11 +9758,11 @@ function max2d(inputs, minScore) {
|
||||||
}
|
}
|
||||||
async function predict8(image24, config3) {
|
async function predict8(image24, config3) {
|
||||||
var _a;
|
var _a;
|
||||||
if (skipped5 < (((_a = config3.body) == null ? void 0 : _a.skipFrames) || 0) && config3.skipFrame && Object.keys(keypoints).length > 0) {
|
if (skipped6 < (((_a = config3.body) == null ? void 0 : _a.skipFrames) || 0) && config3.skipFrame && Object.keys(keypoints).length > 0) {
|
||||||
skipped5++;
|
skipped6++;
|
||||||
return [{ id: 0, score, box: box3, boxRaw, keypoints }];
|
return [{ id: 0, score, box: box3, boxRaw, keypoints, annotations: {} }];
|
||||||
}
|
}
|
||||||
skipped5 = 0;
|
skipped6 = 0;
|
||||||
return new Promise(async (resolve) => {
|
return new Promise(async (resolve) => {
|
||||||
var _a2;
|
var _a2;
|
||||||
const tensor3 = tf16.tidy(() => {
|
const tensor3 = tf16.tidy(() => {
|
||||||
|
@ -9737,7 +9788,7 @@ async function predict8(image24, config3) {
|
||||||
if (score > (((_a2 = config3.body) == null ? void 0 : _a2.minConfidence) || 0)) {
|
if (score > (((_a2 = config3.body) == null ? void 0 : _a2.minConfidence) || 0)) {
|
||||||
keypoints.push({
|
keypoints.push({
|
||||||
score: Math.round(100 * partScore) / 100,
|
score: Math.round(100 * partScore) / 100,
|
||||||
part: bodyParts[id],
|
part: kpt2[id],
|
||||||
positionRaw: [
|
positionRaw: [
|
||||||
x2 / model7.inputs[0].shape[2],
|
x2 / model7.inputs[0].shape[2],
|
||||||
y2 / model7.inputs[0].shape[1]
|
y2 / model7.inputs[0].shape[1]
|
||||||
|
@ -9768,18 +9819,59 @@ async function predict8(image24, config3) {
|
||||||
Math.max(...xRaw) - Math.min(...xRaw),
|
Math.max(...xRaw) - Math.min(...xRaw),
|
||||||
Math.max(...yRaw) - Math.min(...yRaw)
|
Math.max(...yRaw) - Math.min(...yRaw)
|
||||||
];
|
];
|
||||||
resolve([{ id: 0, score, box: box3, boxRaw, keypoints }]);
|
const annotations2 = {};
|
||||||
|
for (const [name, indexes] of Object.entries(connected2)) {
|
||||||
|
const pt = [];
|
||||||
|
for (let i = 0; i < indexes.length - 1; i++) {
|
||||||
|
const pt0 = keypoints.find((kpt4) => kpt4.part === indexes[i]);
|
||||||
|
const pt1 = keypoints.find((kpt4) => kpt4.part === indexes[i + 1]);
|
||||||
|
if (pt0 && pt1 && pt0.score > (config3.body.minConfidence || 0) && pt1.score > (config3.body.minConfidence || 0))
|
||||||
|
pt.push([pt0.position, pt1.position]);
|
||||||
|
}
|
||||||
|
annotations2[name] = pt;
|
||||||
|
}
|
||||||
|
resolve([{ id: 0, score, box: box3, boxRaw, keypoints, annotations: annotations2 }]);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
// src/body/movenet.ts
|
// src/body/movenet.ts
|
||||||
var tf17 = __toModule(require_tfjs_esm());
|
var tf17 = __toModule(require_tfjs_esm());
|
||||||
|
|
||||||
|
// src/body/movenetcoords.ts
|
||||||
|
var kpt3 = [
|
||||||
|
"nose",
|
||||||
|
"leftEye",
|
||||||
|
"rightEye",
|
||||||
|
"leftEar",
|
||||||
|
"rightEar",
|
||||||
|
"leftShoulder",
|
||||||
|
"rightShoulder",
|
||||||
|
"leftElbow",
|
||||||
|
"rightElbow",
|
||||||
|
"leftWrist",
|
||||||
|
"rightWrist",
|
||||||
|
"leftHip",
|
||||||
|
"rightHip",
|
||||||
|
"leftKnee",
|
||||||
|
"rightKnee",
|
||||||
|
"leftAnkle",
|
||||||
|
"rightAnkle"
|
||||||
|
];
|
||||||
|
var connected3 = {
|
||||||
|
leftLeg: ["leftHip", "leftKnee", "leftAnkle"],
|
||||||
|
rightLeg: ["rightHip", "rightKnee", "rightAnkle"],
|
||||||
|
torso: ["leftShoulder", "rightShoulder", "rightHip", "leftHip", "leftShoulder"],
|
||||||
|
leftArm: ["leftShoulder", "leftElbow", "leftWrist"],
|
||||||
|
rightArm: ["rightShoulder", "rightElbow", "rightWrist"],
|
||||||
|
head: []
|
||||||
|
};
|
||||||
|
|
||||||
|
// src/body/movenet.ts
|
||||||
var model8;
|
var model8;
|
||||||
var inputSize6 = 0;
|
var inputSize6 = 0;
|
||||||
var cachedBoxes = [];
|
var cachedBoxes = [];
|
||||||
var skipped6 = Number.MAX_SAFE_INTEGER;
|
var skipped7 = Number.MAX_SAFE_INTEGER;
|
||||||
var keypoints2 = [];
|
var keypoints2 = [];
|
||||||
var bodyParts2 = ["nose", "leftEye", "rightEye", "leftEar", "rightEar", "leftShoulder", "rightShoulder", "leftElbow", "rightElbow", "leftWrist", "rightWrist", "leftHip", "rightHip", "leftKnee", "rightKnee", "leftAnkle", "rightAnkle"];
|
|
||||||
async function load9(config3) {
|
async function load9(config3) {
|
||||||
if (env2.initial)
|
if (env2.initial)
|
||||||
model8 = null;
|
model8 = null;
|
||||||
|
@ -9817,19 +9909,19 @@ function createBox2(points) {
|
||||||
return [box4, boxRaw2];
|
return [box4, boxRaw2];
|
||||||
}
|
}
|
||||||
async function parseSinglePose(res, config3, image24, inputBox) {
|
async function parseSinglePose(res, config3, image24, inputBox) {
|
||||||
const kpt = res[0][0];
|
const kpt4 = res[0][0];
|
||||||
keypoints2.length = 0;
|
keypoints2.length = 0;
|
||||||
let score2 = 0;
|
let score2 = 0;
|
||||||
for (let id = 0; id < kpt.length; id++) {
|
for (let id = 0; id < kpt4.length; id++) {
|
||||||
score2 = kpt[id][2];
|
score2 = kpt4[id][2];
|
||||||
if (score2 > config3.body.minConfidence) {
|
if (score2 > config3.body.minConfidence) {
|
||||||
const positionRaw = [
|
const positionRaw = [
|
||||||
(inputBox[3] - inputBox[1]) * kpt[id][1] + inputBox[1],
|
(inputBox[3] - inputBox[1]) * kpt4[id][1] + inputBox[1],
|
||||||
(inputBox[2] - inputBox[0]) * kpt[id][0] + inputBox[0]
|
(inputBox[2] - inputBox[0]) * kpt4[id][0] + inputBox[0]
|
||||||
];
|
];
|
||||||
keypoints2.push({
|
keypoints2.push({
|
||||||
score: Math.round(100 * score2) / 100,
|
score: Math.round(100 * score2) / 100,
|
||||||
part: bodyParts2[id],
|
part: kpt3[id],
|
||||||
positionRaw,
|
positionRaw,
|
||||||
position: [
|
position: [
|
||||||
Math.round((image24.shape[2] || 0) * positionRaw[0]),
|
Math.round((image24.shape[2] || 0) * positionRaw[0]),
|
||||||
|
@ -9841,25 +9933,36 @@ async function parseSinglePose(res, config3, image24, inputBox) {
|
||||||
score2 = keypoints2.reduce((prev, curr) => curr.score > prev ? curr.score : prev, 0);
|
score2 = keypoints2.reduce((prev, curr) => curr.score > prev ? curr.score : prev, 0);
|
||||||
const bodies = [];
|
const bodies = [];
|
||||||
const [box4, boxRaw2] = createBox2(keypoints2);
|
const [box4, boxRaw2] = createBox2(keypoints2);
|
||||||
bodies.push({ id: 0, score: score2, box: box4, boxRaw: boxRaw2, keypoints: keypoints2 });
|
const annotations2 = {};
|
||||||
|
for (const [name, indexes] of Object.entries(connected3)) {
|
||||||
|
const pt = [];
|
||||||
|
for (let i = 0; i < indexes.length - 1; i++) {
|
||||||
|
const pt0 = keypoints2.find((kp) => kp.part === indexes[i]);
|
||||||
|
const pt1 = keypoints2.find((kp) => kp.part === indexes[i + 1]);
|
||||||
|
if (pt0 && pt1 && pt0.score > (config3.body.minConfidence || 0) && pt1.score > (config3.body.minConfidence || 0))
|
||||||
|
pt.push([pt0.position, pt1.position]);
|
||||||
|
}
|
||||||
|
annotations2[name] = pt;
|
||||||
|
}
|
||||||
|
bodies.push({ id: 0, score: score2, box: box4, boxRaw: boxRaw2, keypoints: keypoints2, annotations: annotations2 });
|
||||||
return bodies;
|
return bodies;
|
||||||
}
|
}
|
||||||
async function parseMultiPose(res, config3, image24, inputBox) {
|
async function parseMultiPose(res, config3, image24, inputBox) {
|
||||||
const bodies = [];
|
const bodies = [];
|
||||||
for (let id = 0; id < res[0].length; id++) {
|
for (let id = 0; id < res[0].length; id++) {
|
||||||
const kpt = res[0][id];
|
const kpt4 = res[0][id];
|
||||||
const totalScore = Math.round(100 * kpt[51 + 4]) / 100;
|
const totalScore = Math.round(100 * kpt4[51 + 4]) / 100;
|
||||||
if (totalScore > config3.body.minConfidence) {
|
if (totalScore > config3.body.minConfidence) {
|
||||||
keypoints2.length = 0;
|
keypoints2.length = 0;
|
||||||
for (let i = 0; i < 17; i++) {
|
for (let i = 0; i < 17; i++) {
|
||||||
const score2 = kpt[3 * i + 2];
|
const score2 = kpt4[3 * i + 2];
|
||||||
if (score2 > config3.body.minConfidence) {
|
if (score2 > config3.body.minConfidence) {
|
||||||
const positionRaw = [
|
const positionRaw = [
|
||||||
(inputBox[3] - inputBox[1]) * kpt[3 * i + 1] + inputBox[1],
|
(inputBox[3] - inputBox[1]) * kpt4[3 * i + 1] + inputBox[1],
|
||||||
(inputBox[2] - inputBox[0]) * kpt[3 * i + 0] + inputBox[0]
|
(inputBox[2] - inputBox[0]) * kpt4[3 * i + 0] + inputBox[0]
|
||||||
];
|
];
|
||||||
keypoints2.push({
|
keypoints2.push({
|
||||||
part: bodyParts2[i],
|
part: kpt3[i],
|
||||||
score: Math.round(100 * score2) / 100,
|
score: Math.round(100 * score2) / 100,
|
||||||
positionRaw,
|
positionRaw,
|
||||||
position: [
|
position: [
|
||||||
|
@ -9869,9 +9972,19 @@ async function parseMultiPose(res, config3, image24, inputBox) {
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
const boxRaw2 = [kpt[51 + 1], kpt[51 + 0], kpt[51 + 3] - kpt[51 + 1], kpt[51 + 2] - kpt[51 + 0]];
|
const [box4, boxRaw2] = createBox2(keypoints2);
|
||||||
const box4 = [Math.trunc(boxRaw2[0] * (image24.shape[2] || 0)), Math.trunc(boxRaw2[1] * (image24.shape[1] || 0)), Math.trunc(boxRaw2[2] * (image24.shape[2] || 0)), Math.trunc(boxRaw2[3] * (image24.shape[1] || 0))];
|
const annotations2 = {};
|
||||||
bodies.push({ id, score: totalScore, boxRaw: boxRaw2, box: box4, keypoints: [...keypoints2] });
|
for (const [name, indexes] of Object.entries(connected3)) {
|
||||||
|
const pt = [];
|
||||||
|
for (let i = 0; i < indexes.length - 1; i++) {
|
||||||
|
const pt0 = keypoints2.find((kp) => kp.part === indexes[i]);
|
||||||
|
const pt1 = keypoints2.find((kp) => kp.part === indexes[i + 1]);
|
||||||
|
if (pt0 && pt1 && pt0.score > (config3.body.minConfidence || 0) && pt1.score > (config3.body.minConfidence || 0))
|
||||||
|
pt.push([pt0.position, pt1.position]);
|
||||||
|
}
|
||||||
|
annotations2[name] = pt;
|
||||||
|
}
|
||||||
|
bodies.push({ id, score: totalScore, boxRaw: boxRaw2, box: box4, keypoints: [...keypoints2], annotations: annotations2 });
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
bodies.sort((a, b) => b.score - a.score);
|
bodies.sort((a, b) => b.score - a.score);
|
||||||
|
@ -9887,7 +10000,7 @@ async function predict9(input, config3) {
|
||||||
let bodies = [];
|
let bodies = [];
|
||||||
if (!config3.skipFrame)
|
if (!config3.skipFrame)
|
||||||
cachedBoxes.length = 0;
|
cachedBoxes.length = 0;
|
||||||
skipped6++;
|
skipped7++;
|
||||||
for (let i = 0; i < cachedBoxes.length; i++) {
|
for (let i = 0; i < cachedBoxes.length; i++) {
|
||||||
t.crop = tf17.image.cropAndResize(input, [cachedBoxes[i]], [0], [inputSize6, inputSize6], "bilinear");
|
t.crop = tf17.image.cropAndResize(input, [cachedBoxes[i]], [0], [inputSize6, inputSize6], "bilinear");
|
||||||
t.cast = tf17.cast(t.crop, "int32");
|
t.cast = tf17.cast(t.crop, "int32");
|
||||||
|
@ -9897,7 +10010,7 @@ async function predict9(input, config3) {
|
||||||
bodies = bodies.concat(newBodies);
|
bodies = bodies.concat(newBodies);
|
||||||
Object.keys(t).forEach((tensor3) => tf17.dispose(t[tensor3]));
|
Object.keys(t).forEach((tensor3) => tf17.dispose(t[tensor3]));
|
||||||
}
|
}
|
||||||
if (bodies.length !== config3.body.maxDetected && skipped6 > (config3.body.skipFrames || 0)) {
|
if (bodies.length !== config3.body.maxDetected && skipped7 > (config3.body.skipFrames || 0)) {
|
||||||
t.resized = tf17.image.resizeBilinear(input, [inputSize6, inputSize6], false);
|
t.resized = tf17.image.resizeBilinear(input, [inputSize6, inputSize6], false);
|
||||||
t.cast = tf17.cast(t.resized, "int32");
|
t.cast = tf17.cast(t.resized, "int32");
|
||||||
t.res = await (model8 == null ? void 0 : model8.predict(t.cast));
|
t.res = await (model8 == null ? void 0 : model8.predict(t.cast));
|
||||||
|
@ -9905,13 +10018,13 @@ async function predict9(input, config3) {
|
||||||
bodies = t.res.shape[2] === 17 ? await parseSinglePose(res, config3, input, [0, 0, 1, 1]) : await parseMultiPose(res, config3, input, [0, 0, 1, 1]);
|
bodies = t.res.shape[2] === 17 ? await parseSinglePose(res, config3, input, [0, 0, 1, 1]) : await parseMultiPose(res, config3, input, [0, 0, 1, 1]);
|
||||||
Object.keys(t).forEach((tensor3) => tf17.dispose(t[tensor3]));
|
Object.keys(t).forEach((tensor3) => tf17.dispose(t[tensor3]));
|
||||||
cachedBoxes.length = 0;
|
cachedBoxes.length = 0;
|
||||||
skipped6 = 0;
|
skipped7 = 0;
|
||||||
}
|
}
|
||||||
if (config3.skipFrame) {
|
if (config3.skipFrame) {
|
||||||
cachedBoxes.length = 0;
|
cachedBoxes.length = 0;
|
||||||
for (let i = 0; i < bodies.length; i++) {
|
for (let i = 0; i < bodies.length; i++) {
|
||||||
if (bodies[i].keypoints.length > 10) {
|
if (bodies[i].keypoints.length > 10) {
|
||||||
const kpts = bodies[i].keypoints.map((kpt) => kpt.position);
|
const kpts = bodies[i].keypoints.map((kpt4) => kpt4.position);
|
||||||
const newBox = scale(kpts, 1.5, [input.shape[2], input.shape[1]]);
|
const newBox = scale(kpts, 1.5, [input.shape[2], input.shape[1]]);
|
||||||
cachedBoxes.push([...newBox.yxBox]);
|
cachedBoxes.push([...newBox.yxBox]);
|
||||||
}
|
}
|
||||||
|
@ -10011,7 +10124,7 @@ var labels = [
|
||||||
// src/object/nanodet.ts
|
// src/object/nanodet.ts
|
||||||
var model9;
|
var model9;
|
||||||
var last3 = [];
|
var last3 = [];
|
||||||
var skipped7 = Number.MAX_SAFE_INTEGER;
|
var skipped8 = Number.MAX_SAFE_INTEGER;
|
||||||
var scaleBox = 2.5;
|
var scaleBox = 2.5;
|
||||||
async function load10(config3) {
|
async function load10(config3) {
|
||||||
if (!model9 || env2.initial) {
|
if (!model9 || env2.initial) {
|
||||||
|
@ -10090,15 +10203,15 @@ async function process3(res, inputSize8, outputShape, config3) {
|
||||||
return results;
|
return results;
|
||||||
}
|
}
|
||||||
async function predict10(image24, config3) {
|
async function predict10(image24, config3) {
|
||||||
if (skipped7 < (config3.object.skipFrames || 0) && config3.skipFrame && last3.length > 0) {
|
if (skipped8 < (config3.object.skipFrames || 0) && config3.skipFrame && last3.length > 0) {
|
||||||
skipped7++;
|
skipped8++;
|
||||||
return last3;
|
return last3;
|
||||||
}
|
}
|
||||||
skipped7 = 0;
|
skipped8 = 0;
|
||||||
if (!env2.kernels.includes("mod") || !env2.kernels.includes("sparsetodense"))
|
if (!env2.kernels.includes("mod") || !env2.kernels.includes("sparsetodense"))
|
||||||
return last3;
|
return last3;
|
||||||
return new Promise(async (resolve) => {
|
return new Promise(async (resolve) => {
|
||||||
const outputSize3 = [image24.shape[2], image24.shape[1]];
|
const outputSize2 = [image24.shape[2], image24.shape[1]];
|
||||||
const resize = tf18.image.resizeBilinear(image24, [model9.inputSize, model9.inputSize], false);
|
const resize = tf18.image.resizeBilinear(image24, [model9.inputSize, model9.inputSize], false);
|
||||||
const norm = tf18.div(resize, 255);
|
const norm = tf18.div(resize, 255);
|
||||||
const transpose = norm.transpose([0, 3, 1, 2]);
|
const transpose = norm.transpose([0, 3, 1, 2]);
|
||||||
|
@ -10108,7 +10221,7 @@ async function predict10(image24, config3) {
|
||||||
if (config3.object.enabled)
|
if (config3.object.enabled)
|
||||||
objectT = await model9.predict(transpose);
|
objectT = await model9.predict(transpose);
|
||||||
tf18.dispose(transpose);
|
tf18.dispose(transpose);
|
||||||
const obj = await process3(objectT, model9.inputSize, outputSize3, config3);
|
const obj = await process3(objectT, model9.inputSize, outputSize2, config3);
|
||||||
last3 = obj;
|
last3 = obj;
|
||||||
resolve(obj);
|
resolve(obj);
|
||||||
});
|
});
|
||||||
|
@ -10119,7 +10232,7 @@ var tf19 = __toModule(require_tfjs_esm());
|
||||||
var model10;
|
var model10;
|
||||||
var inputSize7 = 0;
|
var inputSize7 = 0;
|
||||||
var last4 = [];
|
var last4 = [];
|
||||||
var skipped8 = Number.MAX_SAFE_INTEGER;
|
var skipped9 = Number.MAX_SAFE_INTEGER;
|
||||||
async function load11(config3) {
|
async function load11(config3) {
|
||||||
if (env2.initial)
|
if (env2.initial)
|
||||||
model10 = null;
|
model10 = null;
|
||||||
|
@ -10183,19 +10296,19 @@ async function process4(res, outputShape, config3) {
|
||||||
return results;
|
return results;
|
||||||
}
|
}
|
||||||
async function predict11(input, config3) {
|
async function predict11(input, config3) {
|
||||||
if (skipped8 < (config3.object.skipFrames || 0) && config3.skipFrame && last4.length > 0) {
|
if (skipped9 < (config3.object.skipFrames || 0) && config3.skipFrame && last4.length > 0) {
|
||||||
skipped8++;
|
skipped9++;
|
||||||
return last4;
|
return last4;
|
||||||
}
|
}
|
||||||
skipped8 = 0;
|
skipped9 = 0;
|
||||||
if (!env2.kernels.includes("mod") || !env2.kernels.includes("sparsetodense"))
|
if (!env2.kernels.includes("mod") || !env2.kernels.includes("sparsetodense"))
|
||||||
return last4;
|
return last4;
|
||||||
return new Promise(async (resolve) => {
|
return new Promise(async (resolve) => {
|
||||||
const outputSize3 = [input.shape[2], input.shape[1]];
|
const outputSize2 = [input.shape[2], input.shape[1]];
|
||||||
const resize = tf19.image.resizeBilinear(input, [inputSize7, inputSize7]);
|
const resize = tf19.image.resizeBilinear(input, [inputSize7, inputSize7]);
|
||||||
const objectT = config3.object.enabled ? model10 == null ? void 0 : model10.execute(resize, ["tower_0/detections"]) : null;
|
const objectT = config3.object.enabled ? model10 == null ? void 0 : model10.execute(resize, ["tower_0/detections"]) : null;
|
||||||
tf19.dispose(resize);
|
tf19.dispose(resize);
|
||||||
const obj = await process4(objectT, outputSize3, config3);
|
const obj = await process4(objectT, outputSize2, config3);
|
||||||
last4 = obj;
|
last4 = obj;
|
||||||
resolve(obj);
|
resolve(obj);
|
||||||
});
|
});
|
||||||
|
@ -10288,7 +10401,7 @@ async function process5(input, background, config3) {
|
||||||
// src/gear/gear-agegenderrace.ts
|
// src/gear/gear-agegenderrace.ts
|
||||||
var tf21 = __toModule(require_tfjs_esm());
|
var tf21 = __toModule(require_tfjs_esm());
|
||||||
var model12;
|
var model12;
|
||||||
var skipped9 = Number.MAX_SAFE_INTEGER;
|
var skipped10 = Number.MAX_SAFE_INTEGER;
|
||||||
async function load13(config3) {
|
async function load13(config3) {
|
||||||
if (env2.initial)
|
if (env2.initial)
|
||||||
model12 = null;
|
model12 = null;
|
||||||
|
@ -10468,7 +10581,6 @@ async function register(instance) {
|
||||||
log("error: humangl:", e.type);
|
log("error: humangl:", e.type);
|
||||||
log("possible browser memory leak using webgl");
|
log("possible browser memory leak using webgl");
|
||||||
instance.emit("error");
|
instance.emit("error");
|
||||||
throw new Error("browser webgl error");
|
|
||||||
});
|
});
|
||||||
config2.canvas.addEventListener("webglcontextrestored", (e) => {
|
config2.canvas.addEventListener("webglcontextrestored", (e) => {
|
||||||
log("error: humangl context restored:", e);
|
log("error: humangl context restored:", e);
|
||||||
|
@ -10604,10 +10716,8 @@ async function check(instance, force = false) {
|
||||||
log(`gl version:${gl.getParameter(gl.VERSION)} renderer:${gl.getParameter(gl.RENDERER)}`);
|
log(`gl version:${gl.getParameter(gl.VERSION)} renderer:${gl.getParameter(gl.RENDERER)}`);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (tf23.getBackend() === "humangl") {
|
if (tf23.getBackend() === "webgpu") {
|
||||||
tf23.ENV.set("WEBGPU_USE_GLSL", true);
|
tf23.ENV.set("WEBGPU_USE_GLSL", true);
|
||||||
tf23.ENV.set("WEBGL_PACK_DEPTHWISECONV", false);
|
|
||||||
tf23.ENV.set("WEBGL_USE_SHAPES_UNIFORMS", true);
|
|
||||||
}
|
}
|
||||||
tf23.enableProdMode();
|
tf23.enableProdMode();
|
||||||
await tf23.ready();
|
await tf23.ready();
|
||||||
|
@ -10879,109 +10989,24 @@ async function body(inCanvas2, result, drawOptions) {
|
||||||
ctx.fillText(`body ${100 * result[i].score}%`, result[i].box[0] + 2, 0 + result[i].box[1] + localOptions.lineHeight, result[i].box[2]);
|
ctx.fillText(`body ${100 * result[i].score}%`, result[i].box[0] + 2, 0 + result[i].box[1] + localOptions.lineHeight, result[i].box[2]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (localOptions.drawPoints) {
|
if (localOptions.drawPoints && result[i].keypoints) {
|
||||||
for (let pt = 0; pt < result[i].keypoints.length; pt++) {
|
for (let pt = 0; pt < result[i].keypoints.length; pt++) {
|
||||||
ctx.fillStyle = localOptions.useDepth && result[i].keypoints[pt].position[2] ? `rgba(${127.5 + 2 * (result[i].keypoints[pt].position[2] || 0)}, ${127.5 - 2 * (result[i].keypoints[pt].position[2] || 0)}, 255, 0.5)` : localOptions.color;
|
ctx.fillStyle = localOptions.useDepth && result[i].keypoints[pt].position[2] ? `rgba(${127.5 + 2 * (result[i].keypoints[pt].position[2] || 0)}, ${127.5 - 2 * (result[i].keypoints[pt].position[2] || 0)}, 255, 0.5)` : localOptions.color;
|
||||||
point(ctx, result[i].keypoints[pt].position[0], result[i].keypoints[pt].position[1], 0, localOptions);
|
point(ctx, result[i].keypoints[pt].position[0], result[i].keypoints[pt].position[1], 0, localOptions);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (localOptions.drawLabels) {
|
if (localOptions.drawLabels && result[i].keypoints) {
|
||||||
ctx.font = localOptions.font;
|
ctx.font = localOptions.font;
|
||||||
if (result[i].keypoints) {
|
for (const pt of result[i].keypoints) {
|
||||||
for (const pt of result[i].keypoints) {
|
ctx.fillStyle = localOptions.useDepth && pt.position[2] ? `rgba(${127.5 + 2 * pt.position[2]}, ${127.5 - 2 * pt.position[2]}, 255, 0.5)` : localOptions.color;
|
||||||
ctx.fillStyle = localOptions.useDepth && pt.position[2] ? `rgba(${127.5 + 2 * pt.position[2]}, ${127.5 - 2 * pt.position[2]}, 255, 0.5)` : localOptions.color;
|
ctx.fillText(`${pt.part} ${Math.trunc(100 * pt.score)}%`, pt.position[0] + 4, pt.position[1] + 4);
|
||||||
ctx.fillText(`${pt.part} ${Math.trunc(100 * pt.score)}%`, pt.position[0] + 4, pt.position[1] + 4);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (localOptions.drawPolygons && result[i].keypoints) {
|
if (localOptions.drawPolygons && result[i].keypoints && result[i].annotations) {
|
||||||
let part;
|
for (const part of Object.values(result[i].annotations)) {
|
||||||
const points = [];
|
for (const connected4 of part)
|
||||||
points.length = 0;
|
curves(ctx, connected4, localOptions);
|
||||||
part = result[i].keypoints.find((a) => a.part === "leftShoulder");
|
}
|
||||||
if (part)
|
|
||||||
points.push([part.position[0], part.position[1]]);
|
|
||||||
part = result[i].keypoints.find((a) => a.part === "rightShoulder");
|
|
||||||
if (part)
|
|
||||||
points.push([part.position[0], part.position[1]]);
|
|
||||||
curves(ctx, points, localOptions);
|
|
||||||
points.length = 0;
|
|
||||||
part = result[i].keypoints.find((a) => a.part === "rightShoulder");
|
|
||||||
if (part)
|
|
||||||
points.push([part.position[0], part.position[1]]);
|
|
||||||
part = result[i].keypoints.find((a) => a.part === "rightHip");
|
|
||||||
if (part)
|
|
||||||
points.push([part.position[0], part.position[1]]);
|
|
||||||
part = result[i].keypoints.find((a) => a.part === "leftHip");
|
|
||||||
if (part)
|
|
||||||
points.push([part.position[0], part.position[1]]);
|
|
||||||
part = result[i].keypoints.find((a) => a.part === "leftShoulder");
|
|
||||||
if (part)
|
|
||||||
points.push([part.position[0], part.position[1]]);
|
|
||||||
if (points.length === 4)
|
|
||||||
lines(ctx, points, localOptions);
|
|
||||||
points.length = 0;
|
|
||||||
part = result[i].keypoints.find((a) => a.part === "leftHip");
|
|
||||||
if (part)
|
|
||||||
points.push([part.position[0], part.position[1]]);
|
|
||||||
part = result[i].keypoints.find((a) => a.part === "leftKnee");
|
|
||||||
if (part)
|
|
||||||
points.push([part.position[0], part.position[1]]);
|
|
||||||
part = result[i].keypoints.find((a) => a.part === "leftAnkle");
|
|
||||||
if (part)
|
|
||||||
points.push([part.position[0], part.position[1]]);
|
|
||||||
part = result[i].keypoints.find((a) => a.part === "leftHeel");
|
|
||||||
if (part)
|
|
||||||
points.push([part.position[0], part.position[1]]);
|
|
||||||
part = result[i].keypoints.find((a) => a.part === "leftFoot");
|
|
||||||
if (part)
|
|
||||||
points.push([part.position[0], part.position[1]]);
|
|
||||||
curves(ctx, points, localOptions);
|
|
||||||
points.length = 0;
|
|
||||||
part = result[i].keypoints.find((a) => a.part === "rightHip");
|
|
||||||
if (part)
|
|
||||||
points.push([part.position[0], part.position[1]]);
|
|
||||||
part = result[i].keypoints.find((a) => a.part === "rightKnee");
|
|
||||||
if (part)
|
|
||||||
points.push([part.position[0], part.position[1]]);
|
|
||||||
part = result[i].keypoints.find((a) => a.part === "rightAnkle");
|
|
||||||
if (part)
|
|
||||||
points.push([part.position[0], part.position[1]]);
|
|
||||||
part = result[i].keypoints.find((a) => a.part === "rightHeel");
|
|
||||||
if (part)
|
|
||||||
points.push([part.position[0], part.position[1]]);
|
|
||||||
part = result[i].keypoints.find((a) => a.part === "rightFoot");
|
|
||||||
if (part)
|
|
||||||
points.push([part.position[0], part.position[1]]);
|
|
||||||
curves(ctx, points, localOptions);
|
|
||||||
points.length = 0;
|
|
||||||
part = result[i].keypoints.find((a) => a.part === "leftShoulder");
|
|
||||||
if (part)
|
|
||||||
points.push([part.position[0], part.position[1]]);
|
|
||||||
part = result[i].keypoints.find((a) => a.part === "leftElbow");
|
|
||||||
if (part)
|
|
||||||
points.push([part.position[0], part.position[1]]);
|
|
||||||
part = result[i].keypoints.find((a) => a.part === "leftWrist");
|
|
||||||
if (part)
|
|
||||||
points.push([part.position[0], part.position[1]]);
|
|
||||||
part = result[i].keypoints.find((a) => a.part === "leftPalm");
|
|
||||||
if (part)
|
|
||||||
points.push([part.position[0], part.position[1]]);
|
|
||||||
curves(ctx, points, localOptions);
|
|
||||||
points.length = 0;
|
|
||||||
part = result[i].keypoints.find((a) => a.part === "rightShoulder");
|
|
||||||
if (part)
|
|
||||||
points.push([part.position[0], part.position[1]]);
|
|
||||||
part = result[i].keypoints.find((a) => a.part === "rightElbow");
|
|
||||||
if (part)
|
|
||||||
points.push([part.position[0], part.position[1]]);
|
|
||||||
part = result[i].keypoints.find((a) => a.part === "rightWrist");
|
|
||||||
if (part)
|
|
||||||
points.push([part.position[0], part.position[1]]);
|
|
||||||
part = result[i].keypoints.find((a) => a.part === "rightPalm");
|
|
||||||
if (part)
|
|
||||||
points.push([part.position[0], part.position[1]]);
|
|
||||||
curves(ctx, points, localOptions);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -11474,15 +11499,15 @@ function calc(newResult) {
|
||||||
if (bufferedResult.hand[i].keypoints.length !== newResult.hand[i].keypoints.length)
|
if (bufferedResult.hand[i].keypoints.length !== newResult.hand[i].keypoints.length)
|
||||||
bufferedResult.hand[i].keypoints = newResult.hand[i].keypoints;
|
bufferedResult.hand[i].keypoints = newResult.hand[i].keypoints;
|
||||||
const keypoints3 = newResult.hand[i].keypoints && newResult.hand[i].keypoints.length > 0 ? newResult.hand[i].keypoints.map((landmark, j) => landmark.map((coord, k) => ((bufferedFactor - 1) * (bufferedResult.hand[i].keypoints[j][k] || 1) + (coord || 0)) / bufferedFactor)) : [];
|
const keypoints3 = newResult.hand[i].keypoints && newResult.hand[i].keypoints.length > 0 ? newResult.hand[i].keypoints.map((landmark, j) => landmark.map((coord, k) => ((bufferedFactor - 1) * (bufferedResult.hand[i].keypoints[j][k] || 1) + (coord || 0)) / bufferedFactor)) : [];
|
||||||
const annotations3 = {};
|
const annotations2 = {};
|
||||||
if (Object.keys(bufferedResult.hand[i].annotations).length !== Object.keys(newResult.hand[i].annotations).length)
|
if (Object.keys(bufferedResult.hand[i].annotations).length !== Object.keys(newResult.hand[i].annotations).length)
|
||||||
bufferedResult.hand[i].annotations = newResult.hand[i].annotations;
|
bufferedResult.hand[i].annotations = newResult.hand[i].annotations;
|
||||||
if (newResult.hand[i].annotations) {
|
if (newResult.hand[i].annotations) {
|
||||||
for (const key of Object.keys(newResult.hand[i].annotations)) {
|
for (const key of Object.keys(newResult.hand[i].annotations)) {
|
||||||
annotations3[key] = newResult.hand[i].annotations[key] && newResult.hand[i].annotations[key][0] ? newResult.hand[i].annotations[key].map((val, j) => val.map((coord, k) => ((bufferedFactor - 1) * bufferedResult.hand[i].annotations[key][j][k] + coord) / bufferedFactor)) : null;
|
annotations2[key] = newResult.hand[i].annotations[key] && newResult.hand[i].annotations[key][0] ? newResult.hand[i].annotations[key].map((val, j) => val.map((coord, k) => ((bufferedFactor - 1) * bufferedResult.hand[i].annotations[key][j][k] + coord) / bufferedFactor)) : null;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
bufferedResult.hand[i] = { ...newResult.hand[i], box: box4, boxRaw: boxRaw2, keypoints: keypoints3, annotations: annotations3 };
|
bufferedResult.hand[i] = { ...newResult.hand[i], box: box4, boxRaw: boxRaw2, keypoints: keypoints3, annotations: annotations2 };
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (!bufferedResult.face || newResult.face.length !== bufferedResult.face.length) {
|
if (!bufferedResult.face || newResult.face.length !== bufferedResult.face.length) {
|
||||||
|
|
|
@ -216,7 +216,7 @@ var config = {
|
||||||
},
|
},
|
||||||
maxDetected: -1,
|
maxDetected: -1,
|
||||||
minConfidence: 0.2,
|
minConfidence: 0.2,
|
||||||
skipFrames: 1
|
skipFrames: 5
|
||||||
},
|
},
|
||||||
hand: {
|
hand: {
|
||||||
enabled: true,
|
enabled: true,
|
||||||
|
@ -1200,6 +1200,8 @@ function process2(input, config3) {
|
||||||
tempCanvas.height = targetHeight;
|
tempCanvas.height = targetHeight;
|
||||||
const tempCtx = tempCanvas.getContext("2d");
|
const tempCtx = tempCanvas.getContext("2d");
|
||||||
tempCtx == null ? void 0 : tempCtx.drawImage(outCanvas, 0, 0);
|
tempCtx == null ? void 0 : tempCtx.drawImage(outCanvas, 0, 0);
|
||||||
|
console.log("PIXELS", tempCanvas);
|
||||||
|
pixels = tf2.browser && env2.browser ? tf2.browser.fromPixels(tempCanvas) : null;
|
||||||
try {
|
try {
|
||||||
pixels = tf2.browser && env2.browser ? tf2.browser.fromPixels(tempCanvas) : null;
|
pixels = tf2.browser && env2.browser ? tf2.browser.fromPixels(tempCanvas) : null;
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
|
@ -8780,11 +8782,11 @@ var HandPipeline = class {
|
||||||
const rawCoords = await keypointsReshaped.array();
|
const rawCoords = await keypointsReshaped.array();
|
||||||
tf12.dispose(keypoints3);
|
tf12.dispose(keypoints3);
|
||||||
tf12.dispose(keypointsReshaped);
|
tf12.dispose(keypointsReshaped);
|
||||||
const coords4 = this.transformRawCoords(rawCoords, newBox, angle, rotationMatrix);
|
const coords7 = this.transformRawCoords(rawCoords, newBox, angle, rotationMatrix);
|
||||||
const nextBoundingBox = this.getBoxForHandLandmarks(coords4);
|
const nextBoundingBox = this.getBoxForHandLandmarks(coords7);
|
||||||
this.storedBoxes[i] = { ...nextBoundingBox, confidence };
|
this.storedBoxes[i] = { ...nextBoundingBox, confidence };
|
||||||
const result = {
|
const result = {
|
||||||
landmarks: coords4,
|
landmarks: coords7,
|
||||||
confidence,
|
confidence,
|
||||||
boxConfidence: currentBox.confidence,
|
boxConfidence: currentBox.confidence,
|
||||||
fingerConfidence: confidence,
|
fingerConfidence: confidence,
|
||||||
|
@ -9211,10 +9213,10 @@ async function predict5(input, config3) {
|
||||||
return [];
|
return [];
|
||||||
const hands = [];
|
const hands = [];
|
||||||
for (let i = 0; i < predictions.length; i++) {
|
for (let i = 0; i < predictions.length; i++) {
|
||||||
const annotations3 = {};
|
const annotations2 = {};
|
||||||
if (predictions[i].landmarks) {
|
if (predictions[i].landmarks) {
|
||||||
for (const key of Object.keys(meshAnnotations2)) {
|
for (const key of Object.keys(meshAnnotations2)) {
|
||||||
annotations3[key] = meshAnnotations2[key].map((index) => predictions[i].landmarks[index]);
|
annotations2[key] = meshAnnotations2[key].map((index) => predictions[i].landmarks[index]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
const keypoints3 = predictions[i].landmarks;
|
const keypoints3 = predictions[i].landmarks;
|
||||||
|
@ -9258,7 +9260,7 @@ async function predict5(input, config3) {
|
||||||
box: box4,
|
box: box4,
|
||||||
boxRaw: boxRaw2,
|
boxRaw: boxRaw2,
|
||||||
keypoints: keypoints3,
|
keypoints: keypoints3,
|
||||||
annotations: annotations3,
|
annotations: annotations2,
|
||||||
landmarks
|
landmarks
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
@ -9297,9 +9299,9 @@ async function load7(config3) {
|
||||||
}
|
}
|
||||||
|
|
||||||
// src/util/box.ts
|
// src/util/box.ts
|
||||||
function scale(keypoints3, boxScaleFact2, outputSize3) {
|
function scale(keypoints3, boxScaleFact2, outputSize2) {
|
||||||
const coords4 = [keypoints3.map((pt) => pt[0]), keypoints3.map((pt) => pt[1])];
|
const coords7 = [keypoints3.map((pt) => pt[0]), keypoints3.map((pt) => pt[1])];
|
||||||
const maxmin = [Math.max(...coords4[0]), Math.min(...coords4[0]), Math.max(...coords4[1]), Math.min(...coords4[1])];
|
const maxmin = [Math.max(...coords7[0]), Math.min(...coords7[0]), Math.max(...coords7[1]), Math.min(...coords7[1])];
|
||||||
const center = [(maxmin[0] + maxmin[1]) / 2, (maxmin[2] + maxmin[3]) / 2];
|
const center = [(maxmin[0] + maxmin[1]) / 2, (maxmin[2] + maxmin[3]) / 2];
|
||||||
const diff = Math.max(center[0] - maxmin[1], center[1] - maxmin[3], -center[0] + maxmin[0], -center[1] + maxmin[2]) * boxScaleFact2;
|
const diff = Math.max(center[0] - maxmin[1], center[1] - maxmin[3], -center[0] + maxmin[0], -center[1] + maxmin[2]) * boxScaleFact2;
|
||||||
const box4 = [
|
const box4 = [
|
||||||
|
@ -9309,10 +9311,10 @@ function scale(keypoints3, boxScaleFact2, outputSize3) {
|
||||||
Math.trunc(2 * diff)
|
Math.trunc(2 * diff)
|
||||||
];
|
];
|
||||||
const boxRaw2 = [
|
const boxRaw2 = [
|
||||||
box4[0] / outputSize3[0],
|
box4[0] / outputSize2[0],
|
||||||
box4[1] / outputSize3[1],
|
box4[1] / outputSize2[1],
|
||||||
box4[2] / outputSize3[0],
|
box4[2] / outputSize2[0],
|
||||||
box4[3] / outputSize3[1]
|
box4[3] / outputSize2[1]
|
||||||
];
|
];
|
||||||
const yxBox = [
|
const yxBox = [
|
||||||
boxRaw2[1],
|
boxRaw2[1],
|
||||||
|
@ -9502,10 +9504,10 @@ async function predict6(input, config3) {
|
||||||
}
|
}
|
||||||
|
|
||||||
// src/body/blazepose.ts
|
// src/body/blazepose.ts
|
||||||
var tf15 = __toModule(require_tfjs_esm());
|
var tf15 = __toModule(require("@tensorflow/tfjs"));
|
||||||
|
|
||||||
// src/body/annotations.ts
|
// src/body/blazeposecoords.ts
|
||||||
var full = [
|
var kpt = [
|
||||||
"nose",
|
"nose",
|
||||||
"leftEyeInside",
|
"leftEyeInside",
|
||||||
"leftEye",
|
"leftEye",
|
||||||
|
@ -9539,58 +9541,38 @@ var full = [
|
||||||
"rightHeel",
|
"rightHeel",
|
||||||
"leftFoot",
|
"leftFoot",
|
||||||
"rightFoot",
|
"rightFoot",
|
||||||
"midHip",
|
"bodyCenter",
|
||||||
"forehead",
|
"bodyTop",
|
||||||
"leftThumb",
|
"leftThumb",
|
||||||
"leftHand",
|
"leftHand",
|
||||||
"rightThumb",
|
"rightThumb",
|
||||||
"rightHand"
|
"rightHand"
|
||||||
];
|
];
|
||||||
var upper = [
|
var connected = {
|
||||||
"nose",
|
leftLeg: ["leftHip", "leftKnee", "leftAnkle", "leftHeel", "leftFoot"],
|
||||||
"leftEyeInside",
|
rightLeg: ["rightHip", "rightKnee", "rightAnkle", "rightHeel", "rightFoot"],
|
||||||
"leftEye",
|
torso: ["leftShoulder", "rightShoulder", "rightHip", "leftHip", "leftShoulder"],
|
||||||
"leftEyeOutside",
|
leftArm: ["leftShoulder", "leftElbow", "leftWrist", "leftPalm"],
|
||||||
"rightEyeInside",
|
rightArm: ["rightShoulder", "rightElbow", "rightWrist", "rightPalm"],
|
||||||
"rightEye",
|
leftHand: [],
|
||||||
"rightEyeOutside",
|
rightHand: [],
|
||||||
"leftEar",
|
head: []
|
||||||
"rightEar",
|
};
|
||||||
"leftMouth",
|
|
||||||
"rightMouth",
|
|
||||||
"leftShoulder",
|
|
||||||
"rightShoulder",
|
|
||||||
"leftElbow",
|
|
||||||
"rightElbow",
|
|
||||||
"left:15",
|
|
||||||
"right:16",
|
|
||||||
"left:17",
|
|
||||||
"right:18",
|
|
||||||
"left:19",
|
|
||||||
"right:20",
|
|
||||||
"left:21",
|
|
||||||
"right:22",
|
|
||||||
"leftChest",
|
|
||||||
"rightChest",
|
|
||||||
"neck",
|
|
||||||
"forehead",
|
|
||||||
"left:27",
|
|
||||||
"right:28",
|
|
||||||
"left:29",
|
|
||||||
"right:30"
|
|
||||||
];
|
|
||||||
|
|
||||||
// src/body/blazepose.ts
|
// src/body/blazepose.ts
|
||||||
|
var env3 = { initial: true };
|
||||||
var models2 = [null, null];
|
var models2 = [null, null];
|
||||||
var outputNodes = ["ld_3d", "activation_segmentation", "activation_heatmap", "world_3d", "output_poseflag"];
|
|
||||||
var inputSize5 = [[0, 0], [0, 0]];
|
var inputSize5 = [[0, 0], [0, 0]];
|
||||||
var outputSize2 = [0, 0];
|
var skipped5 = Number.MAX_SAFE_INTEGER;
|
||||||
|
var outputNodes;
|
||||||
|
var cache2 = null;
|
||||||
|
var padding = [[0, 0], [0, 0], [0, 0], [0, 0]];
|
||||||
async function loadDetect2(config3) {
|
async function loadDetect2(config3) {
|
||||||
var _a;
|
var _a, _b;
|
||||||
if (env2.initial)
|
if (env3.initial)
|
||||||
models2[0] = null;
|
models2[0] = null;
|
||||||
if (!models2[0]) {
|
if (!models2[0] && ((_a = config3.body.detector) == null ? void 0 : _a.modelPath) || "") {
|
||||||
models2[0] = await tf15.loadGraphModel(join(config3.modelBasePath, ((_a = config3.body.detector) == null ? void 0 : _a.modelPath) || ""));
|
models2[0] = await tf15.loadGraphModel(join(config3.modelBasePath, ((_b = config3.body.detector) == null ? void 0 : _b.modelPath) || ""));
|
||||||
const inputs = Object.values(models2[0].modelSignature["inputs"]);
|
const inputs = Object.values(models2[0].modelSignature["inputs"]);
|
||||||
inputSize5[0][0] = Array.isArray(inputs) ? parseInt(inputs[0].tensorShape.dim[1].size) : 0;
|
inputSize5[0][0] = Array.isArray(inputs) ? parseInt(inputs[0].tensorShape.dim[1].size) : 0;
|
||||||
inputSize5[0][1] = Array.isArray(inputs) ? parseInt(inputs[0].tensorShape.dim[2].size) : 0;
|
inputSize5[0][1] = Array.isArray(inputs) ? parseInt(inputs[0].tensorShape.dim[2].size) : 0;
|
||||||
|
@ -9598,18 +9580,23 @@ async function loadDetect2(config3) {
|
||||||
log("load model failed:", config3.object.modelPath);
|
log("load model failed:", config3.object.modelPath);
|
||||||
else if (config3.debug)
|
else if (config3.debug)
|
||||||
log("load model:", models2[0]["modelUrl"]);
|
log("load model:", models2[0]["modelUrl"]);
|
||||||
} else if (config3.debug)
|
} else if (config3.debug && models2[0])
|
||||||
log("cached model:", models2[0]["modelUrl"]);
|
log("cached model:", models2[0]["modelUrl"]);
|
||||||
return models2[0];
|
return models2[0];
|
||||||
}
|
}
|
||||||
async function loadPose(config3) {
|
async function loadPose(config3) {
|
||||||
if (env2.initial)
|
var _a;
|
||||||
|
if (env3.initial)
|
||||||
models2[1] = null;
|
models2[1] = null;
|
||||||
if (!models2[1]) {
|
if (!models2[1]) {
|
||||||
models2[1] = await tf15.loadGraphModel(join(config3.modelBasePath, config3.body.modelPath || ""));
|
models2[1] = await tf15.loadGraphModel(join(config3.modelBasePath, config3.body.modelPath || ""));
|
||||||
const inputs = Object.values(models2[1].modelSignature["inputs"]);
|
const inputs = Object.values(models2[1].modelSignature["inputs"]);
|
||||||
inputSize5[1][0] = Array.isArray(inputs) ? parseInt(inputs[0].tensorShape.dim[1].size) : 0;
|
inputSize5[1][0] = Array.isArray(inputs) ? parseInt(inputs[0].tensorShape.dim[1].size) : 0;
|
||||||
inputSize5[1][1] = Array.isArray(inputs) ? parseInt(inputs[0].tensorShape.dim[2].size) : 0;
|
inputSize5[1][1] = Array.isArray(inputs) ? parseInt(inputs[0].tensorShape.dim[2].size) : 0;
|
||||||
|
if ((_a = config3.body.modelPath) == null ? void 0 : _a.includes("lite"))
|
||||||
|
outputNodes = ["ld_3d", "output_segmentation", "output_heatmap", "world_3d", "output_poseflag"];
|
||||||
|
else
|
||||||
|
outputNodes = ["Identity", "Identity_2", "Identity_3", "Identity_4", "Identity_1"];
|
||||||
if (!models2[1] || !models2[1]["modelUrl"])
|
if (!models2[1] || !models2[1]["modelUrl"])
|
||||||
log("load model failed:", config3.object.modelPath);
|
log("load model failed:", config3.object.modelPath);
|
||||||
else if (config3.debug)
|
else if (config3.debug)
|
||||||
|
@ -9618,64 +9605,128 @@ async function loadPose(config3) {
|
||||||
log("cached model:", models2[1]["modelUrl"]);
|
log("cached model:", models2[1]["modelUrl"]);
|
||||||
return models2[1];
|
return models2[1];
|
||||||
}
|
}
|
||||||
async function detectParts(input, config3) {
|
function calculateBoxes(keypoints3, outputSize2) {
|
||||||
var _a;
|
|
||||||
const t = {};
|
|
||||||
t.resize = tf15.image.resizeBilinear(input, [inputSize5[1][0], inputSize5[1][1]]);
|
|
||||||
[t.ld, t.segmentation, t.heatmap, t.world, t.poseflag] = await ((_a = models2[1]) == null ? void 0 : _a.execute(t.resize, outputNodes));
|
|
||||||
const points = await t.ld.data();
|
|
||||||
const keypoints3 = [];
|
|
||||||
const labels2 = (points == null ? void 0 : points.length) === 195 ? full : upper;
|
|
||||||
const depth = 5;
|
|
||||||
for (let i = 0; i < points.length / depth; i++) {
|
|
||||||
const score3 = (100 - Math.trunc(100 / (1 + Math.exp(points[depth * i + 3])))) / 100;
|
|
||||||
if (score3 > (config3.body.minConfidence || 0)) {
|
|
||||||
keypoints3.push({
|
|
||||||
part: labels2[i],
|
|
||||||
position: [
|
|
||||||
Math.trunc(outputSize2[0] * points[depth * i + 0] / 255),
|
|
||||||
Math.trunc(outputSize2[1] * points[depth * i + 1] / 255),
|
|
||||||
Math.trunc(points[depth * i + 2]) + 0
|
|
||||||
],
|
|
||||||
positionRaw: [
|
|
||||||
points[depth * i + 0] / 255,
|
|
||||||
points[depth * i + 1] / 255,
|
|
||||||
points[depth * i + 2] + 0
|
|
||||||
],
|
|
||||||
score: score3
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
|
||||||
const x = keypoints3.map((a) => a.position[0]);
|
const x = keypoints3.map((a) => a.position[0]);
|
||||||
const y = keypoints3.map((a) => a.position[1]);
|
const y = keypoints3.map((a) => a.position[1]);
|
||||||
const box4 = [
|
const keypointsBox = [Math.min(...x), Math.min(...y), Math.max(...x) - Math.min(...x), Math.max(...y) - Math.min(...y)];
|
||||||
Math.min(...x),
|
const keypointsBoxRaw = [keypointsBox[0] / outputSize2[0], keypointsBox[1] / outputSize2[1], keypointsBox[2] / outputSize2[0], keypointsBox[3] / outputSize2[1]];
|
||||||
Math.min(...y),
|
return { keypointsBox, keypointsBoxRaw };
|
||||||
Math.max(...x) - Math.min(...x),
|
}
|
||||||
Math.max(...y) - Math.min(...x)
|
async function prepareImage(input) {
|
||||||
|
const t = {};
|
||||||
|
if (!input.shape || !input.shape[1] || !input.shape[2])
|
||||||
|
return input;
|
||||||
|
padding = [
|
||||||
|
[0, 0],
|
||||||
|
[input.shape[2] > input.shape[1] ? Math.trunc((input.shape[2] - input.shape[1]) / 2) : 0, input.shape[2] > input.shape[1] ? Math.trunc((input.shape[2] - input.shape[1]) / 2) : 0],
|
||||||
|
[input.shape[1] > input.shape[2] ? Math.trunc((input.shape[1] - input.shape[2]) / 2) : 0, input.shape[1] > input.shape[2] ? Math.trunc((input.shape[1] - input.shape[2]) / 2) : 0],
|
||||||
|
[0, 0]
|
||||||
];
|
];
|
||||||
const boxRaw2 = [0, 0, 0, 0];
|
t.pad = tf15.pad(input, padding);
|
||||||
const score2 = keypoints3.reduce((prev, curr) => curr.score > prev ? curr.score : prev, 0);
|
t.resize = tf15.image.resizeBilinear(t.pad, [inputSize5[1][0], inputSize5[1][1]]);
|
||||||
|
const final = tf15.div(t.resize, 255);
|
||||||
Object.keys(t).forEach((tensor3) => tf15.dispose(t[tensor3]));
|
Object.keys(t).forEach((tensor3) => tf15.dispose(t[tensor3]));
|
||||||
return { id: 0, score: score2, box: box4, boxRaw: boxRaw2, keypoints: keypoints3 };
|
return final;
|
||||||
|
}
|
||||||
|
function rescaleKeypoints(keypoints3, outputSize2) {
|
||||||
|
for (const kpt4 of keypoints3) {
|
||||||
|
kpt4.position = [
|
||||||
|
kpt4.position[0] * (outputSize2[0] + padding[2][0] + padding[2][1]) / outputSize2[0] - padding[2][0],
|
||||||
|
kpt4.position[1] * (outputSize2[1] + padding[1][0] + padding[1][1]) / outputSize2[1] - padding[1][0],
|
||||||
|
kpt4.position[2]
|
||||||
|
];
|
||||||
|
kpt4.positionRaw = [
|
||||||
|
kpt4.position[0] / outputSize2[0],
|
||||||
|
kpt4.position[1] / outputSize2[1],
|
||||||
|
kpt4.position[2]
|
||||||
|
];
|
||||||
|
}
|
||||||
|
return keypoints3;
|
||||||
|
}
|
||||||
|
async function detectParts(input, config3, outputSize2) {
|
||||||
|
var _a;
|
||||||
|
const t = {};
|
||||||
|
t.input = await prepareImage(input);
|
||||||
|
[t.ld, t.segmentation, t.heatmap, t.world, t.poseflag] = await ((_a = models2[1]) == null ? void 0 : _a.execute(t.input, outputNodes));
|
||||||
|
const points = await t.ld.data();
|
||||||
|
const keypointsRelative = [];
|
||||||
|
const depth = 5;
|
||||||
|
for (let i = 0; i < points.length / depth; i++) {
|
||||||
|
const score2 = (100 - Math.trunc(100 / (1 + Math.exp(points[depth * i + 3])))) / 100;
|
||||||
|
const positionRaw = [points[depth * i + 0] / inputSize5[1][0], points[depth * i + 1] / inputSize5[1][1], points[depth * i + 2] + 0];
|
||||||
|
const position = [Math.trunc(outputSize2[0] * positionRaw[0]), Math.trunc(outputSize2[1] * positionRaw[1]), positionRaw[2]];
|
||||||
|
keypointsRelative.push({ part: kpt[i], positionRaw, position, score: score2 });
|
||||||
|
}
|
||||||
|
const avgScore = Math.round(100 * keypointsRelative.reduce((prev, curr) => prev += curr.score, 0) / keypointsRelative.length) / 100;
|
||||||
|
if (avgScore < (config3.body.minConfidence || 0))
|
||||||
|
return null;
|
||||||
|
const keypoints3 = rescaleKeypoints(keypointsRelative, outputSize2);
|
||||||
|
const boxes = calculateBoxes(keypoints3, [outputSize2[0], outputSize2[1]]);
|
||||||
|
Object.keys(t).forEach((tensor3) => tf15.dispose(t[tensor3]));
|
||||||
|
const annotations2 = {};
|
||||||
|
for (const [name, indexes] of Object.entries(connected)) {
|
||||||
|
const pt = [];
|
||||||
|
for (let i = 0; i < indexes.length - 1; i++) {
|
||||||
|
const pt0 = keypoints3.find((kpt4) => kpt4.part === indexes[i]);
|
||||||
|
const pt1 = keypoints3.find((kpt4) => kpt4.part === indexes[i + 1]);
|
||||||
|
if (pt0 && pt1 && pt0.score > (config3.body.minConfidence || 0) && pt1.score > (config3.body.minConfidence || 0))
|
||||||
|
pt.push([pt0.position, pt1.position]);
|
||||||
|
}
|
||||||
|
annotations2[name] = pt;
|
||||||
|
}
|
||||||
|
return { id: 0, score: avgScore, box: boxes.keypointsBox, boxRaw: boxes.keypointsBoxRaw, keypoints: keypoints3, annotations: annotations2 };
|
||||||
}
|
}
|
||||||
async function predict7(input, config3) {
|
async function predict7(input, config3) {
|
||||||
outputSize2 = [input.shape[2] || 0, input.shape[1] || 0];
|
const outputSize2 = [input.shape[2] || 0, input.shape[1] || 0];
|
||||||
const bodies = [];
|
if (skipped5 < (config3.body.skipFrames || 0) && config3.skipFrame) {
|
||||||
const body4 = await detectParts(input, config3);
|
skipped5++;
|
||||||
bodies.push(body4);
|
} else {
|
||||||
return bodies;
|
cache2 = await detectParts(input, config3, outputSize2);
|
||||||
|
skipped5 = 0;
|
||||||
|
}
|
||||||
|
if (cache2)
|
||||||
|
return [cache2];
|
||||||
|
return [];
|
||||||
}
|
}
|
||||||
|
|
||||||
// src/body/efficientpose.ts
|
// src/body/efficientpose.ts
|
||||||
var tf16 = __toModule(require_tfjs_esm());
|
var tf16 = __toModule(require_tfjs_esm());
|
||||||
|
|
||||||
|
// src/body/efficientposecoords.ts
|
||||||
|
var kpt2 = [
|
||||||
|
"head",
|
||||||
|
"neck",
|
||||||
|
"rightShoulder",
|
||||||
|
"rightElbow",
|
||||||
|
"rightWrist",
|
||||||
|
"chest",
|
||||||
|
"leftShoulder",
|
||||||
|
"leftElbow",
|
||||||
|
"leftWrist",
|
||||||
|
"bodyCenter",
|
||||||
|
"rightHip",
|
||||||
|
"rightKnee",
|
||||||
|
"rightAnkle",
|
||||||
|
"leftHip",
|
||||||
|
"leftKnee",
|
||||||
|
"leftAnkle"
|
||||||
|
];
|
||||||
|
var connected2 = {
|
||||||
|
leftLeg: ["leftHip", "leftKnee", "leftAnkle"],
|
||||||
|
rightLeg: ["rightHip", "rightKnee", "rightAnkle"],
|
||||||
|
torso: ["leftShoulder", "rightShoulder", "rightHip", "leftHip", "leftShoulder"],
|
||||||
|
leftArm: ["leftShoulder", "leftElbow", "leftWrist"],
|
||||||
|
rightArm: ["rightShoulder", "rightElbow", "rightWrist"],
|
||||||
|
head: []
|
||||||
|
};
|
||||||
|
|
||||||
|
// src/body/efficientpose.ts
|
||||||
var model7;
|
var model7;
|
||||||
var keypoints = [];
|
var keypoints = [];
|
||||||
var box3 = [0, 0, 0, 0];
|
var box3 = [0, 0, 0, 0];
|
||||||
var boxRaw = [0, 0, 0, 0];
|
var boxRaw = [0, 0, 0, 0];
|
||||||
var score = 0;
|
var score = 0;
|
||||||
var skipped5 = Number.MAX_SAFE_INTEGER;
|
var skipped6 = Number.MAX_SAFE_INTEGER;
|
||||||
var bodyParts = ["head", "neck", "rightShoulder", "rightElbow", "rightWrist", "chest", "leftShoulder", "leftElbow", "leftWrist", "pelvis", "rightHip", "rightKnee", "rightAnkle", "leftHip", "leftKnee", "leftAnkle"];
|
|
||||||
async function load8(config3) {
|
async function load8(config3) {
|
||||||
if (env2.initial)
|
if (env2.initial)
|
||||||
model7 = null;
|
model7 = null;
|
||||||
|
@ -9696,9 +9747,9 @@ function max2d(inputs, minScore) {
|
||||||
const reshaped = tf16.reshape(inputs, [height * width]);
|
const reshaped = tf16.reshape(inputs, [height * width]);
|
||||||
const newScore = tf16.max(reshaped, 0).dataSync()[0];
|
const newScore = tf16.max(reshaped, 0).dataSync()[0];
|
||||||
if (newScore > minScore) {
|
if (newScore > minScore) {
|
||||||
const coords4 = tf16.argMax(reshaped, 0);
|
const coordinates = tf16.argMax(reshaped, 0);
|
||||||
const x = mod(coords4, width).dataSync()[0];
|
const x = mod(coordinates, width).dataSync()[0];
|
||||||
const y = tf16.div(coords4, tf16.scalar(width, "int32")).dataSync()[0];
|
const y = tf16.div(coordinates, tf16.scalar(width, "int32")).dataSync()[0];
|
||||||
return [x, y, newScore];
|
return [x, y, newScore];
|
||||||
}
|
}
|
||||||
return [0, 0, newScore];
|
return [0, 0, newScore];
|
||||||
|
@ -9706,11 +9757,11 @@ function max2d(inputs, minScore) {
|
||||||
}
|
}
|
||||||
async function predict8(image24, config3) {
|
async function predict8(image24, config3) {
|
||||||
var _a;
|
var _a;
|
||||||
if (skipped5 < (((_a = config3.body) == null ? void 0 : _a.skipFrames) || 0) && config3.skipFrame && Object.keys(keypoints).length > 0) {
|
if (skipped6 < (((_a = config3.body) == null ? void 0 : _a.skipFrames) || 0) && config3.skipFrame && Object.keys(keypoints).length > 0) {
|
||||||
skipped5++;
|
skipped6++;
|
||||||
return [{ id: 0, score, box: box3, boxRaw, keypoints }];
|
return [{ id: 0, score, box: box3, boxRaw, keypoints, annotations: {} }];
|
||||||
}
|
}
|
||||||
skipped5 = 0;
|
skipped6 = 0;
|
||||||
return new Promise(async (resolve) => {
|
return new Promise(async (resolve) => {
|
||||||
var _a2;
|
var _a2;
|
||||||
const tensor3 = tf16.tidy(() => {
|
const tensor3 = tf16.tidy(() => {
|
||||||
|
@ -9736,7 +9787,7 @@ async function predict8(image24, config3) {
|
||||||
if (score > (((_a2 = config3.body) == null ? void 0 : _a2.minConfidence) || 0)) {
|
if (score > (((_a2 = config3.body) == null ? void 0 : _a2.minConfidence) || 0)) {
|
||||||
keypoints.push({
|
keypoints.push({
|
||||||
score: Math.round(100 * partScore) / 100,
|
score: Math.round(100 * partScore) / 100,
|
||||||
part: bodyParts[id],
|
part: kpt2[id],
|
||||||
positionRaw: [
|
positionRaw: [
|
||||||
x2 / model7.inputs[0].shape[2],
|
x2 / model7.inputs[0].shape[2],
|
||||||
y2 / model7.inputs[0].shape[1]
|
y2 / model7.inputs[0].shape[1]
|
||||||
|
@ -9767,18 +9818,59 @@ async function predict8(image24, config3) {
|
||||||
Math.max(...xRaw) - Math.min(...xRaw),
|
Math.max(...xRaw) - Math.min(...xRaw),
|
||||||
Math.max(...yRaw) - Math.min(...yRaw)
|
Math.max(...yRaw) - Math.min(...yRaw)
|
||||||
];
|
];
|
||||||
resolve([{ id: 0, score, box: box3, boxRaw, keypoints }]);
|
const annotations2 = {};
|
||||||
|
for (const [name, indexes] of Object.entries(connected2)) {
|
||||||
|
const pt = [];
|
||||||
|
for (let i = 0; i < indexes.length - 1; i++) {
|
||||||
|
const pt0 = keypoints.find((kpt4) => kpt4.part === indexes[i]);
|
||||||
|
const pt1 = keypoints.find((kpt4) => kpt4.part === indexes[i + 1]);
|
||||||
|
if (pt0 && pt1 && pt0.score > (config3.body.minConfidence || 0) && pt1.score > (config3.body.minConfidence || 0))
|
||||||
|
pt.push([pt0.position, pt1.position]);
|
||||||
|
}
|
||||||
|
annotations2[name] = pt;
|
||||||
|
}
|
||||||
|
resolve([{ id: 0, score, box: box3, boxRaw, keypoints, annotations: annotations2 }]);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
// src/body/movenet.ts
|
// src/body/movenet.ts
|
||||||
var tf17 = __toModule(require_tfjs_esm());
|
var tf17 = __toModule(require_tfjs_esm());
|
||||||
|
|
||||||
|
// src/body/movenetcoords.ts
|
||||||
|
var kpt3 = [
|
||||||
|
"nose",
|
||||||
|
"leftEye",
|
||||||
|
"rightEye",
|
||||||
|
"leftEar",
|
||||||
|
"rightEar",
|
||||||
|
"leftShoulder",
|
||||||
|
"rightShoulder",
|
||||||
|
"leftElbow",
|
||||||
|
"rightElbow",
|
||||||
|
"leftWrist",
|
||||||
|
"rightWrist",
|
||||||
|
"leftHip",
|
||||||
|
"rightHip",
|
||||||
|
"leftKnee",
|
||||||
|
"rightKnee",
|
||||||
|
"leftAnkle",
|
||||||
|
"rightAnkle"
|
||||||
|
];
|
||||||
|
var connected3 = {
|
||||||
|
leftLeg: ["leftHip", "leftKnee", "leftAnkle"],
|
||||||
|
rightLeg: ["rightHip", "rightKnee", "rightAnkle"],
|
||||||
|
torso: ["leftShoulder", "rightShoulder", "rightHip", "leftHip", "leftShoulder"],
|
||||||
|
leftArm: ["leftShoulder", "leftElbow", "leftWrist"],
|
||||||
|
rightArm: ["rightShoulder", "rightElbow", "rightWrist"],
|
||||||
|
head: []
|
||||||
|
};
|
||||||
|
|
||||||
|
// src/body/movenet.ts
|
||||||
var model8;
|
var model8;
|
||||||
var inputSize6 = 0;
|
var inputSize6 = 0;
|
||||||
var cachedBoxes = [];
|
var cachedBoxes = [];
|
||||||
var skipped6 = Number.MAX_SAFE_INTEGER;
|
var skipped7 = Number.MAX_SAFE_INTEGER;
|
||||||
var keypoints2 = [];
|
var keypoints2 = [];
|
||||||
var bodyParts2 = ["nose", "leftEye", "rightEye", "leftEar", "rightEar", "leftShoulder", "rightShoulder", "leftElbow", "rightElbow", "leftWrist", "rightWrist", "leftHip", "rightHip", "leftKnee", "rightKnee", "leftAnkle", "rightAnkle"];
|
|
||||||
async function load9(config3) {
|
async function load9(config3) {
|
||||||
if (env2.initial)
|
if (env2.initial)
|
||||||
model8 = null;
|
model8 = null;
|
||||||
|
@ -9816,19 +9908,19 @@ function createBox2(points) {
|
||||||
return [box4, boxRaw2];
|
return [box4, boxRaw2];
|
||||||
}
|
}
|
||||||
async function parseSinglePose(res, config3, image24, inputBox) {
|
async function parseSinglePose(res, config3, image24, inputBox) {
|
||||||
const kpt = res[0][0];
|
const kpt4 = res[0][0];
|
||||||
keypoints2.length = 0;
|
keypoints2.length = 0;
|
||||||
let score2 = 0;
|
let score2 = 0;
|
||||||
for (let id = 0; id < kpt.length; id++) {
|
for (let id = 0; id < kpt4.length; id++) {
|
||||||
score2 = kpt[id][2];
|
score2 = kpt4[id][2];
|
||||||
if (score2 > config3.body.minConfidence) {
|
if (score2 > config3.body.minConfidence) {
|
||||||
const positionRaw = [
|
const positionRaw = [
|
||||||
(inputBox[3] - inputBox[1]) * kpt[id][1] + inputBox[1],
|
(inputBox[3] - inputBox[1]) * kpt4[id][1] + inputBox[1],
|
||||||
(inputBox[2] - inputBox[0]) * kpt[id][0] + inputBox[0]
|
(inputBox[2] - inputBox[0]) * kpt4[id][0] + inputBox[0]
|
||||||
];
|
];
|
||||||
keypoints2.push({
|
keypoints2.push({
|
||||||
score: Math.round(100 * score2) / 100,
|
score: Math.round(100 * score2) / 100,
|
||||||
part: bodyParts2[id],
|
part: kpt3[id],
|
||||||
positionRaw,
|
positionRaw,
|
||||||
position: [
|
position: [
|
||||||
Math.round((image24.shape[2] || 0) * positionRaw[0]),
|
Math.round((image24.shape[2] || 0) * positionRaw[0]),
|
||||||
|
@ -9840,25 +9932,36 @@ async function parseSinglePose(res, config3, image24, inputBox) {
|
||||||
score2 = keypoints2.reduce((prev, curr) => curr.score > prev ? curr.score : prev, 0);
|
score2 = keypoints2.reduce((prev, curr) => curr.score > prev ? curr.score : prev, 0);
|
||||||
const bodies = [];
|
const bodies = [];
|
||||||
const [box4, boxRaw2] = createBox2(keypoints2);
|
const [box4, boxRaw2] = createBox2(keypoints2);
|
||||||
bodies.push({ id: 0, score: score2, box: box4, boxRaw: boxRaw2, keypoints: keypoints2 });
|
const annotations2 = {};
|
||||||
|
for (const [name, indexes] of Object.entries(connected3)) {
|
||||||
|
const pt = [];
|
||||||
|
for (let i = 0; i < indexes.length - 1; i++) {
|
||||||
|
const pt0 = keypoints2.find((kp) => kp.part === indexes[i]);
|
||||||
|
const pt1 = keypoints2.find((kp) => kp.part === indexes[i + 1]);
|
||||||
|
if (pt0 && pt1 && pt0.score > (config3.body.minConfidence || 0) && pt1.score > (config3.body.minConfidence || 0))
|
||||||
|
pt.push([pt0.position, pt1.position]);
|
||||||
|
}
|
||||||
|
annotations2[name] = pt;
|
||||||
|
}
|
||||||
|
bodies.push({ id: 0, score: score2, box: box4, boxRaw: boxRaw2, keypoints: keypoints2, annotations: annotations2 });
|
||||||
return bodies;
|
return bodies;
|
||||||
}
|
}
|
||||||
async function parseMultiPose(res, config3, image24, inputBox) {
|
async function parseMultiPose(res, config3, image24, inputBox) {
|
||||||
const bodies = [];
|
const bodies = [];
|
||||||
for (let id = 0; id < res[0].length; id++) {
|
for (let id = 0; id < res[0].length; id++) {
|
||||||
const kpt = res[0][id];
|
const kpt4 = res[0][id];
|
||||||
const totalScore = Math.round(100 * kpt[51 + 4]) / 100;
|
const totalScore = Math.round(100 * kpt4[51 + 4]) / 100;
|
||||||
if (totalScore > config3.body.minConfidence) {
|
if (totalScore > config3.body.minConfidence) {
|
||||||
keypoints2.length = 0;
|
keypoints2.length = 0;
|
||||||
for (let i = 0; i < 17; i++) {
|
for (let i = 0; i < 17; i++) {
|
||||||
const score2 = kpt[3 * i + 2];
|
const score2 = kpt4[3 * i + 2];
|
||||||
if (score2 > config3.body.minConfidence) {
|
if (score2 > config3.body.minConfidence) {
|
||||||
const positionRaw = [
|
const positionRaw = [
|
||||||
(inputBox[3] - inputBox[1]) * kpt[3 * i + 1] + inputBox[1],
|
(inputBox[3] - inputBox[1]) * kpt4[3 * i + 1] + inputBox[1],
|
||||||
(inputBox[2] - inputBox[0]) * kpt[3 * i + 0] + inputBox[0]
|
(inputBox[2] - inputBox[0]) * kpt4[3 * i + 0] + inputBox[0]
|
||||||
];
|
];
|
||||||
keypoints2.push({
|
keypoints2.push({
|
||||||
part: bodyParts2[i],
|
part: kpt3[i],
|
||||||
score: Math.round(100 * score2) / 100,
|
score: Math.round(100 * score2) / 100,
|
||||||
positionRaw,
|
positionRaw,
|
||||||
position: [
|
position: [
|
||||||
|
@ -9868,9 +9971,19 @@ async function parseMultiPose(res, config3, image24, inputBox) {
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
const boxRaw2 = [kpt[51 + 1], kpt[51 + 0], kpt[51 + 3] - kpt[51 + 1], kpt[51 + 2] - kpt[51 + 0]];
|
const [box4, boxRaw2] = createBox2(keypoints2);
|
||||||
const box4 = [Math.trunc(boxRaw2[0] * (image24.shape[2] || 0)), Math.trunc(boxRaw2[1] * (image24.shape[1] || 0)), Math.trunc(boxRaw2[2] * (image24.shape[2] || 0)), Math.trunc(boxRaw2[3] * (image24.shape[1] || 0))];
|
const annotations2 = {};
|
||||||
bodies.push({ id, score: totalScore, boxRaw: boxRaw2, box: box4, keypoints: [...keypoints2] });
|
for (const [name, indexes] of Object.entries(connected3)) {
|
||||||
|
const pt = [];
|
||||||
|
for (let i = 0; i < indexes.length - 1; i++) {
|
||||||
|
const pt0 = keypoints2.find((kp) => kp.part === indexes[i]);
|
||||||
|
const pt1 = keypoints2.find((kp) => kp.part === indexes[i + 1]);
|
||||||
|
if (pt0 && pt1 && pt0.score > (config3.body.minConfidence || 0) && pt1.score > (config3.body.minConfidence || 0))
|
||||||
|
pt.push([pt0.position, pt1.position]);
|
||||||
|
}
|
||||||
|
annotations2[name] = pt;
|
||||||
|
}
|
||||||
|
bodies.push({ id, score: totalScore, boxRaw: boxRaw2, box: box4, keypoints: [...keypoints2], annotations: annotations2 });
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
bodies.sort((a, b) => b.score - a.score);
|
bodies.sort((a, b) => b.score - a.score);
|
||||||
|
@ -9886,7 +9999,7 @@ async function predict9(input, config3) {
|
||||||
let bodies = [];
|
let bodies = [];
|
||||||
if (!config3.skipFrame)
|
if (!config3.skipFrame)
|
||||||
cachedBoxes.length = 0;
|
cachedBoxes.length = 0;
|
||||||
skipped6++;
|
skipped7++;
|
||||||
for (let i = 0; i < cachedBoxes.length; i++) {
|
for (let i = 0; i < cachedBoxes.length; i++) {
|
||||||
t.crop = tf17.image.cropAndResize(input, [cachedBoxes[i]], [0], [inputSize6, inputSize6], "bilinear");
|
t.crop = tf17.image.cropAndResize(input, [cachedBoxes[i]], [0], [inputSize6, inputSize6], "bilinear");
|
||||||
t.cast = tf17.cast(t.crop, "int32");
|
t.cast = tf17.cast(t.crop, "int32");
|
||||||
|
@ -9896,7 +10009,7 @@ async function predict9(input, config3) {
|
||||||
bodies = bodies.concat(newBodies);
|
bodies = bodies.concat(newBodies);
|
||||||
Object.keys(t).forEach((tensor3) => tf17.dispose(t[tensor3]));
|
Object.keys(t).forEach((tensor3) => tf17.dispose(t[tensor3]));
|
||||||
}
|
}
|
||||||
if (bodies.length !== config3.body.maxDetected && skipped6 > (config3.body.skipFrames || 0)) {
|
if (bodies.length !== config3.body.maxDetected && skipped7 > (config3.body.skipFrames || 0)) {
|
||||||
t.resized = tf17.image.resizeBilinear(input, [inputSize6, inputSize6], false);
|
t.resized = tf17.image.resizeBilinear(input, [inputSize6, inputSize6], false);
|
||||||
t.cast = tf17.cast(t.resized, "int32");
|
t.cast = tf17.cast(t.resized, "int32");
|
||||||
t.res = await (model8 == null ? void 0 : model8.predict(t.cast));
|
t.res = await (model8 == null ? void 0 : model8.predict(t.cast));
|
||||||
|
@ -9904,13 +10017,13 @@ async function predict9(input, config3) {
|
||||||
bodies = t.res.shape[2] === 17 ? await parseSinglePose(res, config3, input, [0, 0, 1, 1]) : await parseMultiPose(res, config3, input, [0, 0, 1, 1]);
|
bodies = t.res.shape[2] === 17 ? await parseSinglePose(res, config3, input, [0, 0, 1, 1]) : await parseMultiPose(res, config3, input, [0, 0, 1, 1]);
|
||||||
Object.keys(t).forEach((tensor3) => tf17.dispose(t[tensor3]));
|
Object.keys(t).forEach((tensor3) => tf17.dispose(t[tensor3]));
|
||||||
cachedBoxes.length = 0;
|
cachedBoxes.length = 0;
|
||||||
skipped6 = 0;
|
skipped7 = 0;
|
||||||
}
|
}
|
||||||
if (config3.skipFrame) {
|
if (config3.skipFrame) {
|
||||||
cachedBoxes.length = 0;
|
cachedBoxes.length = 0;
|
||||||
for (let i = 0; i < bodies.length; i++) {
|
for (let i = 0; i < bodies.length; i++) {
|
||||||
if (bodies[i].keypoints.length > 10) {
|
if (bodies[i].keypoints.length > 10) {
|
||||||
const kpts = bodies[i].keypoints.map((kpt) => kpt.position);
|
const kpts = bodies[i].keypoints.map((kpt4) => kpt4.position);
|
||||||
const newBox = scale(kpts, 1.5, [input.shape[2], input.shape[1]]);
|
const newBox = scale(kpts, 1.5, [input.shape[2], input.shape[1]]);
|
||||||
cachedBoxes.push([...newBox.yxBox]);
|
cachedBoxes.push([...newBox.yxBox]);
|
||||||
}
|
}
|
||||||
|
@ -10010,7 +10123,7 @@ var labels = [
|
||||||
// src/object/nanodet.ts
|
// src/object/nanodet.ts
|
||||||
var model9;
|
var model9;
|
||||||
var last3 = [];
|
var last3 = [];
|
||||||
var skipped7 = Number.MAX_SAFE_INTEGER;
|
var skipped8 = Number.MAX_SAFE_INTEGER;
|
||||||
var scaleBox = 2.5;
|
var scaleBox = 2.5;
|
||||||
async function load10(config3) {
|
async function load10(config3) {
|
||||||
if (!model9 || env2.initial) {
|
if (!model9 || env2.initial) {
|
||||||
|
@ -10089,15 +10202,15 @@ async function process3(res, inputSize8, outputShape, config3) {
|
||||||
return results;
|
return results;
|
||||||
}
|
}
|
||||||
async function predict10(image24, config3) {
|
async function predict10(image24, config3) {
|
||||||
if (skipped7 < (config3.object.skipFrames || 0) && config3.skipFrame && last3.length > 0) {
|
if (skipped8 < (config3.object.skipFrames || 0) && config3.skipFrame && last3.length > 0) {
|
||||||
skipped7++;
|
skipped8++;
|
||||||
return last3;
|
return last3;
|
||||||
}
|
}
|
||||||
skipped7 = 0;
|
skipped8 = 0;
|
||||||
if (!env2.kernels.includes("mod") || !env2.kernels.includes("sparsetodense"))
|
if (!env2.kernels.includes("mod") || !env2.kernels.includes("sparsetodense"))
|
||||||
return last3;
|
return last3;
|
||||||
return new Promise(async (resolve) => {
|
return new Promise(async (resolve) => {
|
||||||
const outputSize3 = [image24.shape[2], image24.shape[1]];
|
const outputSize2 = [image24.shape[2], image24.shape[1]];
|
||||||
const resize = tf18.image.resizeBilinear(image24, [model9.inputSize, model9.inputSize], false);
|
const resize = tf18.image.resizeBilinear(image24, [model9.inputSize, model9.inputSize], false);
|
||||||
const norm = tf18.div(resize, 255);
|
const norm = tf18.div(resize, 255);
|
||||||
const transpose = norm.transpose([0, 3, 1, 2]);
|
const transpose = norm.transpose([0, 3, 1, 2]);
|
||||||
|
@ -10107,7 +10220,7 @@ async function predict10(image24, config3) {
|
||||||
if (config3.object.enabled)
|
if (config3.object.enabled)
|
||||||
objectT = await model9.predict(transpose);
|
objectT = await model9.predict(transpose);
|
||||||
tf18.dispose(transpose);
|
tf18.dispose(transpose);
|
||||||
const obj = await process3(objectT, model9.inputSize, outputSize3, config3);
|
const obj = await process3(objectT, model9.inputSize, outputSize2, config3);
|
||||||
last3 = obj;
|
last3 = obj;
|
||||||
resolve(obj);
|
resolve(obj);
|
||||||
});
|
});
|
||||||
|
@ -10118,7 +10231,7 @@ var tf19 = __toModule(require_tfjs_esm());
|
||||||
var model10;
|
var model10;
|
||||||
var inputSize7 = 0;
|
var inputSize7 = 0;
|
||||||
var last4 = [];
|
var last4 = [];
|
||||||
var skipped8 = Number.MAX_SAFE_INTEGER;
|
var skipped9 = Number.MAX_SAFE_INTEGER;
|
||||||
async function load11(config3) {
|
async function load11(config3) {
|
||||||
if (env2.initial)
|
if (env2.initial)
|
||||||
model10 = null;
|
model10 = null;
|
||||||
|
@ -10182,19 +10295,19 @@ async function process4(res, outputShape, config3) {
|
||||||
return results;
|
return results;
|
||||||
}
|
}
|
||||||
async function predict11(input, config3) {
|
async function predict11(input, config3) {
|
||||||
if (skipped8 < (config3.object.skipFrames || 0) && config3.skipFrame && last4.length > 0) {
|
if (skipped9 < (config3.object.skipFrames || 0) && config3.skipFrame && last4.length > 0) {
|
||||||
skipped8++;
|
skipped9++;
|
||||||
return last4;
|
return last4;
|
||||||
}
|
}
|
||||||
skipped8 = 0;
|
skipped9 = 0;
|
||||||
if (!env2.kernels.includes("mod") || !env2.kernels.includes("sparsetodense"))
|
if (!env2.kernels.includes("mod") || !env2.kernels.includes("sparsetodense"))
|
||||||
return last4;
|
return last4;
|
||||||
return new Promise(async (resolve) => {
|
return new Promise(async (resolve) => {
|
||||||
const outputSize3 = [input.shape[2], input.shape[1]];
|
const outputSize2 = [input.shape[2], input.shape[1]];
|
||||||
const resize = tf19.image.resizeBilinear(input, [inputSize7, inputSize7]);
|
const resize = tf19.image.resizeBilinear(input, [inputSize7, inputSize7]);
|
||||||
const objectT = config3.object.enabled ? model10 == null ? void 0 : model10.execute(resize, ["tower_0/detections"]) : null;
|
const objectT = config3.object.enabled ? model10 == null ? void 0 : model10.execute(resize, ["tower_0/detections"]) : null;
|
||||||
tf19.dispose(resize);
|
tf19.dispose(resize);
|
||||||
const obj = await process4(objectT, outputSize3, config3);
|
const obj = await process4(objectT, outputSize2, config3);
|
||||||
last4 = obj;
|
last4 = obj;
|
||||||
resolve(obj);
|
resolve(obj);
|
||||||
});
|
});
|
||||||
|
@ -10287,7 +10400,7 @@ async function process5(input, background, config3) {
|
||||||
// src/gear/gear-agegenderrace.ts
|
// src/gear/gear-agegenderrace.ts
|
||||||
var tf21 = __toModule(require_tfjs_esm());
|
var tf21 = __toModule(require_tfjs_esm());
|
||||||
var model12;
|
var model12;
|
||||||
var skipped9 = Number.MAX_SAFE_INTEGER;
|
var skipped10 = Number.MAX_SAFE_INTEGER;
|
||||||
async function load13(config3) {
|
async function load13(config3) {
|
||||||
if (env2.initial)
|
if (env2.initial)
|
||||||
model12 = null;
|
model12 = null;
|
||||||
|
@ -10467,7 +10580,6 @@ async function register(instance) {
|
||||||
log("error: humangl:", e.type);
|
log("error: humangl:", e.type);
|
||||||
log("possible browser memory leak using webgl");
|
log("possible browser memory leak using webgl");
|
||||||
instance.emit("error");
|
instance.emit("error");
|
||||||
throw new Error("browser webgl error");
|
|
||||||
});
|
});
|
||||||
config2.canvas.addEventListener("webglcontextrestored", (e) => {
|
config2.canvas.addEventListener("webglcontextrestored", (e) => {
|
||||||
log("error: humangl context restored:", e);
|
log("error: humangl context restored:", e);
|
||||||
|
@ -10603,10 +10715,8 @@ async function check(instance, force = false) {
|
||||||
log(`gl version:${gl.getParameter(gl.VERSION)} renderer:${gl.getParameter(gl.RENDERER)}`);
|
log(`gl version:${gl.getParameter(gl.VERSION)} renderer:${gl.getParameter(gl.RENDERER)}`);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (tf23.getBackend() === "humangl") {
|
if (tf23.getBackend() === "webgpu") {
|
||||||
tf23.ENV.set("WEBGPU_USE_GLSL", true);
|
tf23.ENV.set("WEBGPU_USE_GLSL", true);
|
||||||
tf23.ENV.set("WEBGL_PACK_DEPTHWISECONV", false);
|
|
||||||
tf23.ENV.set("WEBGL_USE_SHAPES_UNIFORMS", true);
|
|
||||||
}
|
}
|
||||||
tf23.enableProdMode();
|
tf23.enableProdMode();
|
||||||
await tf23.ready();
|
await tf23.ready();
|
||||||
|
@ -10878,109 +10988,24 @@ async function body(inCanvas2, result, drawOptions) {
|
||||||
ctx.fillText(`body ${100 * result[i].score}%`, result[i].box[0] + 2, 0 + result[i].box[1] + localOptions.lineHeight, result[i].box[2]);
|
ctx.fillText(`body ${100 * result[i].score}%`, result[i].box[0] + 2, 0 + result[i].box[1] + localOptions.lineHeight, result[i].box[2]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (localOptions.drawPoints) {
|
if (localOptions.drawPoints && result[i].keypoints) {
|
||||||
for (let pt = 0; pt < result[i].keypoints.length; pt++) {
|
for (let pt = 0; pt < result[i].keypoints.length; pt++) {
|
||||||
ctx.fillStyle = localOptions.useDepth && result[i].keypoints[pt].position[2] ? `rgba(${127.5 + 2 * (result[i].keypoints[pt].position[2] || 0)}, ${127.5 - 2 * (result[i].keypoints[pt].position[2] || 0)}, 255, 0.5)` : localOptions.color;
|
ctx.fillStyle = localOptions.useDepth && result[i].keypoints[pt].position[2] ? `rgba(${127.5 + 2 * (result[i].keypoints[pt].position[2] || 0)}, ${127.5 - 2 * (result[i].keypoints[pt].position[2] || 0)}, 255, 0.5)` : localOptions.color;
|
||||||
point(ctx, result[i].keypoints[pt].position[0], result[i].keypoints[pt].position[1], 0, localOptions);
|
point(ctx, result[i].keypoints[pt].position[0], result[i].keypoints[pt].position[1], 0, localOptions);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (localOptions.drawLabels) {
|
if (localOptions.drawLabels && result[i].keypoints) {
|
||||||
ctx.font = localOptions.font;
|
ctx.font = localOptions.font;
|
||||||
if (result[i].keypoints) {
|
for (const pt of result[i].keypoints) {
|
||||||
for (const pt of result[i].keypoints) {
|
ctx.fillStyle = localOptions.useDepth && pt.position[2] ? `rgba(${127.5 + 2 * pt.position[2]}, ${127.5 - 2 * pt.position[2]}, 255, 0.5)` : localOptions.color;
|
||||||
ctx.fillStyle = localOptions.useDepth && pt.position[2] ? `rgba(${127.5 + 2 * pt.position[2]}, ${127.5 - 2 * pt.position[2]}, 255, 0.5)` : localOptions.color;
|
ctx.fillText(`${pt.part} ${Math.trunc(100 * pt.score)}%`, pt.position[0] + 4, pt.position[1] + 4);
|
||||||
ctx.fillText(`${pt.part} ${Math.trunc(100 * pt.score)}%`, pt.position[0] + 4, pt.position[1] + 4);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (localOptions.drawPolygons && result[i].keypoints) {
|
if (localOptions.drawPolygons && result[i].keypoints && result[i].annotations) {
|
||||||
let part;
|
for (const part of Object.values(result[i].annotations)) {
|
||||||
const points = [];
|
for (const connected4 of part)
|
||||||
points.length = 0;
|
curves(ctx, connected4, localOptions);
|
||||||
part = result[i].keypoints.find((a) => a.part === "leftShoulder");
|
}
|
||||||
if (part)
|
|
||||||
points.push([part.position[0], part.position[1]]);
|
|
||||||
part = result[i].keypoints.find((a) => a.part === "rightShoulder");
|
|
||||||
if (part)
|
|
||||||
points.push([part.position[0], part.position[1]]);
|
|
||||||
curves(ctx, points, localOptions);
|
|
||||||
points.length = 0;
|
|
||||||
part = result[i].keypoints.find((a) => a.part === "rightShoulder");
|
|
||||||
if (part)
|
|
||||||
points.push([part.position[0], part.position[1]]);
|
|
||||||
part = result[i].keypoints.find((a) => a.part === "rightHip");
|
|
||||||
if (part)
|
|
||||||
points.push([part.position[0], part.position[1]]);
|
|
||||||
part = result[i].keypoints.find((a) => a.part === "leftHip");
|
|
||||||
if (part)
|
|
||||||
points.push([part.position[0], part.position[1]]);
|
|
||||||
part = result[i].keypoints.find((a) => a.part === "leftShoulder");
|
|
||||||
if (part)
|
|
||||||
points.push([part.position[0], part.position[1]]);
|
|
||||||
if (points.length === 4)
|
|
||||||
lines(ctx, points, localOptions);
|
|
||||||
points.length = 0;
|
|
||||||
part = result[i].keypoints.find((a) => a.part === "leftHip");
|
|
||||||
if (part)
|
|
||||||
points.push([part.position[0], part.position[1]]);
|
|
||||||
part = result[i].keypoints.find((a) => a.part === "leftKnee");
|
|
||||||
if (part)
|
|
||||||
points.push([part.position[0], part.position[1]]);
|
|
||||||
part = result[i].keypoints.find((a) => a.part === "leftAnkle");
|
|
||||||
if (part)
|
|
||||||
points.push([part.position[0], part.position[1]]);
|
|
||||||
part = result[i].keypoints.find((a) => a.part === "leftHeel");
|
|
||||||
if (part)
|
|
||||||
points.push([part.position[0], part.position[1]]);
|
|
||||||
part = result[i].keypoints.find((a) => a.part === "leftFoot");
|
|
||||||
if (part)
|
|
||||||
points.push([part.position[0], part.position[1]]);
|
|
||||||
curves(ctx, points, localOptions);
|
|
||||||
points.length = 0;
|
|
||||||
part = result[i].keypoints.find((a) => a.part === "rightHip");
|
|
||||||
if (part)
|
|
||||||
points.push([part.position[0], part.position[1]]);
|
|
||||||
part = result[i].keypoints.find((a) => a.part === "rightKnee");
|
|
||||||
if (part)
|
|
||||||
points.push([part.position[0], part.position[1]]);
|
|
||||||
part = result[i].keypoints.find((a) => a.part === "rightAnkle");
|
|
||||||
if (part)
|
|
||||||
points.push([part.position[0], part.position[1]]);
|
|
||||||
part = result[i].keypoints.find((a) => a.part === "rightHeel");
|
|
||||||
if (part)
|
|
||||||
points.push([part.position[0], part.position[1]]);
|
|
||||||
part = result[i].keypoints.find((a) => a.part === "rightFoot");
|
|
||||||
if (part)
|
|
||||||
points.push([part.position[0], part.position[1]]);
|
|
||||||
curves(ctx, points, localOptions);
|
|
||||||
points.length = 0;
|
|
||||||
part = result[i].keypoints.find((a) => a.part === "leftShoulder");
|
|
||||||
if (part)
|
|
||||||
points.push([part.position[0], part.position[1]]);
|
|
||||||
part = result[i].keypoints.find((a) => a.part === "leftElbow");
|
|
||||||
if (part)
|
|
||||||
points.push([part.position[0], part.position[1]]);
|
|
||||||
part = result[i].keypoints.find((a) => a.part === "leftWrist");
|
|
||||||
if (part)
|
|
||||||
points.push([part.position[0], part.position[1]]);
|
|
||||||
part = result[i].keypoints.find((a) => a.part === "leftPalm");
|
|
||||||
if (part)
|
|
||||||
points.push([part.position[0], part.position[1]]);
|
|
||||||
curves(ctx, points, localOptions);
|
|
||||||
points.length = 0;
|
|
||||||
part = result[i].keypoints.find((a) => a.part === "rightShoulder");
|
|
||||||
if (part)
|
|
||||||
points.push([part.position[0], part.position[1]]);
|
|
||||||
part = result[i].keypoints.find((a) => a.part === "rightElbow");
|
|
||||||
if (part)
|
|
||||||
points.push([part.position[0], part.position[1]]);
|
|
||||||
part = result[i].keypoints.find((a) => a.part === "rightWrist");
|
|
||||||
if (part)
|
|
||||||
points.push([part.position[0], part.position[1]]);
|
|
||||||
part = result[i].keypoints.find((a) => a.part === "rightPalm");
|
|
||||||
if (part)
|
|
||||||
points.push([part.position[0], part.position[1]]);
|
|
||||||
curves(ctx, points, localOptions);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -11473,15 +11498,15 @@ function calc(newResult) {
|
||||||
if (bufferedResult.hand[i].keypoints.length !== newResult.hand[i].keypoints.length)
|
if (bufferedResult.hand[i].keypoints.length !== newResult.hand[i].keypoints.length)
|
||||||
bufferedResult.hand[i].keypoints = newResult.hand[i].keypoints;
|
bufferedResult.hand[i].keypoints = newResult.hand[i].keypoints;
|
||||||
const keypoints3 = newResult.hand[i].keypoints && newResult.hand[i].keypoints.length > 0 ? newResult.hand[i].keypoints.map((landmark, j) => landmark.map((coord, k) => ((bufferedFactor - 1) * (bufferedResult.hand[i].keypoints[j][k] || 1) + (coord || 0)) / bufferedFactor)) : [];
|
const keypoints3 = newResult.hand[i].keypoints && newResult.hand[i].keypoints.length > 0 ? newResult.hand[i].keypoints.map((landmark, j) => landmark.map((coord, k) => ((bufferedFactor - 1) * (bufferedResult.hand[i].keypoints[j][k] || 1) + (coord || 0)) / bufferedFactor)) : [];
|
||||||
const annotations3 = {};
|
const annotations2 = {};
|
||||||
if (Object.keys(bufferedResult.hand[i].annotations).length !== Object.keys(newResult.hand[i].annotations).length)
|
if (Object.keys(bufferedResult.hand[i].annotations).length !== Object.keys(newResult.hand[i].annotations).length)
|
||||||
bufferedResult.hand[i].annotations = newResult.hand[i].annotations;
|
bufferedResult.hand[i].annotations = newResult.hand[i].annotations;
|
||||||
if (newResult.hand[i].annotations) {
|
if (newResult.hand[i].annotations) {
|
||||||
for (const key of Object.keys(newResult.hand[i].annotations)) {
|
for (const key of Object.keys(newResult.hand[i].annotations)) {
|
||||||
annotations3[key] = newResult.hand[i].annotations[key] && newResult.hand[i].annotations[key][0] ? newResult.hand[i].annotations[key].map((val, j) => val.map((coord, k) => ((bufferedFactor - 1) * bufferedResult.hand[i].annotations[key][j][k] + coord) / bufferedFactor)) : null;
|
annotations2[key] = newResult.hand[i].annotations[key] && newResult.hand[i].annotations[key][0] ? newResult.hand[i].annotations[key].map((val, j) => val.map((coord, k) => ((bufferedFactor - 1) * bufferedResult.hand[i].annotations[key][j][k] + coord) / bufferedFactor)) : null;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
bufferedResult.hand[i] = { ...newResult.hand[i], box: box4, boxRaw: boxRaw2, keypoints: keypoints3, annotations: annotations3 };
|
bufferedResult.hand[i] = { ...newResult.hand[i], box: box4, boxRaw: boxRaw2, keypoints: keypoints3, annotations: annotations2 };
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (!bufferedResult.face || newResult.face.length !== bufferedResult.face.length) {
|
if (!bufferedResult.face || newResult.face.length !== bufferedResult.face.length) {
|
||||||
|
|
|
@ -37,7 +37,7 @@ export const full = [
|
||||||
'rightHeel',
|
'rightHeel',
|
||||||
'leftFoot',
|
'leftFoot',
|
||||||
'rightFoot',
|
'rightFoot',
|
||||||
'midHip',
|
'bodyCenter',
|
||||||
'forehead',
|
'forehead',
|
||||||
'leftThumb',
|
'leftThumb',
|
||||||
'leftHand',
|
'leftHand',
|
||||||
|
|
|
@ -1,73 +0,0 @@
|
||||||
/**
|
|
||||||
* BlazePose model implementation
|
|
||||||
*
|
|
||||||
* Based on : [**BlazePose**](https://drive.google.com/file/d/10IU-DRP2ioSNjKFdiGbmmQX81xAYj88s/view)
|
|
||||||
*/
|
|
||||||
|
|
||||||
import { log, join } from '../util/util';
|
|
||||||
import * as tf from '../../dist/tfjs.esm.js';
|
|
||||||
import * as annotations from './annotations';
|
|
||||||
import type { Tensor, GraphModel } from '../tfjs/types';
|
|
||||||
import type { BodyResult, Box, Point } from '../result';
|
|
||||||
import type { Config } from '../config';
|
|
||||||
import { env } from '../util/env';
|
|
||||||
|
|
||||||
let model: GraphModel | null;
|
|
||||||
|
|
||||||
export async function load(config: Config): Promise<GraphModel> {
|
|
||||||
if (env.initial) model = null;
|
|
||||||
if (!model) {
|
|
||||||
model = await tf.loadGraphModel(join(config.modelBasePath, config.body.modelPath || '')) as unknown as GraphModel;
|
|
||||||
model['width'] = parseInt(model['signature'].inputs['input_1:0'].tensorShape.dim[2].size);
|
|
||||||
model['height'] = parseInt(model['signature'].inputs['input_1:0'].tensorShape.dim[1].size);
|
|
||||||
if (!model || !model['modelUrl']) log('load model failed:', config.body.modelPath);
|
|
||||||
else if (config.debug) log('load model:', model['modelUrl']);
|
|
||||||
} else if (config.debug) log('cached model:', model['modelUrl']);
|
|
||||||
return model;
|
|
||||||
}
|
|
||||||
|
|
||||||
export async function predict(image: Tensor, config: Config): Promise<BodyResult[]> {
|
|
||||||
if (!model) return [];
|
|
||||||
if (!config.body.enabled) return [];
|
|
||||||
const imgSize = { width: (image.shape[2] || 0), height: (image.shape[1] || 0) };
|
|
||||||
const resize = tf.image.resizeBilinear(image, [model['width'], model['height']], false);
|
|
||||||
const normalize = tf.div(resize, [255.0]);
|
|
||||||
tf.dispose(resize);
|
|
||||||
const resT = await model.predict(normalize) as Array<Tensor>;
|
|
||||||
const findT = resT.find((t) => (t.size === 195 || t.size === 155));
|
|
||||||
const points = await findT?.data() || []; // order of output tensors may change between models, full has 195 and upper has 155 items
|
|
||||||
resT.forEach((t) => tf.dispose(t));
|
|
||||||
tf.dispose(normalize);
|
|
||||||
const keypoints: Array<{ id, part, position: Point, positionRaw: Point, score, presence }> = [];
|
|
||||||
const labels = points?.length === 195 ? annotations.full : annotations.upper; // full model has 39 keypoints, upper has 31 keypoints
|
|
||||||
const depth = 5; // each points has x,y,z,visibility,presence
|
|
||||||
for (let i = 0; i < points.length / depth; i++) {
|
|
||||||
keypoints.push({
|
|
||||||
id: i,
|
|
||||||
part: labels[i],
|
|
||||||
position: [
|
|
||||||
Math.trunc(imgSize.width * points[depth * i + 0] / 255), // return normalized x value istead of 0..255
|
|
||||||
Math.trunc(imgSize.height * points[depth * i + 1] / 255), // return normalized y value istead of 0..255
|
|
||||||
Math.trunc(points[depth * i + 2]) + 0, // fix negative zero
|
|
||||||
],
|
|
||||||
positionRaw: [
|
|
||||||
points[depth * i + 0] / 255, // return x value normalized to 0..1
|
|
||||||
points[depth * i + 1] / 255, // return y value normalized to 0..1
|
|
||||||
points[depth * i + 2] + 0, // fix negative zero
|
|
||||||
],
|
|
||||||
score: (100 - Math.trunc(100 / (1 + Math.exp(points[depth * i + 3])))) / 100, // reverse sigmoid value
|
|
||||||
presence: (100 - Math.trunc(100 / (1 + Math.exp(points[depth * i + 4])))) / 100, // reverse sigmoid value
|
|
||||||
});
|
|
||||||
}
|
|
||||||
const x = keypoints.map((a) => a.position[0]);
|
|
||||||
const y = keypoints.map((a) => a.position[1]);
|
|
||||||
const box: Box = [
|
|
||||||
Math.min(...x),
|
|
||||||
Math.min(...y),
|
|
||||||
Math.max(...x) - Math.min(...x),
|
|
||||||
Math.max(...y) - Math.min(...x),
|
|
||||||
];
|
|
||||||
const boxRaw: Box = [0, 0, 0, 0]; // not yet implemented
|
|
||||||
const score = keypoints.reduce((prev, curr) => (curr.score > prev ? curr.score : prev), 0);
|
|
||||||
return [{ id: 0, score, box, boxRaw, keypoints }];
|
|
||||||
}
|
|
|
@ -1,60 +1,33 @@
|
||||||
/**
|
/**
|
||||||
* BlazePose model implementation
|
* BlazePose model implementation
|
||||||
*
|
|
||||||
* Based on : [**BlazePose**](https://github.com/google/mediapipe/blob/master/mediapipe/modules/pose_detection)
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
import * as tf from '@tensorflow/tfjs';
|
||||||
import { log, join } from '../util/util';
|
import { log, join } from '../util/util';
|
||||||
import * as tf from '../../dist/tfjs.esm.js';
|
import type { BodyKeypoint, BodyResult, Box, Point } from '../result';
|
||||||
import type { BodyResult, Box, Point } from '../result';
|
|
||||||
import type { GraphModel, Tensor } from '../tfjs/types';
|
import type { GraphModel, Tensor } from '../tfjs/types';
|
||||||
import type { Config } from '../config';
|
import type { Config } from '../config';
|
||||||
import { env } from '../util/env';
|
import * as coords from './blazeposecoords';
|
||||||
import * as annotations from './annotations';
|
|
||||||
|
|
||||||
// const boxScaleFact = 1.5; // hand finger model prefers slighly larger box
|
const env = { initial: true };
|
||||||
const models: [GraphModel | null, GraphModel | null] = [null, null];
|
const models: [GraphModel | null, GraphModel | null] = [null, null];
|
||||||
const outputNodes = ['ld_3d', 'activation_segmentation', 'activation_heatmap', 'world_3d', 'output_poseflag'];
|
|
||||||
|
|
||||||
const inputSize = [[0, 0], [0, 0]];
|
const inputSize = [[0, 0], [0, 0]];
|
||||||
|
let skipped = Number.MAX_SAFE_INTEGER;
|
||||||
// let skipped = 0;
|
let outputNodes: string[]; // different for lite/full/heavy
|
||||||
let outputSize: [number, number] = [0, 0];
|
let cache: BodyResult | null = null;
|
||||||
|
let padding: [number, number][] = [[0, 0], [0, 0], [0, 0], [0, 0]];
|
||||||
type Keypoints = { score: number, part: string, position: Point, positionRaw: Point };
|
|
||||||
|
|
||||||
/*
|
|
||||||
type BodyDetectResult = {
|
|
||||||
id: number,
|
|
||||||
score: number,
|
|
||||||
box: Box,
|
|
||||||
boxRaw: Box,
|
|
||||||
label: string,
|
|
||||||
yxBox: Box,
|
|
||||||
}
|
|
||||||
|
|
||||||
const cache: {
|
|
||||||
bodyBoxes: Array<BodyDetectResult>,
|
|
||||||
partBoxes: Array<BodyDetectResult>
|
|
||||||
tmpBoxes: Array<BodyDetectResult>
|
|
||||||
} = {
|
|
||||||
bodyBoxes: [],
|
|
||||||
partBoxes: [],
|
|
||||||
tmpBoxes: [],
|
|
||||||
};
|
|
||||||
*/
|
|
||||||
|
|
||||||
export async function loadDetect(config: Config): Promise<GraphModel> {
|
export async function loadDetect(config: Config): Promise<GraphModel> {
|
||||||
if (env.initial) models[0] = null;
|
if (env.initial) models[0] = null;
|
||||||
if (!models[0]) {
|
if (!models[0] && config.body.detector?.modelPath || '') {
|
||||||
models[0] = await tf.loadGraphModel(join(config.modelBasePath, config.body.detector?.modelPath || '')) as unknown as GraphModel;
|
models[0] = await tf.loadGraphModel(join(config.modelBasePath, config.body.detector?.modelPath || '')) as unknown as GraphModel;
|
||||||
const inputs = Object.values(models[0].modelSignature['inputs']);
|
const inputs = Object.values(models[0].modelSignature['inputs']);
|
||||||
inputSize[0][0] = Array.isArray(inputs) ? parseInt(inputs[0].tensorShape.dim[1].size) : 0;
|
inputSize[0][0] = Array.isArray(inputs) ? parseInt(inputs[0].tensorShape.dim[1].size) : 0;
|
||||||
inputSize[0][1] = Array.isArray(inputs) ? parseInt(inputs[0].tensorShape.dim[2].size) : 0;
|
inputSize[0][1] = Array.isArray(inputs) ? parseInt(inputs[0].tensorShape.dim[2].size) : 0;
|
||||||
if (!models[0] || !models[0]['modelUrl']) log('load model failed:', config.object.modelPath);
|
if (!models[0] || !models[0]['modelUrl']) log('load model failed:', config.object.modelPath);
|
||||||
else if (config.debug) log('load model:', models[0]['modelUrl']);
|
else if (config.debug) log('load model:', models[0]['modelUrl']);
|
||||||
} else if (config.debug) log('cached model:', models[0]['modelUrl']);
|
} else if (config.debug && models[0]) log('cached model:', models[0]['modelUrl']);
|
||||||
return models[0];
|
return models[0] as GraphModel;
|
||||||
}
|
}
|
||||||
|
|
||||||
export async function loadPose(config: Config): Promise<GraphModel> {
|
export async function loadPose(config: Config): Promise<GraphModel> {
|
||||||
|
@ -64,6 +37,8 @@ export async function loadPose(config: Config): Promise<GraphModel> {
|
||||||
const inputs = Object.values(models[1].modelSignature['inputs']);
|
const inputs = Object.values(models[1].modelSignature['inputs']);
|
||||||
inputSize[1][0] = Array.isArray(inputs) ? parseInt(inputs[0].tensorShape.dim[1].size) : 0;
|
inputSize[1][0] = Array.isArray(inputs) ? parseInt(inputs[0].tensorShape.dim[1].size) : 0;
|
||||||
inputSize[1][1] = Array.isArray(inputs) ? parseInt(inputs[0].tensorShape.dim[2].size) : 0;
|
inputSize[1][1] = Array.isArray(inputs) ? parseInt(inputs[0].tensorShape.dim[2].size) : 0;
|
||||||
|
if (config.body.modelPath?.includes('lite')) outputNodes = ['ld_3d', 'output_segmentation', 'output_heatmap', 'world_3d', 'output_poseflag'];
|
||||||
|
else outputNodes = ['Identity', 'Identity_2', 'Identity_3', 'Identity_4', 'Identity_1']; // v2 from pinto full and heavy
|
||||||
if (!models[1] || !models[1]['modelUrl']) log('load model failed:', config.object.modelPath);
|
if (!models[1] || !models[1]['modelUrl']) log('load model failed:', config.object.modelPath);
|
||||||
else if (config.debug) log('load model:', models[1]['modelUrl']);
|
else if (config.debug) log('load model:', models[1]['modelUrl']);
|
||||||
} else if (config.debug) log('cached model:', models[1]['modelUrl']);
|
} else if (config.debug) log('cached model:', models[1]['modelUrl']);
|
||||||
|
@ -76,86 +51,104 @@ export async function load(config: Config): Promise<[GraphModel | null, GraphMod
|
||||||
return models;
|
return models;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
function calculateBoxes(keypoints: Array<BodyKeypoint>, outputSize: [number, number]): { keypointsBox: Box, keypointsBoxRaw: Box } {
|
||||||
async function detectBody(input: Tensor, config: Config): Promise<BodyDetectResult[]> {
|
|
||||||
if ((config.body.detector?.modelPath.length || 0) > 0 && models[0]) {
|
|
||||||
const t: Record<string, Tensor> = {};
|
|
||||||
t.resize = tf.image.resizeBilinear(input, [inputSize[0][0], inputSize[0][1]]);
|
|
||||||
t.res = await models[0]?.predict(t.resize) as Tensor; // [1,2254,13]
|
|
||||||
t.logits = tf.slice(t.res, [0, 0, 0], [1, -1, 1]);
|
|
||||||
t.sigmoid = tf.sigmoid(t.logits);
|
|
||||||
t.rawBoxes = tf.slice(t.res, [0, 0, 1], [1, -1, -1]);
|
|
||||||
t.packedBoxes = tf.squeeze(t.rawBoxes); // [2254,12]
|
|
||||||
t.scores = tf.squeeze(t.sigmoid); // [2254,1]
|
|
||||||
// boxes need to be decoded based on anchors
|
|
||||||
Object.keys(t).forEach((tensor) => tf.dispose(t[tensor]));
|
|
||||||
}
|
|
||||||
return [];
|
|
||||||
}
|
|
||||||
*/
|
|
||||||
|
|
||||||
async function detectParts(input: Tensor, config: Config): Promise<BodyResult> {
|
|
||||||
const t: Record<string, Tensor> = {};
|
|
||||||
t.resize = tf.image.resizeBilinear(input, [inputSize[1][0], inputSize[1][1]]);
|
|
||||||
[t.ld/* 1,195 */, t.segmentation/* 1,256,256,1 */, t.heatmap/* 1,64,64,39 */, t.world/* 1,117 */, t.poseflag/* 1,1 */] = await models[1]?.execute(t.resize, outputNodes) as Tensor[]; // [1,2254,13]
|
|
||||||
const points = await t.ld.data();
|
|
||||||
const keypoints: Array<Keypoints> = [];
|
|
||||||
const labels = points?.length === 195 ? annotations.full : annotations.upper; // full model has 39 keypoints, upper has 31 keypoints
|
|
||||||
const depth = 5; // each points has x,y,z,visibility,presence
|
|
||||||
for (let i = 0; i < points.length / depth; i++) {
|
|
||||||
const score = (100 - Math.trunc(100 / (1 + Math.exp(points[depth * i + 3])))) / 100; // reverse sigmoid value
|
|
||||||
// const presence = (100 - Math.trunc(100 / (1 + Math.exp(points[depth * i + 4])))) / 100; // reverse sigmoid value
|
|
||||||
if (score > (config.body.minConfidence || 0)) {
|
|
||||||
keypoints.push({
|
|
||||||
part: labels[i],
|
|
||||||
position: [
|
|
||||||
Math.trunc(outputSize[0] * points[depth * i + 0] / 255), // return normalized x value istead of 0..255
|
|
||||||
Math.trunc(outputSize[1] * points[depth * i + 1] / 255), // return normalized y value istead of 0..255
|
|
||||||
Math.trunc(points[depth * i + 2]) + 0, // fix negative zero
|
|
||||||
],
|
|
||||||
positionRaw: [
|
|
||||||
points[depth * i + 0] / 255, // return x value normalized to 0..1
|
|
||||||
points[depth * i + 1] / 255, // return y value normalized to 0..1
|
|
||||||
points[depth * i + 2] + 0, // fix negative zero
|
|
||||||
],
|
|
||||||
score,
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
|
||||||
const x = keypoints.map((a) => a.position[0]);
|
const x = keypoints.map((a) => a.position[0]);
|
||||||
const y = keypoints.map((a) => a.position[1]);
|
const y = keypoints.map((a) => a.position[1]);
|
||||||
const box: Box = [
|
const keypointsBox: Box = [Math.min(...x), Math.min(...y), Math.max(...x) - Math.min(...x), Math.max(...y) - Math.min(...y)];
|
||||||
Math.min(...x),
|
const keypointsBoxRaw: Box = [keypointsBox[0] / outputSize[0], keypointsBox[1] / outputSize[1], keypointsBox[2] / outputSize[0], keypointsBox[3] / outputSize[1]];
|
||||||
Math.min(...y),
|
/*
|
||||||
Math.max(...x) - Math.min(...x),
|
const leftShoulder = keypoints.find((kpt) => kpt.part === 'leftShoulder');
|
||||||
Math.max(...y) - Math.min(...x),
|
const rightShoulder = keypoints.find((kpt) => kpt.part === 'rightShoulder');
|
||||||
|
if (!leftShoulder || !rightShoulder || !config.skipFrame) { // reset cache box coords
|
||||||
|
cache.box = [0, 0, 1, 1];
|
||||||
|
cache.boxRaw = cache.box;
|
||||||
|
} else { // recalculate cache box coords
|
||||||
|
const size = [leftShoulder.position[0] - rightShoulder.position[0], leftShoulder.position[1] - rightShoulder.position[1]];
|
||||||
|
const shoulderWidth = Math.sqrt((size[0] * size[0]) + (size[1] * size[1])); // distance between left and right shoulder
|
||||||
|
const shoulderCenter: Point = [(leftShoulder.position[0] + rightShoulder.position[0]) / 2, (leftShoulder.position[1] + rightShoulder.position[1]) / 2]; // center point between left and right shoulder
|
||||||
|
const bodyCenter: Point = [shoulderCenter[0], shoulderCenter[0] + (shoulderWidth), 0]; // approximate center of the body
|
||||||
|
const bodyCenterRaw: Point = [bodyCenter[0] / outputSize[0], bodyCenter[1] / outputSize[1], 0];
|
||||||
|
const bodyCenterKpt: Keypoint = { part: 'bodyCenter', positionRaw: bodyCenterRaw, position: bodyCenter, score: 1 }; // add virtual keypoint
|
||||||
|
keypoints.push(bodyCenterKpt);
|
||||||
|
const scaleFact = 2.5;
|
||||||
|
cache.box = [Math.trunc(bodyCenter[0] - (scaleFact * shoulderWidth)), Math.trunc(bodyCenter[1] - (scaleFact * shoulderWidth)), Math.trunc(2 * scaleFact * shoulderWidth), Math.trunc(2 * scaleFact * shoulderWidth)];
|
||||||
|
cache.boxRaw = [cache.box[0] / outputSize[0], cache.box[1] / outputSize[1], cache.box[2] / outputSize[0], cache.box[3] / outputSize[1]];
|
||||||
|
}
|
||||||
|
*/
|
||||||
|
return { keypointsBox, keypointsBoxRaw };
|
||||||
|
}
|
||||||
|
|
||||||
|
async function prepareImage(input: Tensor): Promise<Tensor> {
|
||||||
|
const t: Record<string, Tensor> = {};
|
||||||
|
if (!input.shape || !input.shape[1] || !input.shape[2]) return input;
|
||||||
|
padding = [
|
||||||
|
[0, 0], // dont touch batch
|
||||||
|
[input.shape[2] > input.shape[1] ? Math.trunc((input.shape[2] - input.shape[1]) / 2) : 0, input.shape[2] > input.shape[1] ? Math.trunc((input.shape[2] - input.shape[1]) / 2) : 0], // height before&after
|
||||||
|
[input.shape[1] > input.shape[2] ? Math.trunc((input.shape[1] - input.shape[2]) / 2) : 0, input.shape[1] > input.shape[2] ? Math.trunc((input.shape[1] - input.shape[2]) / 2) : 0], // width before&after
|
||||||
|
[0, 0], // dont touch rbg
|
||||||
];
|
];
|
||||||
const boxRaw: Box = [0, 0, 0, 0]; // not yet implemented
|
t.pad = tf.pad(input as tf.Tensor4D, padding);
|
||||||
const score = keypoints.reduce((prev, curr) => (curr.score > prev ? curr.score : prev), 0);
|
t.resize = tf.image.resizeBilinear(t.pad as tf.Tensor4D, [inputSize[1][0], inputSize[1][1]]);
|
||||||
|
const final = tf.div(t.resize, 255);
|
||||||
Object.keys(t).forEach((tensor) => tf.dispose(t[tensor]));
|
Object.keys(t).forEach((tensor) => tf.dispose(t[tensor]));
|
||||||
return { id: 0, score, box, boxRaw, keypoints };
|
return final;
|
||||||
|
}
|
||||||
|
|
||||||
|
function rescaleKeypoints(keypoints: Array<BodyKeypoint>, outputSize: [number, number]): Array<BodyKeypoint> {
|
||||||
|
for (const kpt of keypoints) {
|
||||||
|
kpt.position = [
|
||||||
|
kpt.position[0] * (outputSize[0] + padding[2][0] + padding[2][1]) / outputSize[0] - padding[2][0],
|
||||||
|
kpt.position[1] * (outputSize[1] + padding[1][0] + padding[1][1]) / outputSize[1] - padding[1][0],
|
||||||
|
kpt.position[2] as number,
|
||||||
|
];
|
||||||
|
kpt.positionRaw = [
|
||||||
|
kpt.position[0] / outputSize[0], kpt.position[1] / outputSize[1], kpt.position[2] as number,
|
||||||
|
];
|
||||||
|
}
|
||||||
|
return keypoints;
|
||||||
|
}
|
||||||
|
|
||||||
|
async function detectParts(input: Tensor, config: Config, outputSize: [number, number]): Promise<BodyResult | null> {
|
||||||
|
const t: Record<string, Tensor> = {};
|
||||||
|
t.input = await prepareImage(input);
|
||||||
|
[t.ld/* 1,195 */, t.segmentation/* 1,256,256,1 */, t.heatmap/* 1,64,64,39 */, t.world/* 1,117 */, t.poseflag/* 1,1 */] = await models[1]?.execute(t.input, outputNodes) as Tensor[]; // run model
|
||||||
|
const points = await t.ld.data();
|
||||||
|
const keypointsRelative: Array<BodyKeypoint> = [];
|
||||||
|
const depth = 5; // each points has x,y,z,visibility,presence
|
||||||
|
for (let i = 0; i < points.length / depth; i++) {
|
||||||
|
const score = (100 - Math.trunc(100 / (1 + Math.exp(points[depth * i + 3])))) / 100; // normally this is from tf.sigmoid but no point of running sigmoid on full array which has coords as well
|
||||||
|
// const presence = (100 - Math.trunc(100 / (1 + Math.exp(points[depth * i + 4])))) / 100; // reverse sigmoid value
|
||||||
|
const positionRaw: Point = [points[depth * i + 0] / inputSize[1][0], points[depth * i + 1] / inputSize[1][1], points[depth * i + 2] + 0];
|
||||||
|
const position: Point = [Math.trunc(outputSize[0] * positionRaw[0]), Math.trunc(outputSize[1] * positionRaw[1]), positionRaw[2] as number];
|
||||||
|
// if (positionRaw[0] < 0 || positionRaw[1] < 0 || positionRaw[0] > 1 || positionRaw[1] > 1) score = 0;
|
||||||
|
keypointsRelative.push({ part: coords.kpt[i], positionRaw, position, score });
|
||||||
|
}
|
||||||
|
const avgScore = Math.round(100 * keypointsRelative.reduce((prev, curr) => prev += curr.score, 0) / keypointsRelative.length) / 100; // average score of keypoints
|
||||||
|
if (avgScore < (config.body.minConfidence || 0)) return null;
|
||||||
|
const keypoints: Array<BodyKeypoint> = rescaleKeypoints(keypointsRelative, outputSize); // keypoints were relative to input image which is cropped
|
||||||
|
const boxes = calculateBoxes(keypoints, [outputSize[0], outputSize[1]]); // now find boxes based on rescaled keypoints
|
||||||
|
Object.keys(t).forEach((tensor) => tf.dispose(t[tensor]));
|
||||||
|
const annotations: Record<string, Point[][]> = {};
|
||||||
|
for (const [name, indexes] of Object.entries(coords.connected)) {
|
||||||
|
const pt: Array<Point[]> = [];
|
||||||
|
for (let i = 0; i < indexes.length - 1; i++) {
|
||||||
|
const pt0 = keypoints.find((kpt) => kpt.part === indexes[i]);
|
||||||
|
const pt1 = keypoints.find((kpt) => kpt.part === indexes[i + 1]);
|
||||||
|
if (pt0 && pt1 && pt0.score > (config.body.minConfidence || 0) && pt1.score > (config.body.minConfidence || 0)) pt.push([pt0.position, pt1.position]);
|
||||||
|
}
|
||||||
|
annotations[name] = pt;
|
||||||
|
}
|
||||||
|
return { id: 0, score: avgScore, box: boxes.keypointsBox, boxRaw: boxes.keypointsBoxRaw, keypoints, annotations };
|
||||||
}
|
}
|
||||||
|
|
||||||
export async function predict(input: Tensor, config: Config): Promise<BodyResult[]> {
|
export async function predict(input: Tensor, config: Config): Promise<BodyResult[]> {
|
||||||
outputSize = [input.shape[2] || 0, input.shape[1] || 0];
|
const outputSize: [number, number] = [input.shape[2] || 0, input.shape[1] || 0];
|
||||||
const bodies: Array<BodyResult> = [];
|
if ((skipped < (config.body.skipFrames || 0)) && config.skipFrame) {
|
||||||
const body = await detectParts(input, config);
|
|
||||||
bodies.push(body);
|
|
||||||
/*
|
|
||||||
cache.tmpBoxes = []; // clear temp cache
|
|
||||||
if ((skipped < (config.body.skipFrames || 0)) && config.skipFrame) { // just run part detection while reusing cached boxes
|
|
||||||
skipped++;
|
skipped++;
|
||||||
bodies = await Promise.all(cache.partBoxes.map((body) => detectParts(input, body, config))); // run from parts box cache
|
} else {
|
||||||
} else { // calculate new boxes and run part detection
|
cache = await detectParts(input, config, outputSize);
|
||||||
skipped = 0;
|
skipped = 0;
|
||||||
bodies = await Promise.all(cache.partBoxes.map((body) => detectParts(input, body, config))); // run from part box cache
|
|
||||||
if (bodies.length !== config.body.maxDetected) { // run body detection only if we dont have enough bodies in cache
|
|
||||||
cache.bodyBoxes = await detectBody(input, config);
|
|
||||||
const newBodies = await Promise.all(cache.bodyBoxes.map((body) => detectParts(input, body, config)));
|
|
||||||
bodies = bodies.concat(newBodies);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
cache.partBoxes = [...cache.tmpBoxes]; // repopulate cache with validated bodies
|
if (cache) return [cache];
|
||||||
*/
|
return [];
|
||||||
return bodies as BodyResult[];
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,54 @@
|
||||||
|
/* eslint-disable no-multi-spaces */
|
||||||
|
|
||||||
|
export const kpt = [
|
||||||
|
'nose', // 0
|
||||||
|
'leftEyeInside', // 1
|
||||||
|
'leftEye', // 2
|
||||||
|
'leftEyeOutside', // 3
|
||||||
|
'rightEyeInside', // 4
|
||||||
|
'rightEye', // 5
|
||||||
|
'rightEyeOutside', // 6
|
||||||
|
'leftEar', // 7
|
||||||
|
'rightEar', // 8
|
||||||
|
'leftMouth', // 9
|
||||||
|
'rightMouth', // 10
|
||||||
|
'leftShoulder', // 11
|
||||||
|
'rightShoulder', // 12
|
||||||
|
'leftElbow', // 13
|
||||||
|
'rightElbow', // 14
|
||||||
|
'leftWrist', // 15
|
||||||
|
'rightWrist', // 16
|
||||||
|
'leftPalm', // 17
|
||||||
|
'rightPalm', // 18
|
||||||
|
'leftIndex', // 19
|
||||||
|
'rightIndex', // 20
|
||||||
|
'leftPinky', // 21
|
||||||
|
'rightPinky', // 22
|
||||||
|
'leftHip', // 23
|
||||||
|
'rightHip', // 24
|
||||||
|
'leftKnee', // 25
|
||||||
|
'rightKnee', // 26
|
||||||
|
'leftAnkle', // 27
|
||||||
|
'rightAnkle', // 28
|
||||||
|
'leftHeel', // 29
|
||||||
|
'rightHeel', // 30
|
||||||
|
'leftFoot', // 31
|
||||||
|
'rightFoot', // 32
|
||||||
|
'bodyCenter', // 33
|
||||||
|
'bodyTop', // 34
|
||||||
|
'leftThumb', // 35
|
||||||
|
'leftHand', // 36
|
||||||
|
'rightThumb', // 37
|
||||||
|
'rightHand', // 38
|
||||||
|
];
|
||||||
|
|
||||||
|
export const connected = {
|
||||||
|
leftLeg: ['leftHip', 'leftKnee', 'leftAnkle', 'leftHeel', 'leftFoot'],
|
||||||
|
rightLeg: ['rightHip', 'rightKnee', 'rightAnkle', 'rightHeel', 'rightFoot'],
|
||||||
|
torso: ['leftShoulder', 'rightShoulder', 'rightHip', 'leftHip', 'leftShoulder'],
|
||||||
|
leftArm: ['leftShoulder', 'leftElbow', 'leftWrist', 'leftPalm'],
|
||||||
|
rightArm: ['rightShoulder', 'rightElbow', 'rightWrist', 'rightPalm'],
|
||||||
|
leftHand: [],
|
||||||
|
rightHand: [],
|
||||||
|
head: [],
|
||||||
|
};
|
|
@ -6,23 +6,20 @@
|
||||||
|
|
||||||
import { log, join } from '../util/util';
|
import { log, join } from '../util/util';
|
||||||
import * as tf from '../../dist/tfjs.esm.js';
|
import * as tf from '../../dist/tfjs.esm.js';
|
||||||
import type { BodyResult, Box, Point } from '../result';
|
import * as coords from './efficientposecoords';
|
||||||
|
import type { BodyKeypoint, BodyResult, Box, Point } from '../result';
|
||||||
import type { GraphModel, Tensor } from '../tfjs/types';
|
import type { GraphModel, Tensor } from '../tfjs/types';
|
||||||
import type { Config } from '../config';
|
import type { Config } from '../config';
|
||||||
import { env } from '../util/env';
|
import { env } from '../util/env';
|
||||||
|
|
||||||
let model: GraphModel | null;
|
let model: GraphModel | null;
|
||||||
|
|
||||||
type Keypoints = { score: number, part: string, position: Point, positionRaw: Point };
|
const keypoints: Array<BodyKeypoint> = [];
|
||||||
|
|
||||||
const keypoints: Array<Keypoints> = [];
|
|
||||||
let box: Box = [0, 0, 0, 0];
|
let box: Box = [0, 0, 0, 0];
|
||||||
let boxRaw: Box = [0, 0, 0, 0];
|
let boxRaw: Box = [0, 0, 0, 0];
|
||||||
let score = 0;
|
let score = 0;
|
||||||
let skipped = Number.MAX_SAFE_INTEGER;
|
let skipped = Number.MAX_SAFE_INTEGER;
|
||||||
|
|
||||||
const bodyParts = ['head', 'neck', 'rightShoulder', 'rightElbow', 'rightWrist', 'chest', 'leftShoulder', 'leftElbow', 'leftWrist', 'pelvis', 'rightHip', 'rightKnee', 'rightAnkle', 'leftHip', 'leftKnee', 'leftAnkle'];
|
|
||||||
|
|
||||||
export async function load(config: Config): Promise<GraphModel> {
|
export async function load(config: Config): Promise<GraphModel> {
|
||||||
if (env.initial) model = null;
|
if (env.initial) model = null;
|
||||||
if (!model) {
|
if (!model) {
|
||||||
|
@ -41,9 +38,9 @@ function max2d(inputs, minScore) {
|
||||||
const reshaped = tf.reshape(inputs, [height * width]); // combine all data
|
const reshaped = tf.reshape(inputs, [height * width]); // combine all data
|
||||||
const newScore = tf.max(reshaped, 0).dataSync()[0]; // get highest score // inside tf.tidy
|
const newScore = tf.max(reshaped, 0).dataSync()[0]; // get highest score // inside tf.tidy
|
||||||
if (newScore > minScore) { // skip coordinate calculation is score is too low
|
if (newScore > minScore) { // skip coordinate calculation is score is too low
|
||||||
const coords = tf.argMax(reshaped, 0);
|
const coordinates = tf.argMax(reshaped, 0);
|
||||||
const x = mod(coords, width).dataSync()[0]; // inside tf.tidy
|
const x = mod(coordinates, width).dataSync()[0]; // inside tf.tidy
|
||||||
const y = tf.div(coords, tf.scalar(width, 'int32')).dataSync()[0]; // inside tf.tidy
|
const y = tf.div(coordinates, tf.scalar(width, 'int32')).dataSync()[0]; // inside tf.tidy
|
||||||
return [x, y, newScore];
|
return [x, y, newScore];
|
||||||
}
|
}
|
||||||
return [0, 0, newScore];
|
return [0, 0, newScore];
|
||||||
|
@ -53,7 +50,7 @@ function max2d(inputs, minScore) {
|
||||||
export async function predict(image: Tensor, config: Config): Promise<BodyResult[]> {
|
export async function predict(image: Tensor, config: Config): Promise<BodyResult[]> {
|
||||||
if ((skipped < (config.body?.skipFrames || 0)) && config.skipFrame && Object.keys(keypoints).length > 0) {
|
if ((skipped < (config.body?.skipFrames || 0)) && config.skipFrame && Object.keys(keypoints).length > 0) {
|
||||||
skipped++;
|
skipped++;
|
||||||
return [{ id: 0, score, box, boxRaw, keypoints }];
|
return [{ id: 0, score, box, boxRaw, keypoints, annotations: {} }];
|
||||||
}
|
}
|
||||||
skipped = 0;
|
skipped = 0;
|
||||||
return new Promise(async (resolve) => {
|
return new Promise(async (resolve) => {
|
||||||
|
@ -83,7 +80,7 @@ export async function predict(image: Tensor, config: Config): Promise<BodyResult
|
||||||
if (score > (config.body?.minConfidence || 0)) {
|
if (score > (config.body?.minConfidence || 0)) {
|
||||||
keypoints.push({
|
keypoints.push({
|
||||||
score: Math.round(100 * partScore) / 100,
|
score: Math.round(100 * partScore) / 100,
|
||||||
part: bodyParts[id],
|
part: coords.kpt[id],
|
||||||
positionRaw: [ // normalized to 0..1
|
positionRaw: [ // normalized to 0..1
|
||||||
// @ts-ignore model is not undefined here
|
// @ts-ignore model is not undefined here
|
||||||
x / model.inputs[0].shape[2], y / model.inputs[0].shape[1],
|
x / model.inputs[0].shape[2], y / model.inputs[0].shape[1],
|
||||||
|
@ -114,6 +111,16 @@ export async function predict(image: Tensor, config: Config): Promise<BodyResult
|
||||||
Math.max(...xRaw) - Math.min(...xRaw),
|
Math.max(...xRaw) - Math.min(...xRaw),
|
||||||
Math.max(...yRaw) - Math.min(...yRaw),
|
Math.max(...yRaw) - Math.min(...yRaw),
|
||||||
];
|
];
|
||||||
resolve([{ id: 0, score, box, boxRaw, keypoints }]);
|
const annotations: Record<string, Point[][]> = {};
|
||||||
|
for (const [name, indexes] of Object.entries(coords.connected)) {
|
||||||
|
const pt: Array<Point[]> = [];
|
||||||
|
for (let i = 0; i < indexes.length - 1; i++) {
|
||||||
|
const pt0 = keypoints.find((kpt) => kpt.part === indexes[i]);
|
||||||
|
const pt1 = keypoints.find((kpt) => kpt.part === indexes[i + 1]);
|
||||||
|
if (pt0 && pt1 && pt0.score > (config.body.minConfidence || 0) && pt1.score > (config.body.minConfidence || 0)) pt.push([pt0.position, pt1.position]);
|
||||||
|
}
|
||||||
|
annotations[name] = pt;
|
||||||
|
}
|
||||||
|
resolve([{ id: 0, score, box, boxRaw, keypoints, annotations }]);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,27 @@
|
||||||
|
export const kpt = [
|
||||||
|
'head',
|
||||||
|
'neck',
|
||||||
|
'rightShoulder',
|
||||||
|
'rightElbow',
|
||||||
|
'rightWrist',
|
||||||
|
'chest',
|
||||||
|
'leftShoulder',
|
||||||
|
'leftElbow',
|
||||||
|
'leftWrist',
|
||||||
|
'bodyCenter',
|
||||||
|
'rightHip',
|
||||||
|
'rightKnee',
|
||||||
|
'rightAnkle',
|
||||||
|
'leftHip',
|
||||||
|
'leftKnee',
|
||||||
|
'leftAnkle',
|
||||||
|
];
|
||||||
|
|
||||||
|
export const connected = {
|
||||||
|
leftLeg: ['leftHip', 'leftKnee', 'leftAnkle'],
|
||||||
|
rightLeg: ['rightHip', 'rightKnee', 'rightAnkle'],
|
||||||
|
torso: ['leftShoulder', 'rightShoulder', 'rightHip', 'leftHip', 'leftShoulder'],
|
||||||
|
leftArm: ['leftShoulder', 'leftElbow', 'leftWrist'],
|
||||||
|
rightArm: ['rightShoulder', 'rightElbow', 'rightWrist'],
|
||||||
|
head: [],
|
||||||
|
};
|
|
@ -7,7 +7,8 @@
|
||||||
import { log, join } from '../util/util';
|
import { log, join } from '../util/util';
|
||||||
import { scale } from '../util/box';
|
import { scale } from '../util/box';
|
||||||
import * as tf from '../../dist/tfjs.esm.js';
|
import * as tf from '../../dist/tfjs.esm.js';
|
||||||
import type { BodyResult, Box, Point } from '../result';
|
import * as coords from './movenetcoords';
|
||||||
|
import type { BodyKeypoint, BodyResult, Box, Point } from '../result';
|
||||||
import type { GraphModel, Tensor } from '../tfjs/types';
|
import type { GraphModel, Tensor } from '../tfjs/types';
|
||||||
import type { Config } from '../config';
|
import type { Config } from '../config';
|
||||||
import { fakeOps } from '../tfjs/backend';
|
import { fakeOps } from '../tfjs/backend';
|
||||||
|
@ -17,13 +18,8 @@ let model: GraphModel | null;
|
||||||
let inputSize = 0;
|
let inputSize = 0;
|
||||||
const cachedBoxes: Array<Box> = [];
|
const cachedBoxes: Array<Box> = [];
|
||||||
|
|
||||||
type Keypoints = { score: number, part: string, position: Point, positionRaw: Point };
|
|
||||||
type Body = { id: number, score: number, box: Box, boxRaw: Box, keypoints: Array<Keypoints> }
|
|
||||||
|
|
||||||
let skipped = Number.MAX_SAFE_INTEGER;
|
let skipped = Number.MAX_SAFE_INTEGER;
|
||||||
const keypoints: Array<Keypoints> = [];
|
const keypoints: Array<BodyKeypoint> = [];
|
||||||
|
|
||||||
const bodyParts = ['nose', 'leftEye', 'rightEye', 'leftEar', 'rightEar', 'leftShoulder', 'rightShoulder', 'leftElbow', 'rightElbow', 'leftWrist', 'rightWrist', 'leftHip', 'rightHip', 'leftKnee', 'rightKnee', 'leftAnkle', 'rightAnkle'];
|
|
||||||
|
|
||||||
export async function load(config: Config): Promise<GraphModel> {
|
export async function load(config: Config): Promise<GraphModel> {
|
||||||
if (env.initial) model = null;
|
if (env.initial) model = null;
|
||||||
|
@ -71,7 +67,7 @@ async function parseSinglePose(res, config, image, inputBox) {
|
||||||
];
|
];
|
||||||
keypoints.push({
|
keypoints.push({
|
||||||
score: Math.round(100 * score) / 100,
|
score: Math.round(100 * score) / 100,
|
||||||
part: bodyParts[id],
|
part: coords.kpt[id],
|
||||||
positionRaw,
|
positionRaw,
|
||||||
position: [ // normalized to input image size
|
position: [ // normalized to input image size
|
||||||
Math.round((image.shape[2] || 0) * positionRaw[0]),
|
Math.round((image.shape[2] || 0) * positionRaw[0]),
|
||||||
|
@ -81,14 +77,24 @@ async function parseSinglePose(res, config, image, inputBox) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
score = keypoints.reduce((prev, curr) => (curr.score > prev ? curr.score : prev), 0);
|
score = keypoints.reduce((prev, curr) => (curr.score > prev ? curr.score : prev), 0);
|
||||||
const bodies: Array<Body> = [];
|
const bodies: Array<BodyResult> = [];
|
||||||
const [box, boxRaw] = createBox(keypoints);
|
const [box, boxRaw] = createBox(keypoints);
|
||||||
bodies.push({ id: 0, score, box, boxRaw, keypoints });
|
const annotations: Record<string, Point[][]> = {};
|
||||||
|
for (const [name, indexes] of Object.entries(coords.connected)) {
|
||||||
|
const pt: Array<Point[]> = [];
|
||||||
|
for (let i = 0; i < indexes.length - 1; i++) {
|
||||||
|
const pt0 = keypoints.find((kp) => kp.part === indexes[i]);
|
||||||
|
const pt1 = keypoints.find((kp) => kp.part === indexes[i + 1]);
|
||||||
|
if (pt0 && pt1 && pt0.score > (config.body.minConfidence || 0) && pt1.score > (config.body.minConfidence || 0)) pt.push([pt0.position, pt1.position]);
|
||||||
|
}
|
||||||
|
annotations[name] = pt;
|
||||||
|
}
|
||||||
|
bodies.push({ id: 0, score, box, boxRaw, keypoints, annotations });
|
||||||
return bodies;
|
return bodies;
|
||||||
}
|
}
|
||||||
|
|
||||||
async function parseMultiPose(res, config, image, inputBox) {
|
async function parseMultiPose(res, config, image, inputBox) {
|
||||||
const bodies: Array<Body> = [];
|
const bodies: Array<BodyResult> = [];
|
||||||
for (let id = 0; id < res[0].length; id++) {
|
for (let id = 0; id < res[0].length; id++) {
|
||||||
const kpt = res[0][id];
|
const kpt = res[0][id];
|
||||||
const totalScore = Math.round(100 * kpt[51 + 4]) / 100;
|
const totalScore = Math.round(100 * kpt[51 + 4]) / 100;
|
||||||
|
@ -102,7 +108,7 @@ async function parseMultiPose(res, config, image, inputBox) {
|
||||||
(inputBox[2] - inputBox[0]) * kpt[3 * i + 0] + inputBox[0],
|
(inputBox[2] - inputBox[0]) * kpt[3 * i + 0] + inputBox[0],
|
||||||
];
|
];
|
||||||
keypoints.push({
|
keypoints.push({
|
||||||
part: bodyParts[i],
|
part: coords.kpt[i],
|
||||||
score: Math.round(100 * score) / 100,
|
score: Math.round(100 * score) / 100,
|
||||||
positionRaw,
|
positionRaw,
|
||||||
position: [
|
position: [
|
||||||
|
@ -112,11 +118,21 @@ async function parseMultiPose(res, config, image, inputBox) {
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// const [box, boxRaw] = createBox(keypoints);
|
const [box, boxRaw] = createBox(keypoints);
|
||||||
// movenet-multipose has built-in box details
|
// movenet-multipose has built-in box details
|
||||||
const boxRaw: Box = [kpt[51 + 1], kpt[51 + 0], kpt[51 + 3] - kpt[51 + 1], kpt[51 + 2] - kpt[51 + 0]];
|
// const boxRaw: Box = [kpt[51 + 1], kpt[51 + 0], kpt[51 + 3] - kpt[51 + 1], kpt[51 + 2] - kpt[51 + 0]];
|
||||||
const box: Box = [Math.trunc(boxRaw[0] * (image.shape[2] || 0)), Math.trunc(boxRaw[1] * (image.shape[1] || 0)), Math.trunc(boxRaw[2] * (image.shape[2] || 0)), Math.trunc(boxRaw[3] * (image.shape[1] || 0))];
|
// const box: Box = [Math.trunc(boxRaw[0] * (image.shape[2] || 0)), Math.trunc(boxRaw[1] * (image.shape[1] || 0)), Math.trunc(boxRaw[2] * (image.shape[2] || 0)), Math.trunc(boxRaw[3] * (image.shape[1] || 0))];
|
||||||
bodies.push({ id, score: totalScore, boxRaw, box, keypoints: [...keypoints] });
|
const annotations: Record<string, Point[][]> = {};
|
||||||
|
for (const [name, indexes] of Object.entries(coords.connected)) {
|
||||||
|
const pt: Array<Point[]> = [];
|
||||||
|
for (let i = 0; i < indexes.length - 1; i++) {
|
||||||
|
const pt0 = keypoints.find((kp) => kp.part === indexes[i]);
|
||||||
|
const pt1 = keypoints.find((kp) => kp.part === indexes[i + 1]);
|
||||||
|
if (pt0 && pt1 && pt0.score > (config.body.minConfidence || 0) && pt1.score > (config.body.minConfidence || 0)) pt.push([pt0.position, pt1.position]);
|
||||||
|
}
|
||||||
|
annotations[name] = pt;
|
||||||
|
}
|
||||||
|
bodies.push({ id, score: totalScore, boxRaw, box, keypoints: [...keypoints], annotations });
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
bodies.sort((a, b) => b.score - a.score);
|
bodies.sort((a, b) => b.score - a.score);
|
||||||
|
@ -129,7 +145,7 @@ export async function predict(input: Tensor, config: Config): Promise<BodyResult
|
||||||
return new Promise(async (resolve) => {
|
return new Promise(async (resolve) => {
|
||||||
const t: Record<string, Tensor> = {};
|
const t: Record<string, Tensor> = {};
|
||||||
|
|
||||||
let bodies: Array<Body> = [];
|
let bodies: Array<BodyResult> = [];
|
||||||
|
|
||||||
if (!config.skipFrame) cachedBoxes.length = 0; // allowed to use cache or not
|
if (!config.skipFrame) cachedBoxes.length = 0; // allowed to use cache or not
|
||||||
skipped++;
|
skipped++;
|
||||||
|
|
|
@ -0,0 +1,28 @@
|
||||||
|
export const kpt = [
|
||||||
|
'nose',
|
||||||
|
'leftEye',
|
||||||
|
'rightEye',
|
||||||
|
'leftEar',
|
||||||
|
'rightEar',
|
||||||
|
'leftShoulder',
|
||||||
|
'rightShoulder',
|
||||||
|
'leftElbow',
|
||||||
|
'rightElbow',
|
||||||
|
'leftWrist',
|
||||||
|
'rightWrist',
|
||||||
|
'leftHip',
|
||||||
|
'rightHip',
|
||||||
|
'leftKnee',
|
||||||
|
'rightKnee',
|
||||||
|
'leftAnkle',
|
||||||
|
'rightAnkle',
|
||||||
|
];
|
||||||
|
|
||||||
|
export const connected = {
|
||||||
|
leftLeg: ['leftHip', 'leftKnee', 'leftAnkle'],
|
||||||
|
rightLeg: ['rightHip', 'rightKnee', 'rightAnkle'],
|
||||||
|
torso: ['leftShoulder', 'rightShoulder', 'rightHip', 'leftHip', 'leftShoulder'],
|
||||||
|
leftArm: ['leftShoulder', 'leftElbow', 'leftWrist'],
|
||||||
|
rightArm: ['rightShoulder', 'rightElbow', 'rightWrist'],
|
||||||
|
head: [],
|
||||||
|
};
|
|
@ -411,7 +411,7 @@ const config: Config = {
|
||||||
// only valid for posenet and movenet-multipose as other models detects single pose
|
// only valid for posenet and movenet-multipose as other models detects single pose
|
||||||
// set to -1 to autodetect based on number of detected faces
|
// set to -1 to autodetect based on number of detected faces
|
||||||
minConfidence: 0.2, // threshold for discarding a prediction
|
minConfidence: 0.2, // threshold for discarding a prediction
|
||||||
skipFrames: 1, // how many max frames to go without re-running the detector
|
skipFrames: 5, // how many max frames to go without re-running the detector
|
||||||
// only used when cacheSensitivity is not zero
|
// only used when cacheSensitivity is not zero
|
||||||
},
|
},
|
||||||
|
|
||||||
|
|
|
@ -8,7 +8,6 @@ import { defaults } from './config';
|
||||||
import * as tf from '../dist/tfjs.esm.js';
|
import * as tf from '../dist/tfjs.esm.js';
|
||||||
import * as app from '../package.json';
|
import * as app from '../package.json';
|
||||||
import * as backend from './tfjs/backend';
|
import * as backend from './tfjs/backend';
|
||||||
// import * as blazepose from './body/blazepose-v1';
|
|
||||||
import * as blazepose from './body/blazepose';
|
import * as blazepose from './body/blazepose';
|
||||||
import * as centernet from './object/centernet';
|
import * as centernet from './object/centernet';
|
||||||
import * as draw from './util/draw';
|
import * as draw from './util/draw';
|
||||||
|
|
|
@ -183,6 +183,8 @@ export function process(input: Input, config: Config): { tensor: Tensor | null,
|
||||||
tempCanvas.height = targetHeight;
|
tempCanvas.height = targetHeight;
|
||||||
const tempCtx = tempCanvas.getContext('2d');
|
const tempCtx = tempCanvas.getContext('2d');
|
||||||
tempCtx?.drawImage(outCanvas, 0, 0);
|
tempCtx?.drawImage(outCanvas, 0, 0);
|
||||||
|
console.log('PIXELS', tempCanvas);
|
||||||
|
pixels = (tf.browser && env.browser) ? tf.browser.fromPixels(tempCanvas) : null;
|
||||||
try {
|
try {
|
||||||
pixels = (tf.browser && env.browser) ? tf.browser.fromPixels(tempCanvas) : null;
|
pixels = (tf.browser && env.browser) ? tf.browser.fromPixels(tempCanvas) : null;
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
|
|
|
@ -59,6 +59,13 @@ export interface FaceResult {
|
||||||
tensor?: Tensor,
|
tensor?: Tensor,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export type BodyKeypoint = {
|
||||||
|
part: string,
|
||||||
|
position: Point,
|
||||||
|
positionRaw: Point,
|
||||||
|
score: number,
|
||||||
|
}
|
||||||
|
|
||||||
/** Body results
|
/** Body results
|
||||||
*
|
*
|
||||||
* Each results has:
|
* Each results has:
|
||||||
|
@ -77,13 +84,8 @@ export interface BodyResult {
|
||||||
score: number,
|
score: number,
|
||||||
box: Box,
|
box: Box,
|
||||||
boxRaw: Box,
|
boxRaw: Box,
|
||||||
keypoints: Array<{
|
annotations: Record<string, Point[][]>,
|
||||||
part: string,
|
keypoints: Array<BodyKeypoint>
|
||||||
position: Point,
|
|
||||||
positionRaw: Point,
|
|
||||||
score: number,
|
|
||||||
presence?: number,
|
|
||||||
}>
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Hand results
|
/** Hand results
|
||||||
|
|
|
@ -90,10 +90,8 @@ export async function check(instance, force = false) {
|
||||||
}
|
}
|
||||||
|
|
||||||
// handle webgpu
|
// handle webgpu
|
||||||
if (tf.getBackend() === 'humangl') {
|
if (tf.getBackend() === 'webgpu') {
|
||||||
tf.ENV.set('WEBGPU_USE_GLSL', true);
|
tf.ENV.set('WEBGPU_USE_GLSL', true);
|
||||||
tf.ENV.set('WEBGL_PACK_DEPTHWISECONV', false);
|
|
||||||
tf.ENV.set('WEBGL_USE_SHAPES_UNIFORMS', true);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// wait for ready
|
// wait for ready
|
||||||
|
|
|
@ -67,7 +67,7 @@ export async function register(instance): Promise<void> {
|
||||||
// log('gpu memory usage:', instance.tf.engine().backendInstance.numBytesInGPU);
|
// log('gpu memory usage:', instance.tf.engine().backendInstance.numBytesInGPU);
|
||||||
log('possible browser memory leak using webgl');
|
log('possible browser memory leak using webgl');
|
||||||
instance.emit('error');
|
instance.emit('error');
|
||||||
throw new Error('browser webgl error');
|
// throw new Error('browser webgl error');
|
||||||
/*
|
/*
|
||||||
log('resetting humangl backend');
|
log('resetting humangl backend');
|
||||||
env.initial = true;
|
env.initial = true;
|
||||||
|
|
|
@ -4,7 +4,7 @@
|
||||||
|
|
||||||
import { TRI468 as triangulation } from '../face/facemeshcoords';
|
import { TRI468 as triangulation } from '../face/facemeshcoords';
|
||||||
import { mergeDeep, now } from './util';
|
import { mergeDeep, now } from './util';
|
||||||
import type { Result, FaceResult, BodyResult, HandResult, ObjectResult, GestureResult, PersonResult } from '../result';
|
import type { Result, FaceResult, BodyResult, HandResult, ObjectResult, GestureResult, PersonResult, Point } from '../result';
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Draw Options
|
* Draw Options
|
||||||
|
@ -102,7 +102,7 @@ function rect(ctx, x, y, width, height, localOptions) {
|
||||||
ctx.stroke();
|
ctx.stroke();
|
||||||
}
|
}
|
||||||
|
|
||||||
function lines(ctx, points: [number, number, number?][] = [], localOptions) {
|
function lines(ctx, points: Point[] = [], localOptions) {
|
||||||
if (points === undefined || points.length === 0) return;
|
if (points === undefined || points.length === 0) return;
|
||||||
ctx.beginPath();
|
ctx.beginPath();
|
||||||
ctx.moveTo(points[0][0], points[0][1]);
|
ctx.moveTo(points[0][0], points[0][1]);
|
||||||
|
@ -119,7 +119,7 @@ function lines(ctx, points: [number, number, number?][] = [], localOptions) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function curves(ctx, points: [number, number, number?][] = [], localOptions) {
|
function curves(ctx, points: Point[] = [], localOptions) {
|
||||||
if (points === undefined || points.length === 0) return;
|
if (points === undefined || points.length === 0) return;
|
||||||
if (!localOptions.useCurves || points.length <= 2) {
|
if (!localOptions.useCurves || points.length <= 2) {
|
||||||
lines(ctx, points, localOptions);
|
lines(ctx, points, localOptions);
|
||||||
|
@ -288,91 +288,23 @@ export async function body(inCanvas: HTMLCanvasElement | OffscreenCanvas, result
|
||||||
ctx.fillText(`body ${100 * result[i].score}%`, result[i].box[0] + 2, 0 + result[i].box[1] + localOptions.lineHeight, result[i].box[2]);
|
ctx.fillText(`body ${100 * result[i].score}%`, result[i].box[0] + 2, 0 + result[i].box[1] + localOptions.lineHeight, result[i].box[2]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (localOptions.drawPoints) {
|
if (localOptions.drawPoints && result[i].keypoints) {
|
||||||
for (let pt = 0; pt < result[i].keypoints.length; pt++) {
|
for (let pt = 0; pt < result[i].keypoints.length; pt++) {
|
||||||
ctx.fillStyle = localOptions.useDepth && result[i].keypoints[pt].position[2] ? `rgba(${127.5 + (2 * (result[i].keypoints[pt].position[2] || 0))}, ${127.5 - (2 * (result[i].keypoints[pt].position[2] || 0))}, 255, 0.5)` : localOptions.color;
|
ctx.fillStyle = localOptions.useDepth && result[i].keypoints[pt].position[2] ? `rgba(${127.5 + (2 * (result[i].keypoints[pt].position[2] || 0))}, ${127.5 - (2 * (result[i].keypoints[pt].position[2] || 0))}, 255, 0.5)` : localOptions.color;
|
||||||
point(ctx, result[i].keypoints[pt].position[0], result[i].keypoints[pt].position[1], 0, localOptions);
|
point(ctx, result[i].keypoints[pt].position[0], result[i].keypoints[pt].position[1], 0, localOptions);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (localOptions.drawLabels) {
|
if (localOptions.drawLabels && result[i].keypoints) {
|
||||||
ctx.font = localOptions.font;
|
ctx.font = localOptions.font;
|
||||||
if (result[i].keypoints) {
|
for (const pt of result[i].keypoints) {
|
||||||
for (const pt of result[i].keypoints) {
|
ctx.fillStyle = localOptions.useDepth && pt.position[2] ? `rgba(${127.5 + (2 * pt.position[2])}, ${127.5 - (2 * pt.position[2])}, 255, 0.5)` : localOptions.color;
|
||||||
ctx.fillStyle = localOptions.useDepth && pt.position[2] ? `rgba(${127.5 + (2 * pt.position[2])}, ${127.5 - (2 * pt.position[2])}, 255, 0.5)` : localOptions.color;
|
ctx.fillText(`${pt.part} ${Math.trunc(100 * pt.score)}%`, pt.position[0] + 4, pt.position[1] + 4);
|
||||||
ctx.fillText(`${pt.part} ${Math.trunc(100 * pt.score)}%`, pt.position[0] + 4, pt.position[1] + 4);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (localOptions.drawPolygons && result[i].keypoints) {
|
if (localOptions.drawPolygons && result[i].keypoints && result[i].annotations) {
|
||||||
let part;
|
for (const part of Object.values(result[i].annotations)) {
|
||||||
const points: [number, number, number?][] = [];
|
for (const connected of part) curves(ctx, connected, localOptions);
|
||||||
// shoulder line
|
}
|
||||||
points.length = 0;
|
|
||||||
part = result[i].keypoints.find((a) => a.part === 'leftShoulder');
|
|
||||||
if (part) points.push([part.position[0], part.position[1]]);
|
|
||||||
part = result[i].keypoints.find((a) => a.part === 'rightShoulder');
|
|
||||||
if (part) points.push([part.position[0], part.position[1]]);
|
|
||||||
curves(ctx, points, localOptions);
|
|
||||||
// torso main
|
|
||||||
points.length = 0;
|
|
||||||
part = result[i].keypoints.find((a) => a.part === 'rightShoulder');
|
|
||||||
if (part) points.push([part.position[0], part.position[1]]);
|
|
||||||
part = result[i].keypoints.find((a) => a.part === 'rightHip');
|
|
||||||
if (part) points.push([part.position[0], part.position[1]]);
|
|
||||||
part = result[i].keypoints.find((a) => a.part === 'leftHip');
|
|
||||||
if (part) points.push([part.position[0], part.position[1]]);
|
|
||||||
part = result[i].keypoints.find((a) => a.part === 'leftShoulder');
|
|
||||||
if (part) points.push([part.position[0], part.position[1]]);
|
|
||||||
if (points.length === 4) lines(ctx, points, localOptions); // only draw if we have complete torso
|
|
||||||
// leg left
|
|
||||||
points.length = 0;
|
|
||||||
part = result[i].keypoints.find((a) => a.part === 'leftHip');
|
|
||||||
if (part) points.push([part.position[0], part.position[1]]);
|
|
||||||
part = result[i].keypoints.find((a) => a.part === 'leftKnee');
|
|
||||||
if (part) points.push([part.position[0], part.position[1]]);
|
|
||||||
part = result[i].keypoints.find((a) => a.part === 'leftAnkle');
|
|
||||||
if (part) points.push([part.position[0], part.position[1]]);
|
|
||||||
part = result[i].keypoints.find((a) => a.part === 'leftHeel');
|
|
||||||
if (part) points.push([part.position[0], part.position[1]]);
|
|
||||||
part = result[i].keypoints.find((a) => a.part === 'leftFoot');
|
|
||||||
if (part) points.push([part.position[0], part.position[1]]);
|
|
||||||
curves(ctx, points, localOptions);
|
|
||||||
// leg right
|
|
||||||
points.length = 0;
|
|
||||||
part = result[i].keypoints.find((a) => a.part === 'rightHip');
|
|
||||||
if (part) points.push([part.position[0], part.position[1]]);
|
|
||||||
part = result[i].keypoints.find((a) => a.part === 'rightKnee');
|
|
||||||
if (part) points.push([part.position[0], part.position[1]]);
|
|
||||||
part = result[i].keypoints.find((a) => a.part === 'rightAnkle');
|
|
||||||
if (part) points.push([part.position[0], part.position[1]]);
|
|
||||||
part = result[i].keypoints.find((a) => a.part === 'rightHeel');
|
|
||||||
if (part) points.push([part.position[0], part.position[1]]);
|
|
||||||
part = result[i].keypoints.find((a) => a.part === 'rightFoot');
|
|
||||||
if (part) points.push([part.position[0], part.position[1]]);
|
|
||||||
curves(ctx, points, localOptions);
|
|
||||||
// arm left
|
|
||||||
points.length = 0;
|
|
||||||
part = result[i].keypoints.find((a) => a.part === 'leftShoulder');
|
|
||||||
if (part) points.push([part.position[0], part.position[1]]);
|
|
||||||
part = result[i].keypoints.find((a) => a.part === 'leftElbow');
|
|
||||||
if (part) points.push([part.position[0], part.position[1]]);
|
|
||||||
part = result[i].keypoints.find((a) => a.part === 'leftWrist');
|
|
||||||
if (part) points.push([part.position[0], part.position[1]]);
|
|
||||||
part = result[i].keypoints.find((a) => a.part === 'leftPalm');
|
|
||||||
if (part) points.push([part.position[0], part.position[1]]);
|
|
||||||
curves(ctx, points, localOptions);
|
|
||||||
// arm right
|
|
||||||
points.length = 0;
|
|
||||||
part = result[i].keypoints.find((a) => a.part === 'rightShoulder');
|
|
||||||
if (part) points.push([part.position[0], part.position[1]]);
|
|
||||||
part = result[i].keypoints.find((a) => a.part === 'rightElbow');
|
|
||||||
if (part) points.push([part.position[0], part.position[1]]);
|
|
||||||
part = result[i].keypoints.find((a) => a.part === 'rightWrist');
|
|
||||||
if (part) points.push([part.position[0], part.position[1]]);
|
|
||||||
part = result[i].keypoints.find((a) => a.part === 'rightPalm');
|
|
||||||
if (part) points.push([part.position[0], part.position[1]]);
|
|
||||||
curves(ctx, points, localOptions);
|
|
||||||
// draw all
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
743
test/build.log
743
test/build.log
|
@ -1,24 +1,719 @@
|
||||||
2021-10-03 08:08:21 [36mINFO: [39m @vladmandic/human version 2.3.0
|
2021-10-04 15:47:15 [36mINFO: [39m @vladmandic/human version 2.3.0
|
||||||
2021-10-03 08:08:21 [36mINFO: [39m User: vlado Platform: linux Arch: x64 Node: v16.10.0
|
2021-10-04 15:47:16 [36mINFO: [39m User: vlado Platform: linux Arch: x64 Node: v16.10.0
|
||||||
2021-10-03 08:08:21 [36mINFO: [39m Application: {"name":"@vladmandic/human","version":"2.3.0"}
|
2021-10-04 15:47:16 [36mINFO: [39m Application: {"name":"@vladmandic/human","version":"2.3.0"}
|
||||||
2021-10-03 08:08:21 [36mINFO: [39m Environment: {"profile":"production","config":"build.json","tsconfig":true,"eslintrc":true,"git":true}
|
2021-10-04 15:47:16 [36mINFO: [39m Environment: {"profile":"production","config":"build.json","tsconfig":true,"eslintrc":true,"git":true}
|
||||||
2021-10-03 08:08:21 [36mINFO: [39m Toolchain: {"build":"0.5.3","esbuild":"0.13.3","typescript":"4.4.3","typedoc":"0.22.4","eslint":"7.32.0"}
|
2021-10-04 15:47:16 [36mINFO: [39m Toolchain: {"build":"0.5.3","esbuild":"0.13.3","typescript":"4.4.3","typedoc":"0.22.4","eslint":"7.32.0"}
|
||||||
2021-10-03 08:08:21 [36mINFO: [39m Build: {"profile":"production","steps":["clean","compile","typings","typedoc","lint","changelog"]}
|
2021-10-04 15:47:16 [36mINFO: [39m Build: {"profile":"production","steps":["clean","compile","typings","typedoc","lint","changelog"]}
|
||||||
2021-10-03 08:08:21 [35mSTATE:[39m Clean: {"locations":["dist/*","types/*","typedoc/*"]}
|
2021-10-04 15:47:16 [35mSTATE:[39m Clean: {"locations":["dist/*","types/*","typedoc/*"]}
|
||||||
2021-10-03 08:08:21 [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-10-04 15:47:16 [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-10-03 08:08:21 [35mSTATE:[39m Compile: {"name":"human/nodejs/cpu","format":"cjs","platform":"node","input":"src/human.ts","output":"dist/human.node.js","files":50,"inputBytes":507203,"outputBytes":422220}
|
2021-10-04 15:47:16 [35mSTATE:[39m Compile: {"name":"human/nodejs/cpu","format":"cjs","platform":"node","input":"src/human.ts","output":"dist/human.node.js","files":51,"inputBytes":511674,"outputBytes":426693}
|
||||||
2021-10-03 08:08:21 [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-10-04 15:47:16 [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-10-03 08:08:21 [35mSTATE:[39m Compile: {"name":"human/nodejs/gpu","format":"cjs","platform":"node","input":"src/human.ts","output":"dist/human.node-gpu.js","files":50,"inputBytes":507211,"outputBytes":422224}
|
2021-10-04 15:47:16 [35mSTATE:[39m Compile: {"name":"human/nodejs/gpu","format":"cjs","platform":"node","input":"src/human.ts","output":"dist/human.node-gpu.js","files":51,"inputBytes":511682,"outputBytes":426697}
|
||||||
2021-10-03 08:08:21 [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-10-04 15:47:16 [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-10-03 08:08:21 [35mSTATE:[39m Compile: {"name":"human/nodejs/wasm","format":"cjs","platform":"node","input":"src/human.ts","output":"dist/human.node-wasm.js","files":50,"inputBytes":507278,"outputBytes":422296}
|
2021-10-04 15:47:16 [35mSTATE:[39m Compile: {"name":"human/nodejs/wasm","format":"cjs","platform":"node","input":"src/human.ts","output":"dist/human.node-wasm.js","files":51,"inputBytes":511749,"outputBytes":426769}
|
||||||
2021-10-03 08:08:21 [35mSTATE:[39m Compile: {"name":"tfjs/browser/version","format":"esm","platform":"browser","input":"tfjs/tf-version.ts","output":"dist/tfjs.version.js","files":1,"inputBytes":1063,"outputBytes":1631}
|
2021-10-04 15:47:16 [35mSTATE:[39m Compile: {"name":"tfjs/browser/version","format":"esm","platform":"browser","input":"tfjs/tf-version.ts","output":"dist/tfjs.version.js","files":1,"inputBytes":1063,"outputBytes":1631}
|
||||||
2021-10-03 08:08:21 [35mSTATE:[39m Compile: {"name":"tfjs/browser/esm/nobundle","format":"esm","platform":"browser","input":"tfjs/tf-browser.ts","output":"dist/tfjs.esm.js","files":2,"inputBytes":3088,"outputBytes":793}
|
2021-10-04 15:47:16 [35mSTATE:[39m Compile: {"name":"tfjs/browser/esm/nobundle","format":"esm","platform":"browser","input":"tfjs/tf-browser.ts","output":"dist/tfjs.esm.js","files":2,"inputBytes":3088,"outputBytes":793}
|
||||||
2021-10-03 08:08:21 [35mSTATE:[39m Compile: {"name":"human/browser/esm/nobundle","format":"esm","platform":"browser","input":"src/human.ts","output":"dist/human.esm-nobundle.js","files":50,"inputBytes":506721,"outputBytes":423742}
|
2021-10-04 15:47:16 [35mSTATE:[39m Compile: {"name":"human/browser/esm/nobundle","format":"esm","platform":"browser","input":"src/human.ts","output":"dist/human.esm-nobundle.js","files":51,"inputBytes":511192,"outputBytes":428266}
|
||||||
2021-10-03 08:08:21 [35mSTATE:[39m Compile: {"name":"tfjs/browser/esm/bundle","format":"esm","platform":"browser","input":"tfjs/tf-browser.ts","output":"dist/tfjs.esm.js","files":8,"inputBytes":3088,"outputBytes":2377041}
|
2021-10-04 15:47:17 [35mSTATE:[39m Compile: {"name":"tfjs/browser/esm/bundle","format":"esm","platform":"browser","input":"tfjs/tf-browser.ts","output":"dist/tfjs.esm.js","files":8,"inputBytes":3088,"outputBytes":2377041}
|
||||||
2021-10-03 08:08:22 [35mSTATE:[39m Compile: {"name":"human/browser/iife/bundle","format":"iife","platform":"browser","input":"src/human.ts","output":"dist/human.js","files":50,"inputBytes":2882969,"outputBytes":1417710}
|
2021-10-04 15:47:17 [35mSTATE:[39m Compile: {"name":"human/browser/iife/bundle","format":"iife","platform":"browser","input":"src/human.ts","output":"dist/human.js","files":54,"inputBytes":2887440,"outputBytes":2397338}
|
||||||
2021-10-03 08:08:22 [35mSTATE:[39m Compile: {"name":"human/browser/esm/bundle","format":"esm","platform":"browser","input":"src/human.ts","output":"dist/human.esm.js","files":50,"inputBytes":2882969,"outputBytes":2628660}
|
2021-10-04 15:47:18 [35mSTATE:[39m Compile: {"name":"human/browser/esm/bundle","format":"esm","platform":"browser","input":"src/human.ts","output":"dist/human.esm.js","files":54,"inputBytes":2887440,"outputBytes":4638818}
|
||||||
2021-10-03 08:08:38 [35mSTATE:[39m Typings: {"input":"src/human.ts","output":"types","files":6}
|
2021-10-04 15:47:36 [35mSTATE:[39m Typings: {"input":"src/human.ts","output":"types","files":6}
|
||||||
2021-10-03 08:08:44 [35mSTATE:[39m TypeDoc: {"input":"src/human.ts","output":"typedoc","objects":34,"generated":true}
|
2021-10-04 15:47:42 [35mSTATE:[39m TypeDoc: {"input":"src/human.ts","output":"typedoc","objects":35,"generated":true}
|
||||||
2021-10-03 08:09:11 [35mSTATE:[39m Lint: {"locations":["*.json","src/**/*.ts","test/**/*.js","demo/**/*.js"],"files":84,"errors":0,"warnings":0}
|
2021-10-04 15:48:16 [35mSTATE:[39m Lint: {"locations":["*.json","src/**/*.ts","test/**/*.js","demo/**/*.js"],"files":86,"errors":0,"warnings":0}
|
||||||
2021-10-03 08:09:12 [35mSTATE:[39m ChangeLog: {"repository":"https://github.com/vladmandic/human","branch":"main","output":"CHANGELOG.md"}
|
2021-10-04 15:48:16 [35mSTATE:[39m ChangeLog: {"repository":"https://github.com/vladmandic/human","branch":"main","output":"CHANGELOG.md"}
|
||||||
2021-10-03 08:09:12 [36mINFO: [39m Done...
|
2021-10-04 15:48:16 [36mINFO: [39m Done...
|
||||||
|
2021-10-04 15:52:25 [36mINFO: [39m @vladmandic/human version 2.3.0
|
||||||
|
2021-10-04 15:52:25 [36mINFO: [39m User: vlado Platform: linux Arch: x64 Node: v16.10.0
|
||||||
|
2021-10-04 15:52:25 [36mINFO: [39m Application: {"name":"@vladmandic/human","version":"2.3.0"}
|
||||||
|
2021-10-04 15:52:25 [36mINFO: [39m Environment: {"profile":"development","config":"build.json","tsconfig":true,"eslintrc":true,"git":true}
|
||||||
|
2021-10-04 15:52:25 [36mINFO: [39m Toolchain: {"build":"0.5.3","esbuild":"0.13.3","typescript":"4.4.3","typedoc":"0.22.4","eslint":"7.32.0"}
|
||||||
|
2021-10-04 15:52:25 [36mINFO: [39m Build: {"profile":"development","steps":["serve","watch","compile"]}
|
||||||
|
2021-10-04 15:52:25 [35mSTATE:[39m WebServer: {"ssl":false,"port":10030,"root":"."}
|
||||||
|
2021-10-04 15:52:25 [35mSTATE:[39m WebServer: {"ssl":true,"port":10031,"root":".","sslKey":"node_modules/@vladmandic/build/cert/https.key","sslCrt":"node_modules/@vladmandic/build/cert/https.crt"}
|
||||||
|
2021-10-04 15:52:26 [35mSTATE:[39m Watch: {"locations":["src/**","README.md","src/**/*","tfjs/**/*"]}
|
||||||
|
2021-10-04 15:52:26 [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-10-04 15:52:26 [35mSTATE:[39m Compile: {"name":"human/nodejs/cpu","format":"cjs","platform":"node","input":"src/human.ts","output":"dist/human.node.js","files":51,"inputBytes":507846,"outputBytes":422913}
|
||||||
|
2021-10-04 15:52:26 [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-10-04 15:52:26 [35mSTATE:[39m Compile: {"name":"human/nodejs/gpu","format":"cjs","platform":"node","input":"src/human.ts","output":"dist/human.node-gpu.js","files":51,"inputBytes":507854,"outputBytes":422917}
|
||||||
|
2021-10-04 15:52:26 [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-10-04 15:52:26 [35mSTATE:[39m Compile: {"name":"human/nodejs/wasm","format":"cjs","platform":"node","input":"src/human.ts","output":"dist/human.node-wasm.js","files":51,"inputBytes":507921,"outputBytes":422989}
|
||||||
|
2021-10-04 15:52:26 [35mSTATE:[39m Compile: {"name":"tfjs/browser/version","format":"esm","platform":"browser","input":"tfjs/tf-version.ts","output":"dist/tfjs.version.js","files":1,"inputBytes":1063,"outputBytes":1631}
|
||||||
|
2021-10-04 15:52:26 [35mSTATE:[39m Compile: {"name":"tfjs/browser/esm/nobundle","format":"esm","platform":"browser","input":"tfjs/tf-browser.ts","output":"dist/tfjs.esm.js","files":2,"inputBytes":3088,"outputBytes":793}
|
||||||
|
2021-10-04 15:52:26 [35mSTATE:[39m Compile: {"name":"human/browser/esm/nobundle","format":"esm","platform":"browser","input":"src/human.ts","output":"dist/human.esm-nobundle.js","files":51,"inputBytes":507364,"outputBytes":424486}
|
||||||
|
2021-10-04 15:52:27 [35mSTATE:[39m Compile: {"name":"tfjs/browser/esm/bundle","format":"esm","platform":"browser","input":"tfjs/tf-browser.ts","output":"dist/tfjs.esm.js","files":8,"inputBytes":3088,"outputBytes":2377041}
|
||||||
|
2021-10-04 15:52:27 [35mSTATE:[39m Compile: {"name":"human/browser/iife/bundle","format":"iife","platform":"browser","input":"src/human.ts","output":"dist/human.js","files":54,"inputBytes":2883612,"outputBytes":2395163}
|
||||||
|
2021-10-04 15:52:28 [35mSTATE:[39m Compile: {"name":"human/browser/esm/bundle","format":"esm","platform":"browser","input":"src/human.ts","output":"dist/human.esm.js","files":54,"inputBytes":2883612,"outputBytes":4635038}
|
||||||
|
2021-10-04 15:52:28 [36mINFO: [39m Listening...
|
||||||
|
2021-10-04 15:54:50 [32mDATA: [39m HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"text/html","size":7842,"url":"/","remote":"::ffff:192.168.0.200"}
|
||||||
|
2021-10-04 15:54:50 [32mDATA: [39m HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"text/css","size":107884,"url":"/icons.css","remote":"::ffff:192.168.0.200"}
|
||||||
|
2021-10-04 15:54:50 [32mDATA: [39m HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"text/javascript","size":47584,"url":"/index.js","remote":"::ffff:192.168.0.200"}
|
||||||
|
2021-10-04 15:54:50 [32mDATA: [39m HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"text/javascript","size":4635038,"url":"/dist/human.esm.js","remote":"::ffff:192.168.0.200"}
|
||||||
|
2021-10-04 15:54:50 [32mDATA: [39m HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"text/javascript","size":14222,"url":"/helpers/menu.js","remote":"::ffff:192.168.0.200"}
|
||||||
|
2021-10-04 15:54:50 [32mDATA: [39m HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"text/javascript","size":10894,"url":"/helpers/gl-bench.js","remote":"::ffff:192.168.0.200"}
|
||||||
|
2021-10-04 15:54:50 [32mDATA: [39m HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"text/javascript","size":3406,"url":"/helpers/webrtc.js","remote":"::ffff:192.168.0.200"}
|
||||||
|
2021-10-04 15:54:50 [32mDATA: [39m HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"text/javascript","size":5785,"url":"/helpers/jsonview.js","remote":"::ffff:192.168.0.200"}
|
||||||
|
2021-10-04 15:54:50 [32mDATA: [39m HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"font/woff2","size":181500,"url":"/assets/lato-light.woff2","remote":"::ffff:192.168.0.200"}
|
||||||
|
2021-10-04 15:54:50 [32mDATA: [39m HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"application/octet-stream","size":12154450,"url":"/dist/human.esm.js.map","remote":"::ffff:192.168.0.200"}
|
||||||
|
2021-10-04 15:54:50 [32mDATA: [39m HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"text/javascript","size":4115,"url":"/index-pwa.js","remote":"::ffff:192.168.0.200"}
|
||||||
|
2021-10-04 15:55:27 [36mINFO: [39m Watch: {"event":"modify","input":"src/tfjs/backend.ts"}
|
||||||
|
2021-10-04 15:55: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-10-04 15:55:27 [35mSTATE:[39m Compile: {"name":"human/nodejs/cpu","format":"cjs","platform":"node","input":"src/human.ts","output":"dist/human.node.js","files":51,"inputBytes":507739,"outputBytes":422802}
|
||||||
|
2021-10-04 15:55: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-10-04 15:55:27 [35mSTATE:[39m Compile: {"name":"human/nodejs/gpu","format":"cjs","platform":"node","input":"src/human.ts","output":"dist/human.node-gpu.js","files":51,"inputBytes":507747,"outputBytes":422806}
|
||||||
|
2021-10-04 15:55: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-10-04 15:55:27 [35mSTATE:[39m Compile: {"name":"human/nodejs/wasm","format":"cjs","platform":"node","input":"src/human.ts","output":"dist/human.node-wasm.js","files":51,"inputBytes":507814,"outputBytes":422878}
|
||||||
|
2021-10-04 15:55: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":1631}
|
||||||
|
2021-10-04 15:55: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":3088,"outputBytes":793}
|
||||||
|
2021-10-04 15:55:27 [35mSTATE:[39m Compile: {"name":"human/browser/esm/nobundle","format":"esm","platform":"browser","input":"src/human.ts","output":"dist/human.esm-nobundle.js","files":51,"inputBytes":507257,"outputBytes":424351}
|
||||||
|
2021-10-04 15:55:28 [35mSTATE:[39m Compile: {"name":"tfjs/browser/esm/bundle","format":"esm","platform":"browser","input":"tfjs/tf-browser.ts","output":"dist/tfjs.esm.js","files":8,"inputBytes":3088,"outputBytes":2377041}
|
||||||
|
2021-10-04 15:55:28 [35mSTATE:[39m Compile: {"name":"human/browser/iife/bundle","format":"iife","platform":"browser","input":"src/human.ts","output":"dist/human.js","files":54,"inputBytes":2883505,"outputBytes":2395083}
|
||||||
|
2021-10-04 15:55:29 [35mSTATE:[39m Compile: {"name":"human/browser/esm/bundle","format":"esm","platform":"browser","input":"src/human.ts","output":"dist/human.esm.js","files":54,"inputBytes":2883505,"outputBytes":4634937}
|
||||||
|
2021-10-04 15:55:31 [32mDATA: [39m HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"text/html","size":7842,"url":"/","remote":"::ffff:192.168.0.200"}
|
||||||
|
2021-10-04 15:55:31 [32mDATA: [39m HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"text/css","size":107884,"url":"/icons.css","remote":"::ffff:192.168.0.200"}
|
||||||
|
2021-10-04 15:55:31 [32mDATA: [39m HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"text/javascript","size":47584,"url":"/index.js","remote":"::ffff:192.168.0.200"}
|
||||||
|
2021-10-04 15:55:31 [32mDATA: [39m HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"text/javascript","size":4634937,"url":"/dist/human.esm.js","remote":"::ffff:192.168.0.200"}
|
||||||
|
2021-10-04 15:55:31 [32mDATA: [39m HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"text/javascript","size":14222,"url":"/helpers/menu.js","remote":"::ffff:192.168.0.200"}
|
||||||
|
2021-10-04 15:55:31 [32mDATA: [39m HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"text/javascript","size":10894,"url":"/helpers/gl-bench.js","remote":"::ffff:192.168.0.200"}
|
||||||
|
2021-10-04 15:55:31 [32mDATA: [39m HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"text/javascript","size":3406,"url":"/helpers/webrtc.js","remote":"::ffff:192.168.0.200"}
|
||||||
|
2021-10-04 15:55:31 [32mDATA: [39m HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"text/javascript","size":5785,"url":"/helpers/jsonview.js","remote":"::ffff:192.168.0.200"}
|
||||||
|
2021-10-04 15:55:31 [32mDATA: [39m HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"font/woff2","size":181500,"url":"/assets/lato-light.woff2","remote":"::ffff:192.168.0.200"}
|
||||||
|
2021-10-04 15:55:32 [32mDATA: [39m HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"application/octet-stream","size":12154285,"url":"/dist/human.esm.js.map","remote":"::ffff:192.168.0.200"}
|
||||||
|
2021-10-04 15:55:32 [32mDATA: [39m HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"image/x-icon","size":261950,"url":"/favicon.ico","remote":"::ffff:192.168.0.200"}
|
||||||
|
2021-10-04 15:55:32 [32mDATA: [39m HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"text/javascript","size":4115,"url":"/index-pwa.js","remote":"::ffff:192.168.0.200"}
|
||||||
|
2021-10-04 15:55:54 [32mDATA: [39m HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"text/html","size":7842,"url":"/","remote":"::ffff:192.168.0.200"}
|
||||||
|
2021-10-04 15:55:55 [32mDATA: [39m HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"text/css","size":107884,"url":"/icons.css","remote":"::ffff:192.168.0.200"}
|
||||||
|
2021-10-04 15:55:55 [32mDATA: [39m HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"text/javascript","size":47584,"url":"/index.js","remote":"::ffff:192.168.0.200"}
|
||||||
|
2021-10-04 15:55:55 [32mDATA: [39m HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"text/javascript","size":4634937,"url":"/dist/human.esm.js","remote":"::ffff:192.168.0.200"}
|
||||||
|
2021-10-04 15:55:55 [32mDATA: [39m HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"text/javascript","size":14222,"url":"/helpers/menu.js","remote":"::ffff:192.168.0.200"}
|
||||||
|
2021-10-04 15:55:55 [32mDATA: [39m HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"text/javascript","size":10894,"url":"/helpers/gl-bench.js","remote":"::ffff:192.168.0.200"}
|
||||||
|
2021-10-04 15:55:55 [32mDATA: [39m HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"text/javascript","size":3406,"url":"/helpers/webrtc.js","remote":"::ffff:192.168.0.200"}
|
||||||
|
2021-10-04 15:55:55 [32mDATA: [39m HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"text/javascript","size":5785,"url":"/helpers/jsonview.js","remote":"::ffff:192.168.0.200"}
|
||||||
|
2021-10-04 15:55:55 [32mDATA: [39m HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"font/woff2","size":181500,"url":"/assets/lato-light.woff2","remote":"::ffff:192.168.0.200"}
|
||||||
|
2021-10-04 15:55:55 [32mDATA: [39m HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"application/octet-stream","size":12154285,"url":"/dist/human.esm.js.map","remote":"::ffff:192.168.0.200"}
|
||||||
|
2021-10-04 15:55:55 [32mDATA: [39m HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"image/x-icon","size":261950,"url":"/favicon.ico","remote":"::ffff:192.168.0.200"}
|
||||||
|
2021-10-04 15:55:55 [32mDATA: [39m HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"text/javascript","size":4115,"url":"/index-pwa.js","remote":"::ffff:192.168.0.200"}
|
||||||
|
2021-10-04 15:56:23 [32mDATA: [39m HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"text/javascript","size":1816,"url":"/index-worker.js","remote":"::ffff:192.168.0.200"}
|
||||||
|
2021-10-04 15:56:23 [32mDATA: [39m HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"text/javascript","size":2395083,"url":"/dist/human.js","remote":"::ffff:192.168.0.200"}
|
||||||
|
2021-10-04 15:56:23 [32mDATA: [39m HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"application/json","size":161813,"url":"/models/movenet-lightning.json","remote":"::ffff:192.168.0.200"}
|
||||||
|
2021-10-04 15:56:23 [32mDATA: [39m HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"application/octet-stream","size":4650216,"url":"/models/movenet-lightning.bin","remote":"::ffff:192.168.0.200"}
|
||||||
|
2021-10-04 15:56:38 [32mDATA: [39m HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"text/html","size":7842,"url":"/","remote":"::ffff:192.168.0.200"}
|
||||||
|
2021-10-04 15:56:38 [32mDATA: [39m HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"text/css","size":107884,"url":"/icons.css","remote":"::ffff:192.168.0.200"}
|
||||||
|
2021-10-04 15:56:38 [32mDATA: [39m HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"text/javascript","size":47584,"url":"/index.js","remote":"::ffff:192.168.0.200"}
|
||||||
|
2021-10-04 15:56:38 [32mDATA: [39m HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"text/javascript","size":4634937,"url":"/dist/human.esm.js","remote":"::ffff:192.168.0.200"}
|
||||||
|
2021-10-04 15:56:38 [32mDATA: [39m HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"text/javascript","size":14222,"url":"/helpers/menu.js","remote":"::ffff:192.168.0.200"}
|
||||||
|
2021-10-04 15:56:38 [32mDATA: [39m HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"text/javascript","size":10894,"url":"/helpers/gl-bench.js","remote":"::ffff:192.168.0.200"}
|
||||||
|
2021-10-04 15:56:38 [32mDATA: [39m HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"text/javascript","size":3406,"url":"/helpers/webrtc.js","remote":"::ffff:192.168.0.200"}
|
||||||
|
2021-10-04 15:56:38 [32mDATA: [39m HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"text/javascript","size":5785,"url":"/helpers/jsonview.js","remote":"::ffff:192.168.0.200"}
|
||||||
|
2021-10-04 15:56:38 [32mDATA: [39m HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"font/woff2","size":181500,"url":"/assets/lato-light.woff2","remote":"::ffff:192.168.0.200"}
|
||||||
|
2021-10-04 15:56:38 [32mDATA: [39m HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"application/octet-stream","size":12154285,"url":"/dist/human.esm.js.map","remote":"::ffff:192.168.0.200"}
|
||||||
|
2021-10-04 15:56:39 [32mDATA: [39m HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"image/x-icon","size":261950,"url":"/favicon.ico","remote":"::ffff:192.168.0.200"}
|
||||||
|
2021-10-04 15:56:39 [32mDATA: [39m HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"text/javascript","size":4115,"url":"/index-pwa.js","remote":"::ffff:192.168.0.200"}
|
||||||
|
2021-10-04 15:56:42 [32mDATA: [39m HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"text/javascript","size":1816,"url":"/index-worker.js","remote":"::ffff:192.168.0.200"}
|
||||||
|
2021-10-04 15:56:42 [32mDATA: [39m HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"text/javascript","size":2395083,"url":"/dist/human.js","remote":"::ffff:192.168.0.200"}
|
||||||
|
2021-10-04 15:56:43 [32mDATA: [39m HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"application/json","size":161813,"url":"/models/movenet-lightning.json","remote":"::ffff:192.168.0.200"}
|
||||||
|
2021-10-04 15:56:43 [32mDATA: [39m HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"application/octet-stream","size":4650216,"url":"/models/movenet-lightning.bin","remote":"::ffff:192.168.0.200"}
|
||||||
|
2021-10-04 15:58:03 [32mDATA: [39m HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"text/html","size":7842,"url":"/","remote":"::ffff:192.168.0.200"}
|
||||||
|
2021-10-04 15:58:03 [32mDATA: [39m HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"text/css","size":107884,"url":"/icons.css","remote":"::ffff:192.168.0.200"}
|
||||||
|
2021-10-04 15:58:03 [32mDATA: [39m HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"text/javascript","size":47585,"url":"/index.js","remote":"::ffff:192.168.0.200"}
|
||||||
|
2021-10-04 15:58:03 [32mDATA: [39m HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"text/javascript","size":4634937,"url":"/dist/human.esm.js","remote":"::ffff:192.168.0.200"}
|
||||||
|
2021-10-04 15:58:03 [32mDATA: [39m HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"text/javascript","size":14222,"url":"/helpers/menu.js","remote":"::ffff:192.168.0.200"}
|
||||||
|
2021-10-04 15:58:03 [32mDATA: [39m HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"text/javascript","size":10894,"url":"/helpers/gl-bench.js","remote":"::ffff:192.168.0.200"}
|
||||||
|
2021-10-04 15:58:03 [32mDATA: [39m HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"text/javascript","size":3406,"url":"/helpers/webrtc.js","remote":"::ffff:192.168.0.200"}
|
||||||
|
2021-10-04 15:58:03 [32mDATA: [39m HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"text/javascript","size":5785,"url":"/helpers/jsonview.js","remote":"::ffff:192.168.0.200"}
|
||||||
|
2021-10-04 15:58:03 [32mDATA: [39m HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"font/woff2","size":181500,"url":"/assets/lato-light.woff2","remote":"::ffff:192.168.0.200"}
|
||||||
|
2021-10-04 15:58:04 [32mDATA: [39m HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"image/x-icon","size":261950,"url":"/favicon.ico","remote":"::ffff:192.168.0.200"}
|
||||||
|
2021-10-04 15:58:22 [32mDATA: [39m HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"text/html","size":7842,"url":"/","remote":"::ffff:192.168.0.200"}
|
||||||
|
2021-10-04 15:58:22 [32mDATA: [39m HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"text/css","size":107884,"url":"/icons.css","remote":"::ffff:192.168.0.200"}
|
||||||
|
2021-10-04 15:58:22 [32mDATA: [39m HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"text/javascript","size":47585,"url":"/index.js","remote":"::ffff:192.168.0.200"}
|
||||||
|
2021-10-04 15:58:22 [32mDATA: [39m HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"text/javascript","size":4634937,"url":"/dist/human.esm.js","remote":"::ffff:192.168.0.200"}
|
||||||
|
2021-10-04 15:58:22 [32mDATA: [39m HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"text/javascript","size":14222,"url":"/helpers/menu.js","remote":"::ffff:192.168.0.200"}
|
||||||
|
2021-10-04 15:58:22 [32mDATA: [39m HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"text/javascript","size":10894,"url":"/helpers/gl-bench.js","remote":"::ffff:192.168.0.200"}
|
||||||
|
2021-10-04 15:58:22 [32mDATA: [39m HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"text/javascript","size":3406,"url":"/helpers/webrtc.js","remote":"::ffff:192.168.0.200"}
|
||||||
|
2021-10-04 15:58:22 [32mDATA: [39m HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"text/javascript","size":5785,"url":"/helpers/jsonview.js","remote":"::ffff:192.168.0.200"}
|
||||||
|
2021-10-04 15:58:22 [32mDATA: [39m HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"font/woff2","size":181500,"url":"/assets/lato-light.woff2","remote":"::ffff:192.168.0.200"}
|
||||||
|
2021-10-04 15:58:22 [32mDATA: [39m HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"application/octet-stream","size":12154285,"url":"/dist/human.esm.js.map","remote":"::ffff:192.168.0.200"}
|
||||||
|
2021-10-04 15:58:23 [32mDATA: [39m HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"text/javascript","size":4115,"url":"/index-pwa.js","remote":"::ffff:192.168.0.200"}
|
||||||
|
2021-10-04 15:58:28 [32mDATA: [39m HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"text/javascript","size":1816,"url":"/index-worker.js","remote":"::ffff:192.168.0.200"}
|
||||||
|
2021-10-04 15:58:28 [32mDATA: [39m HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"text/javascript","size":2395083,"url":"/dist/human.js","remote":"::ffff:192.168.0.200"}
|
||||||
|
2021-10-04 15:58:28 [32mDATA: [39m HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"application/json","size":161813,"url":"/models/movenet-lightning.json","remote":"::ffff:192.168.0.200"}
|
||||||
|
2021-10-04 15:58:29 [32mDATA: [39m HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"application/octet-stream","size":4650216,"url":"/models/movenet-lightning.bin","remote":"::ffff:192.168.0.200"}
|
||||||
|
2021-10-04 15:59:01 [36mINFO: [39m @vladmandic/human version 2.3.0
|
||||||
|
2021-10-04 15:59:01 [36mINFO: [39m User: vlado Platform: linux Arch: x64 Node: v16.10.0
|
||||||
|
2021-10-04 15:59:01 [36mINFO: [39m Application: {"name":"@vladmandic/human","version":"2.3.0"}
|
||||||
|
2021-10-04 15:59:01 [36mINFO: [39m Environment: {"profile":"development","config":"build.json","tsconfig":true,"eslintrc":true,"git":true}
|
||||||
|
2021-10-04 15:59:01 [36mINFO: [39m Toolchain: {"build":"0.5.3","esbuild":"0.13.3","typescript":"4.4.3","typedoc":"0.22.4","eslint":"7.32.0"}
|
||||||
|
2021-10-04 15:59:01 [36mINFO: [39m Build: {"profile":"development","steps":["serve","watch","compile"]}
|
||||||
|
2021-10-04 15:59:01 [35mSTATE:[39m WebServer: {"ssl":false,"port":10030,"root":"."}
|
||||||
|
2021-10-04 15:59:01 [35mSTATE:[39m WebServer: {"ssl":true,"port":10031,"root":".","sslKey":"node_modules/@vladmandic/build/cert/https.key","sslCrt":"node_modules/@vladmandic/build/cert/https.crt"}
|
||||||
|
2021-10-04 15:59:01 [35mSTATE:[39m Watch: {"locations":["src/**","README.md","src/**/*","tfjs/**/*"]}
|
||||||
|
2021-10-04 15:59:01 [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-10-04 15:59:01 [35mSTATE:[39m Compile: {"name":"human/nodejs/cpu","format":"cjs","platform":"node","input":"src/human.ts","output":"dist/human.node.js","files":51,"inputBytes":507739,"outputBytes":422802}
|
||||||
|
2021-10-04 15:59:01 [35mSTATE:[39m Compile: {"name":"tfjs/nodejs/gpu","format":"cjs","platform":"node","input":"tfjs/tf-node-gpu.ts","output":"dist/tfjs.esm.js","files":1,"inputBytes":110,"outputBytes":1283}
|
||||||
|
2021-10-04 15:59:01 [35mSTATE:[39m Compile: {"name":"human/nodejs/gpu","format":"cjs","platform":"node","input":"src/human.ts","output":"dist/human.node-gpu.js","files":51,"inputBytes":507747,"outputBytes":422806}
|
||||||
|
2021-10-04 15:59:01 [35mSTATE:[39m Compile: {"name":"tfjs/nodejs/wasm","format":"cjs","platform":"node","input":"tfjs/tf-node-wasm.ts","output":"dist/tfjs.esm.js","files":1,"inputBytes":149,"outputBytes":1350}
|
||||||
|
2021-10-04 15:59:01 [35mSTATE:[39m Compile: {"name":"human/nodejs/wasm","format":"cjs","platform":"node","input":"src/human.ts","output":"dist/human.node-wasm.js","files":51,"inputBytes":507814,"outputBytes":422878}
|
||||||
|
2021-10-04 15:59:01 [35mSTATE:[39m Compile: {"name":"tfjs/browser/version","format":"esm","platform":"browser","input":"tfjs/tf-version.ts","output":"dist/tfjs.version.js","files":1,"inputBytes":1063,"outputBytes":1631}
|
||||||
|
2021-10-04 15:59:01 [35mSTATE:[39m Compile: {"name":"tfjs/browser/esm/nobundle","format":"esm","platform":"browser","input":"tfjs/tf-browser.ts","output":"dist/tfjs.esm.js","files":2,"inputBytes":3088,"outputBytes":793}
|
||||||
|
2021-10-04 15:59:01 [35mSTATE:[39m Compile: {"name":"human/browser/esm/nobundle","format":"esm","platform":"browser","input":"src/human.ts","output":"dist/human.esm-nobundle.js","files":51,"inputBytes":507257,"outputBytes":424351}
|
||||||
|
2021-10-04 15:59:02 [35mSTATE:[39m Compile: {"name":"tfjs/browser/esm/bundle","format":"esm","platform":"browser","input":"tfjs/tf-browser.ts","output":"dist/tfjs.esm.js","files":8,"inputBytes":3088,"outputBytes":2377041}
|
||||||
|
2021-10-04 15:59:02 [35mSTATE:[39m Compile: {"name":"human/browser/iife/bundle","format":"iife","platform":"browser","input":"src/human.ts","output":"dist/human.js","files":54,"inputBytes":2883505,"outputBytes":2395083}
|
||||||
|
2021-10-04 15:59:03 [35mSTATE:[39m Compile: {"name":"human/browser/esm/bundle","format":"esm","platform":"browser","input":"src/human.ts","output":"dist/human.esm.js","files":54,"inputBytes":2883505,"outputBytes":4634937}
|
||||||
|
2021-10-04 15:59:03 [36mINFO: [39m Listening...
|
||||||
|
2021-10-04 15:59:08 [32mDATA: [39m HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"text/html","size":7842,"url":"/","remote":"::ffff:192.168.0.200"}
|
||||||
|
2021-10-04 15:59:09 [32mDATA: [39m HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"text/css","size":107884,"url":"/icons.css","remote":"::ffff:192.168.0.200"}
|
||||||
|
2021-10-04 15:59:09 [32mDATA: [39m HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"text/javascript","size":47585,"url":"/index.js","remote":"::ffff:192.168.0.200"}
|
||||||
|
2021-10-04 15:59:09 [32mDATA: [39m HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"text/javascript","size":4634937,"url":"/dist/human.esm.js","remote":"::ffff:192.168.0.200"}
|
||||||
|
2021-10-04 15:59:09 [32mDATA: [39m HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"text/javascript","size":14222,"url":"/helpers/menu.js","remote":"::ffff:192.168.0.200"}
|
||||||
|
2021-10-04 15:59:09 [32mDATA: [39m HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"text/javascript","size":10894,"url":"/helpers/gl-bench.js","remote":"::ffff:192.168.0.200"}
|
||||||
|
2021-10-04 15:59:09 [32mDATA: [39m HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"text/javascript","size":3406,"url":"/helpers/webrtc.js","remote":"::ffff:192.168.0.200"}
|
||||||
|
2021-10-04 15:59:09 [32mDATA: [39m HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"text/javascript","size":5785,"url":"/helpers/jsonview.js","remote":"::ffff:192.168.0.200"}
|
||||||
|
2021-10-04 15:59:09 [32mDATA: [39m HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"font/woff2","size":181500,"url":"/assets/lato-light.woff2","remote":"::ffff:192.168.0.200"}
|
||||||
|
2021-10-04 15:59:09 [32mDATA: [39m HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"application/octet-stream","size":12154285,"url":"/dist/human.esm.js.map","remote":"::ffff:192.168.0.200"}
|
||||||
|
2021-10-04 15:59:09 [32mDATA: [39m HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"image/x-icon","size":261950,"url":"/favicon.ico","remote":"::ffff:192.168.0.200"}
|
||||||
|
2021-10-04 15:59:09 [32mDATA: [39m HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"text/javascript","size":4115,"url":"/index-pwa.js","remote":"::ffff:192.168.0.200"}
|
||||||
|
2021-10-04 15:59:17 [32mDATA: [39m HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"text/javascript","size":1816,"url":"/index-worker.js","remote":"::ffff:192.168.0.200"}
|
||||||
|
2021-10-04 15:59:17 [32mDATA: [39m HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"text/javascript","size":2395083,"url":"/dist/human.js","remote":"::ffff:192.168.0.200"}
|
||||||
|
2021-10-04 15:59:17 [32mDATA: [39m HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"application/json","size":161813,"url":"/models/movenet-lightning.json","remote":"::ffff:192.168.0.200"}
|
||||||
|
2021-10-04 15:59:18 [32mDATA: [39m HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"application/octet-stream","size":4650216,"url":"/models/movenet-lightning.bin","remote":"::ffff:192.168.0.200"}
|
||||||
|
2021-10-04 16:00:49 [32mDATA: [39m HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"text/html","size":7842,"url":"/","remote":"::ffff:192.168.0.200"}
|
||||||
|
2021-10-04 16:00:49 [32mDATA: [39m HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"text/css","size":107884,"url":"/icons.css","remote":"::ffff:192.168.0.200"}
|
||||||
|
2021-10-04 16:00:49 [32mDATA: [39m HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"text/javascript","size":47585,"url":"/index.js","remote":"::ffff:192.168.0.200"}
|
||||||
|
2021-10-04 16:00:49 [32mDATA: [39m HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"text/javascript","size":4634937,"url":"/dist/human.esm.js","remote":"::ffff:192.168.0.200"}
|
||||||
|
2021-10-04 16:00:49 [32mDATA: [39m HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"text/javascript","size":14222,"url":"/helpers/menu.js","remote":"::ffff:192.168.0.200"}
|
||||||
|
2021-10-04 16:00:49 [32mDATA: [39m HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"text/javascript","size":10894,"url":"/helpers/gl-bench.js","remote":"::ffff:192.168.0.200"}
|
||||||
|
2021-10-04 16:00:49 [32mDATA: [39m HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"text/javascript","size":3406,"url":"/helpers/webrtc.js","remote":"::ffff:192.168.0.200"}
|
||||||
|
2021-10-04 16:00:49 [32mDATA: [39m HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"text/javascript","size":5785,"url":"/helpers/jsonview.js","remote":"::ffff:192.168.0.200"}
|
||||||
|
2021-10-04 16:00:49 [32mDATA: [39m HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"font/woff2","size":181500,"url":"/assets/lato-light.woff2","remote":"::ffff:192.168.0.200"}
|
||||||
|
2021-10-04 16:00:50 [32mDATA: [39m HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"image/x-icon","size":261950,"url":"/favicon.ico","remote":"::ffff:192.168.0.200"}
|
||||||
|
2021-10-04 16:00:51 [32mDATA: [39m HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"application/octet-stream","size":12154285,"url":"/dist/human.esm.js.map","remote":"::ffff:192.168.0.200"}
|
||||||
|
2021-10-04 16:00:51 [32mDATA: [39m HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"text/javascript","size":4115,"url":"/index-pwa.js","remote":"::ffff:192.168.0.200"}
|
||||||
|
2021-10-04 16:00:55 [32mDATA: [39m HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"text/javascript","size":1816,"url":"/index-worker.js","remote":"::ffff:192.168.0.200"}
|
||||||
|
2021-10-04 16:00:55 [32mDATA: [39m HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"text/javascript","size":2395083,"url":"/dist/human.js","remote":"::ffff:192.168.0.200"}
|
||||||
|
2021-10-04 16:00:55 [32mDATA: [39m HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"application/json","size":79038,"url":"/models/blazeface.json","remote":"::ffff:192.168.0.200"}
|
||||||
|
2021-10-04 16:00:55 [32mDATA: [39m HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"application/json","size":89289,"url":"/models/facemesh.json","remote":"::ffff:192.168.0.200"}
|
||||||
|
2021-10-04 16:00:55 [32mDATA: [39m HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"application/json","size":122025,"url":"/models/iris.json","remote":"::ffff:192.168.0.200"}
|
||||||
|
2021-10-04 16:00:55 [32mDATA: [39m HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"application/json","size":17980,"url":"/models/emotion.json","remote":"::ffff:192.168.0.200"}
|
||||||
|
2021-10-04 16:00:55 [32mDATA: [39m HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"application/json","size":71432,"url":"/models/faceres.json","remote":"::ffff:192.168.0.200"}
|
||||||
|
2021-10-04 16:00:55 [32mDATA: [39m HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"application/octet-stream","size":538928,"url":"/models/blazeface.bin","remote":"::ffff:192.168.0.200"}
|
||||||
|
2021-10-04 16:00:55 [32mDATA: [39m HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"application/octet-stream","size":820516,"url":"/models/emotion.bin","remote":"::ffff:192.168.0.200"}
|
||||||
|
2021-10-04 16:00:55 [32mDATA: [39m HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"application/octet-stream","size":2955780,"url":"/models/facemesh.bin","remote":"::ffff:192.168.0.200"}
|
||||||
|
2021-10-04 16:00:55 [32mDATA: [39m HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"application/octet-stream","size":6978814,"url":"/models/faceres.bin","remote":"::ffff:192.168.0.200"}
|
||||||
|
2021-10-04 16:00:55 [32mDATA: [39m HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"application/octet-stream","size":2599092,"url":"/models/iris.bin","remote":"::ffff:192.168.0.200"}
|
||||||
|
2021-10-04 16:02:44 [36mINFO: [39m Watch: {"event":"modify","input":"src/body/movenet.ts"}
|
||||||
|
2021-10-04 16:02:44 [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-10-04 16:02:44 [35mSTATE:[39m Compile: {"name":"human/nodejs/cpu","format":"cjs","platform":"node","input":"src/human.ts","output":"dist/human.node.js","files":51,"inputBytes":507813,"outputBytes":422876}
|
||||||
|
2021-10-04 16:02:44 [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-10-04 16:02:44 [35mSTATE:[39m Compile: {"name":"human/nodejs/gpu","format":"cjs","platform":"node","input":"src/human.ts","output":"dist/human.node-gpu.js","files":51,"inputBytes":507821,"outputBytes":422880}
|
||||||
|
2021-10-04 16:02:44 [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-10-04 16:02:44 [35mSTATE:[39m Compile: {"name":"human/nodejs/wasm","format":"cjs","platform":"node","input":"src/human.ts","output":"dist/human.node-wasm.js","files":51,"inputBytes":507888,"outputBytes":422952}
|
||||||
|
2021-10-04 16:02:44 [35mSTATE:[39m Compile: {"name":"tfjs/browser/version","format":"esm","platform":"browser","input":"tfjs/tf-version.ts","output":"dist/tfjs.version.js","files":1,"inputBytes":1063,"outputBytes":1631}
|
||||||
|
2021-10-04 16:02:44 [35mSTATE:[39m Compile: {"name":"tfjs/browser/esm/nobundle","format":"esm","platform":"browser","input":"tfjs/tf-browser.ts","output":"dist/tfjs.esm.js","files":2,"inputBytes":3088,"outputBytes":793}
|
||||||
|
2021-10-04 16:02:44 [35mSTATE:[39m Compile: {"name":"human/browser/esm/nobundle","format":"esm","platform":"browser","input":"src/human.ts","output":"dist/human.esm-nobundle.js","files":51,"inputBytes":507331,"outputBytes":424425}
|
||||||
|
2021-10-04 16:02:45 [35mSTATE:[39m Compile: {"name":"tfjs/browser/esm/bundle","format":"esm","platform":"browser","input":"tfjs/tf-browser.ts","output":"dist/tfjs.esm.js","files":8,"inputBytes":3088,"outputBytes":2377041}
|
||||||
|
2021-10-04 16:02:45 [35mSTATE:[39m Compile: {"name":"human/browser/iife/bundle","format":"iife","platform":"browser","input":"src/human.ts","output":"dist/human.js","files":54,"inputBytes":2883579,"outputBytes":2395142}
|
||||||
|
2021-10-04 16:02:46 [35mSTATE:[39m Compile: {"name":"human/browser/esm/bundle","format":"esm","platform":"browser","input":"src/human.ts","output":"dist/human.esm.js","files":54,"inputBytes":2883579,"outputBytes":4635011}
|
||||||
|
2021-10-04 16:02:48 [32mDATA: [39m HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"text/html","size":7842,"url":"/","remote":"::ffff:192.168.0.200"}
|
||||||
|
2021-10-04 16:02:48 [32mDATA: [39m HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"text/css","size":107884,"url":"/icons.css","remote":"::ffff:192.168.0.200"}
|
||||||
|
2021-10-04 16:02:48 [32mDATA: [39m HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"text/javascript","size":47585,"url":"/index.js","remote":"::ffff:192.168.0.200"}
|
||||||
|
2021-10-04 16:02:48 [32mDATA: [39m HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"text/javascript","size":4635011,"url":"/dist/human.esm.js","remote":"::ffff:192.168.0.200"}
|
||||||
|
2021-10-04 16:02:48 [32mDATA: [39m HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"text/javascript","size":14222,"url":"/helpers/menu.js","remote":"::ffff:192.168.0.200"}
|
||||||
|
2021-10-04 16:02:48 [32mDATA: [39m HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"text/javascript","size":10894,"url":"/helpers/gl-bench.js","remote":"::ffff:192.168.0.200"}
|
||||||
|
2021-10-04 16:02:48 [32mDATA: [39m HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"text/javascript","size":3406,"url":"/helpers/webrtc.js","remote":"::ffff:192.168.0.200"}
|
||||||
|
2021-10-04 16:02:48 [32mDATA: [39m HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"text/javascript","size":5785,"url":"/helpers/jsonview.js","remote":"::ffff:192.168.0.200"}
|
||||||
|
2021-10-04 16:02:48 [32mDATA: [39m HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"font/woff2","size":181500,"url":"/assets/lato-light.woff2","remote":"::ffff:192.168.0.200"}
|
||||||
|
2021-10-04 16:02:49 [32mDATA: [39m HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"application/octet-stream","size":12154407,"url":"/dist/human.esm.js.map","remote":"::ffff:192.168.0.200"}
|
||||||
|
2021-10-04 16:02:49 [32mDATA: [39m HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"image/x-icon","size":261950,"url":"/favicon.ico","remote":"::ffff:192.168.0.200"}
|
||||||
|
2021-10-04 16:02:49 [32mDATA: [39m HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"text/javascript","size":4115,"url":"/index-pwa.js","remote":"::ffff:192.168.0.200"}
|
||||||
|
2021-10-04 16:02:54 [32mDATA: [39m HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"text/javascript","size":1816,"url":"/index-worker.js","remote":"::ffff:192.168.0.200"}
|
||||||
|
2021-10-04 16:02:54 [32mDATA: [39m HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"text/javascript","size":2395142,"url":"/dist/human.js","remote":"::ffff:192.168.0.200"}
|
||||||
|
2021-10-04 16:02:54 [32mDATA: [39m HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"application/json","size":161813,"url":"/models/movenet-lightning.json","remote":"::ffff:192.168.0.200"}
|
||||||
|
2021-10-04 16:02:54 [32mDATA: [39m HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"application/octet-stream","size":4650216,"url":"/models/movenet-lightning.bin","remote":"::ffff:192.168.0.200"}
|
||||||
|
2021-10-04 16:03:29 [36mINFO: [39m Watch: {"event":"modify","input":"src/body/movenet.ts"}
|
||||||
|
2021-10-04 16:03:29 [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-10-04 16:03:29 [35mSTATE:[39m Compile: {"name":"human/nodejs/cpu","format":"cjs","platform":"node","input":"src/human.ts","output":"dist/human.node.js","files":51,"inputBytes":507859,"outputBytes":422922}
|
||||||
|
2021-10-04 16:03:29 [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-10-04 16:03:29 [35mSTATE:[39m Compile: {"name":"human/nodejs/gpu","format":"cjs","platform":"node","input":"src/human.ts","output":"dist/human.node-gpu.js","files":51,"inputBytes":507867,"outputBytes":422926}
|
||||||
|
2021-10-04 16:03:29 [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-10-04 16:03:29 [35mSTATE:[39m Compile: {"name":"human/nodejs/wasm","format":"cjs","platform":"node","input":"src/human.ts","output":"dist/human.node-wasm.js","files":51,"inputBytes":507934,"outputBytes":422998}
|
||||||
|
2021-10-04 16:03:29 [35mSTATE:[39m Compile: {"name":"tfjs/browser/version","format":"esm","platform":"browser","input":"tfjs/tf-version.ts","output":"dist/tfjs.version.js","files":1,"inputBytes":1063,"outputBytes":1631}
|
||||||
|
2021-10-04 16:03:29 [35mSTATE:[39m Compile: {"name":"tfjs/browser/esm/nobundle","format":"esm","platform":"browser","input":"tfjs/tf-browser.ts","output":"dist/tfjs.esm.js","files":2,"inputBytes":3088,"outputBytes":793}
|
||||||
|
2021-10-04 16:03:29 [35mSTATE:[39m Compile: {"name":"human/browser/esm/nobundle","format":"esm","platform":"browser","input":"src/human.ts","output":"dist/human.esm-nobundle.js","files":51,"inputBytes":507377,"outputBytes":424471}
|
||||||
|
2021-10-04 16:03:30 [35mSTATE:[39m Compile: {"name":"tfjs/browser/esm/bundle","format":"esm","platform":"browser","input":"tfjs/tf-browser.ts","output":"dist/tfjs.esm.js","files":8,"inputBytes":3088,"outputBytes":2377041}
|
||||||
|
2021-10-04 16:03:30 [35mSTATE:[39m Compile: {"name":"human/browser/iife/bundle","format":"iife","platform":"browser","input":"src/human.ts","output":"dist/human.js","files":54,"inputBytes":2883625,"outputBytes":2395182}
|
||||||
|
2021-10-04 16:03:31 [35mSTATE:[39m Compile: {"name":"human/browser/esm/bundle","format":"esm","platform":"browser","input":"src/human.ts","output":"dist/human.esm.js","files":54,"inputBytes":2883625,"outputBytes":4635057}
|
||||||
|
2021-10-04 16:03:31 [32mDATA: [39m HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"text/html","size":7842,"url":"/","remote":"::ffff:192.168.0.200"}
|
||||||
|
2021-10-04 16:03:31 [32mDATA: [39m HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"text/css","size":107884,"url":"/icons.css","remote":"::ffff:192.168.0.200"}
|
||||||
|
2021-10-04 16:03:31 [32mDATA: [39m HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"text/javascript","size":47585,"url":"/index.js","remote":"::ffff:192.168.0.200"}
|
||||||
|
2021-10-04 16:03:31 [32mDATA: [39m HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"text/javascript","size":4635057,"url":"/dist/human.esm.js","remote":"::ffff:192.168.0.200"}
|
||||||
|
2021-10-04 16:03:31 [32mDATA: [39m HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"text/javascript","size":14222,"url":"/helpers/menu.js","remote":"::ffff:192.168.0.200"}
|
||||||
|
2021-10-04 16:03:31 [32mDATA: [39m HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"text/javascript","size":10894,"url":"/helpers/gl-bench.js","remote":"::ffff:192.168.0.200"}
|
||||||
|
2021-10-04 16:03:31 [32mDATA: [39m HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"text/javascript","size":3406,"url":"/helpers/webrtc.js","remote":"::ffff:192.168.0.200"}
|
||||||
|
2021-10-04 16:03:31 [32mDATA: [39m HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"text/javascript","size":5785,"url":"/helpers/jsonview.js","remote":"::ffff:192.168.0.200"}
|
||||||
|
2021-10-04 16:03:31 [32mDATA: [39m HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"font/woff2","size":181500,"url":"/assets/lato-light.woff2","remote":"::ffff:192.168.0.200"}
|
||||||
|
2021-10-04 16:03:32 [32mDATA: [39m HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"application/octet-stream","size":12154485,"url":"/dist/human.esm.js.map","remote":"::ffff:192.168.0.200"}
|
||||||
|
2021-10-04 16:03:32 [32mDATA: [39m HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"image/x-icon","size":261950,"url":"/favicon.ico","remote":"::ffff:192.168.0.200"}
|
||||||
|
2021-10-04 16:03:32 [32mDATA: [39m HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"text/javascript","size":4115,"url":"/index-pwa.js","remote":"::ffff:192.168.0.200"}
|
||||||
|
2021-10-04 16:03:35 [32mDATA: [39m HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"text/javascript","size":1816,"url":"/index-worker.js","remote":"::ffff:192.168.0.200"}
|
||||||
|
2021-10-04 16:03:35 [32mDATA: [39m HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"text/javascript","size":2395182,"url":"/dist/human.js","remote":"::ffff:192.168.0.200"}
|
||||||
|
2021-10-04 16:03:35 [32mDATA: [39m HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"application/json","size":161813,"url":"/models/movenet-lightning.json","remote":"::ffff:192.168.0.200"}
|
||||||
|
2021-10-04 16:03:35 [32mDATA: [39m HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"application/octet-stream","size":4650216,"url":"/models/movenet-lightning.bin","remote":"::ffff:192.168.0.200"}
|
||||||
|
2021-10-04 16:04:03 [36mINFO: [39m Watch: {"event":"modify","input":"src/body/movenet.ts"}
|
||||||
|
2021-10-04 16:04:03 [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-10-04 16:04:03 [35mSTATE:[39m Compile: {"name":"human/nodejs/cpu","format":"cjs","platform":"node","input":"src/human.ts","output":"dist/human.node.js","files":51,"inputBytes":507739,"outputBytes":422802}
|
||||||
|
2021-10-04 16:04:03 [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-10-04 16:04:03 [35mSTATE:[39m Compile: {"name":"human/nodejs/gpu","format":"cjs","platform":"node","input":"src/human.ts","output":"dist/human.node-gpu.js","files":51,"inputBytes":507747,"outputBytes":422806}
|
||||||
|
2021-10-04 16:04:03 [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-10-04 16:04:03 [35mSTATE:[39m Compile: {"name":"human/nodejs/wasm","format":"cjs","platform":"node","input":"src/human.ts","output":"dist/human.node-wasm.js","files":51,"inputBytes":507814,"outputBytes":422878}
|
||||||
|
2021-10-04 16:04:03 [35mSTATE:[39m Compile: {"name":"tfjs/browser/version","format":"esm","platform":"browser","input":"tfjs/tf-version.ts","output":"dist/tfjs.version.js","files":1,"inputBytes":1063,"outputBytes":1631}
|
||||||
|
2021-10-04 16:04:03 [35mSTATE:[39m Compile: {"name":"tfjs/browser/esm/nobundle","format":"esm","platform":"browser","input":"tfjs/tf-browser.ts","output":"dist/tfjs.esm.js","files":2,"inputBytes":3088,"outputBytes":793}
|
||||||
|
2021-10-04 16:04:03 [35mSTATE:[39m Compile: {"name":"human/browser/esm/nobundle","format":"esm","platform":"browser","input":"src/human.ts","output":"dist/human.esm-nobundle.js","files":51,"inputBytes":507257,"outputBytes":424351}
|
||||||
|
2021-10-04 16:04:04 [35mSTATE:[39m Compile: {"name":"tfjs/browser/esm/bundle","format":"esm","platform":"browser","input":"tfjs/tf-browser.ts","output":"dist/tfjs.esm.js","files":8,"inputBytes":3088,"outputBytes":2377041}
|
||||||
|
2021-10-04 16:04:04 [35mSTATE:[39m Compile: {"name":"human/browser/iife/bundle","format":"iife","platform":"browser","input":"src/human.ts","output":"dist/human.js","files":54,"inputBytes":2883505,"outputBytes":2395083}
|
||||||
|
2021-10-04 16:04:05 [35mSTATE:[39m Compile: {"name":"human/browser/esm/bundle","format":"esm","platform":"browser","input":"src/human.ts","output":"dist/human.esm.js","files":54,"inputBytes":2883505,"outputBytes":4634937}
|
||||||
|
2021-10-04 16:04:29 [36mINFO: [39m Watch: {"event":"modify","input":"src/human.ts"}
|
||||||
|
2021-10-04 16:04:29 [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-10-04 16:04:29 [36mINFO: [39m Watch: {"event":"modify","input":"src/human.ts","skip":true}
|
||||||
|
2021-10-04 16:04:29 [35mSTATE:[39m Compile: {"name":"human/nodejs/cpu","format":"cjs","platform":"node","input":"src/human.ts","output":"dist/human.node.js","files":51,"inputBytes":507765,"outputBytes":422828}
|
||||||
|
2021-10-04 16:04:29 [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-10-04 16:04:29 [35mSTATE:[39m Compile: {"name":"human/nodejs/gpu","format":"cjs","platform":"node","input":"src/human.ts","output":"dist/human.node-gpu.js","files":51,"inputBytes":507773,"outputBytes":422832}
|
||||||
|
2021-10-04 16:04:29 [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-10-04 16:04:29 [35mSTATE:[39m Compile: {"name":"human/nodejs/wasm","format":"cjs","platform":"node","input":"src/human.ts","output":"dist/human.node-wasm.js","files":51,"inputBytes":507840,"outputBytes":422904}
|
||||||
|
2021-10-04 16:04:29 [35mSTATE:[39m Compile: {"name":"tfjs/browser/version","format":"esm","platform":"browser","input":"tfjs/tf-version.ts","output":"dist/tfjs.version.js","files":1,"inputBytes":1063,"outputBytes":1631}
|
||||||
|
2021-10-04 16:04:29 [35mSTATE:[39m Compile: {"name":"tfjs/browser/esm/nobundle","format":"esm","platform":"browser","input":"tfjs/tf-browser.ts","output":"dist/tfjs.esm.js","files":2,"inputBytes":3088,"outputBytes":793}
|
||||||
|
2021-10-04 16:04:29 [35mSTATE:[39m Compile: {"name":"human/browser/esm/nobundle","format":"esm","platform":"browser","input":"src/human.ts","output":"dist/human.esm-nobundle.js","files":51,"inputBytes":507283,"outputBytes":424377}
|
||||||
|
2021-10-04 16:04:30 [35mSTATE:[39m Compile: {"name":"tfjs/browser/esm/bundle","format":"esm","platform":"browser","input":"tfjs/tf-browser.ts","output":"dist/tfjs.esm.js","files":8,"inputBytes":3088,"outputBytes":2377041}
|
||||||
|
2021-10-04 16:04:30 [35mSTATE:[39m Compile: {"name":"human/browser/iife/bundle","format":"iife","platform":"browser","input":"src/human.ts","output":"dist/human.js","files":54,"inputBytes":2883531,"outputBytes":2395102}
|
||||||
|
2021-10-04 16:04:31 [32mDATA: [39m HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"text/html","size":7842,"url":"/","remote":"::ffff:192.168.0.200"}
|
||||||
|
2021-10-04 16:04:31 [32mDATA: [39m HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"text/css","size":107884,"url":"/icons.css","remote":"::ffff:192.168.0.200"}
|
||||||
|
2021-10-04 16:04:31 [32mDATA: [39m HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"text/javascript","size":47585,"url":"/index.js","remote":"::ffff:192.168.0.200"}
|
||||||
|
2021-10-04 16:04:31 [35mSTATE:[39m Compile: {"name":"human/browser/esm/bundle","format":"esm","platform":"browser","input":"src/human.ts","output":"dist/human.esm.js","files":54,"inputBytes":2883531,"outputBytes":4634963}
|
||||||
|
2021-10-04 16:04:31 [32mDATA: [39m HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"text/javascript","size":4634963,"url":"/dist/human.esm.js","remote":"::ffff:192.168.0.200"}
|
||||||
|
2021-10-04 16:04:31 [32mDATA: [39m HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"text/javascript","size":14222,"url":"/helpers/menu.js","remote":"::ffff:192.168.0.200"}
|
||||||
|
2021-10-04 16:04:31 [32mDATA: [39m HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"text/javascript","size":10894,"url":"/helpers/gl-bench.js","remote":"::ffff:192.168.0.200"}
|
||||||
|
2021-10-04 16:04:31 [32mDATA: [39m HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"text/javascript","size":3406,"url":"/helpers/webrtc.js","remote":"::ffff:192.168.0.200"}
|
||||||
|
2021-10-04 16:04:31 [32mDATA: [39m HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"text/javascript","size":5785,"url":"/helpers/jsonview.js","remote":"::ffff:192.168.0.200"}
|
||||||
|
2021-10-04 16:04:31 [32mDATA: [39m HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"font/woff2","size":181500,"url":"/assets/lato-light.woff2","remote":"::ffff:192.168.0.200"}
|
||||||
|
2021-10-04 16:04:32 [32mDATA: [39m HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"application/octet-stream","size":12154327,"url":"/dist/human.esm.js.map","remote":"::ffff:192.168.0.200"}
|
||||||
|
2021-10-04 16:04:32 [32mDATA: [39m HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"image/x-icon","size":261950,"url":"/favicon.ico","remote":"::ffff:192.168.0.200"}
|
||||||
|
2021-10-04 16:04:32 [32mDATA: [39m HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"text/javascript","size":4115,"url":"/index-pwa.js","remote":"::ffff:192.168.0.200"}
|
||||||
|
2021-10-04 16:04:34 [32mDATA: [39m HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"text/javascript","size":1816,"url":"/index-worker.js","remote":"::ffff:192.168.0.200"}
|
||||||
|
2021-10-04 16:04:34 [32mDATA: [39m HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"text/javascript","size":2395102,"url":"/dist/human.js","remote":"::ffff:192.168.0.200"}
|
||||||
|
2021-10-04 16:04:35 [32mDATA: [39m HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"application/json","size":161813,"url":"/models/movenet-lightning.json","remote":"::ffff:192.168.0.200"}
|
||||||
|
2021-10-04 16:04:35 [32mDATA: [39m HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"application/octet-stream","size":4650216,"url":"/models/movenet-lightning.bin","remote":"::ffff:192.168.0.200"}
|
||||||
|
2021-10-04 16:04:44 [36mINFO: [39m Watch: {"event":"modify","input":"src/human.ts"}
|
||||||
|
2021-10-04 16:04:44 [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-10-04 16:04:44 [35mSTATE:[39m Compile: {"name":"human/nodejs/cpu","format":"cjs","platform":"node","input":"src/human.ts","output":"dist/human.node.js","files":51,"inputBytes":507739,"outputBytes":422802}
|
||||||
|
2021-10-04 16:04:44 [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-10-04 16:04:44 [35mSTATE:[39m Compile: {"name":"human/nodejs/gpu","format":"cjs","platform":"node","input":"src/human.ts","output":"dist/human.node-gpu.js","files":51,"inputBytes":507747,"outputBytes":422806}
|
||||||
|
2021-10-04 16:04:44 [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-10-04 16:04:44 [35mSTATE:[39m Compile: {"name":"human/nodejs/wasm","format":"cjs","platform":"node","input":"src/human.ts","output":"dist/human.node-wasm.js","files":51,"inputBytes":507814,"outputBytes":422878}
|
||||||
|
2021-10-04 16:04:44 [35mSTATE:[39m Compile: {"name":"tfjs/browser/version","format":"esm","platform":"browser","input":"tfjs/tf-version.ts","output":"dist/tfjs.version.js","files":1,"inputBytes":1063,"outputBytes":1631}
|
||||||
|
2021-10-04 16:04:44 [35mSTATE:[39m Compile: {"name":"tfjs/browser/esm/nobundle","format":"esm","platform":"browser","input":"tfjs/tf-browser.ts","output":"dist/tfjs.esm.js","files":2,"inputBytes":3088,"outputBytes":793}
|
||||||
|
2021-10-04 16:04:44 [35mSTATE:[39m Compile: {"name":"human/browser/esm/nobundle","format":"esm","platform":"browser","input":"src/human.ts","output":"dist/human.esm-nobundle.js","files":51,"inputBytes":507257,"outputBytes":424351}
|
||||||
|
2021-10-04 16:04:45 [35mSTATE:[39m Compile: {"name":"tfjs/browser/esm/bundle","format":"esm","platform":"browser","input":"tfjs/tf-browser.ts","output":"dist/tfjs.esm.js","files":8,"inputBytes":3088,"outputBytes":2377041}
|
||||||
|
2021-10-04 16:04:46 [35mSTATE:[39m Compile: {"name":"human/browser/iife/bundle","format":"iife","platform":"browser","input":"src/human.ts","output":"dist/human.js","files":54,"inputBytes":2883505,"outputBytes":2395083}
|
||||||
|
2021-10-04 16:04:47 [35mSTATE:[39m Compile: {"name":"human/browser/esm/bundle","format":"esm","platform":"browser","input":"src/human.ts","output":"dist/human.esm.js","files":54,"inputBytes":2883505,"outputBytes":4634937}
|
||||||
|
2021-10-04 16:05:09 [32mDATA: [39m HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"text/html","size":7842,"url":"/?worker=false","remote":"::ffff:192.168.0.200"}
|
||||||
|
2021-10-04 16:05:09 [32mDATA: [39m HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"text/css","size":107884,"url":"/icons.css","remote":"::ffff:192.168.0.200"}
|
||||||
|
2021-10-04 16:05:09 [32mDATA: [39m HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"text/javascript","size":47585,"url":"/index.js","remote":"::ffff:192.168.0.200"}
|
||||||
|
2021-10-04 16:05:09 [32mDATA: [39m HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"text/javascript","size":4634937,"url":"/dist/human.esm.js","remote":"::ffff:192.168.0.200"}
|
||||||
|
2021-10-04 16:05:09 [32mDATA: [39m HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"text/javascript","size":14222,"url":"/helpers/menu.js","remote":"::ffff:192.168.0.200"}
|
||||||
|
2021-10-04 16:05:09 [32mDATA: [39m HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"text/javascript","size":10894,"url":"/helpers/gl-bench.js","remote":"::ffff:192.168.0.200"}
|
||||||
|
2021-10-04 16:05:09 [32mDATA: [39m HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"text/javascript","size":3406,"url":"/helpers/webrtc.js","remote":"::ffff:192.168.0.200"}
|
||||||
|
2021-10-04 16:05:09 [32mDATA: [39m HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"text/javascript","size":5785,"url":"/helpers/jsonview.js","remote":"::ffff:192.168.0.200"}
|
||||||
|
2021-10-04 16:05:09 [32mDATA: [39m HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"font/woff2","size":181500,"url":"/assets/lato-light.woff2","remote":"::ffff:192.168.0.200"}
|
||||||
|
2021-10-04 16:05:09 [32mDATA: [39m HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"application/octet-stream","size":12154285,"url":"/dist/human.esm.js.map","remote":"::ffff:192.168.0.200"}
|
||||||
|
2021-10-04 16:05:10 [32mDATA: [39m HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"text/javascript","size":4115,"url":"/index-pwa.js","remote":"::ffff:192.168.0.200"}
|
||||||
|
2021-10-04 16:05:12 [32mDATA: [39m HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"application/json","size":161813,"url":"/models/movenet-lightning.json","remote":"::ffff:192.168.0.200"}
|
||||||
|
2021-10-04 16:05:12 [32mDATA: [39m HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"application/octet-stream","size":4650216,"url":"/models/movenet-lightning.bin","remote":"::ffff:192.168.0.200"}
|
||||||
|
2021-10-04 16:08:33 [36mINFO: [39m Watch: {"event":"modify","input":"src/body/movenet.ts"}
|
||||||
|
2021-10-04 16:08:33 [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-10-04 16:08:34 [35mSTATE:[39m Compile: {"name":"human/nodejs/cpu","format":"cjs","platform":"node","input":"src/human.ts","output":"dist/human.node.js","files":52,"inputBytes":508349,"outputBytes":423453}
|
||||||
|
2021-10-04 16:08: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-10-04 16:08:34 [35mSTATE:[39m Compile: {"name":"human/nodejs/gpu","format":"cjs","platform":"node","input":"src/human.ts","output":"dist/human.node-gpu.js","files":52,"inputBytes":508357,"outputBytes":423457}
|
||||||
|
2021-10-04 16:08: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-10-04 16:08:34 [35mSTATE:[39m Compile: {"name":"human/nodejs/wasm","format":"cjs","platform":"node","input":"src/human.ts","output":"dist/human.node-wasm.js","files":52,"inputBytes":508424,"outputBytes":423529}
|
||||||
|
2021-10-04 16:08: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":1631}
|
||||||
|
2021-10-04 16:08: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":3088,"outputBytes":793}
|
||||||
|
2021-10-04 16:08:34 [35mSTATE:[39m Compile: {"name":"human/browser/esm/nobundle","format":"esm","platform":"browser","input":"src/human.ts","output":"dist/human.esm-nobundle.js","files":52,"inputBytes":507867,"outputBytes":424978}
|
||||||
|
2021-10-04 16:08:35 [35mSTATE:[39m Compile: {"name":"tfjs/browser/esm/bundle","format":"esm","platform":"browser","input":"tfjs/tf-browser.ts","output":"dist/tfjs.esm.js","files":8,"inputBytes":3088,"outputBytes":2377041}
|
||||||
|
2021-10-04 16:08:35 [35mSTATE:[39m Compile: {"name":"human/browser/iife/bundle","format":"iife","platform":"browser","input":"src/human.ts","output":"dist/human.js","files":55,"inputBytes":2884115,"outputBytes":2395575}
|
||||||
|
2021-10-04 16:08:36 [35mSTATE:[39m Compile: {"name":"human/browser/esm/bundle","format":"esm","platform":"browser","input":"src/human.ts","output":"dist/human.esm.js","files":55,"inputBytes":2884115,"outputBytes":4635564}
|
||||||
|
2021-10-04 16:08:37 [36mINFO: [39m Watch: {"event":"modify","input":"src/body/movenetcoords.ts"}
|
||||||
|
2021-10-04 16:08:37 [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-10-04 16:08:37 [35mSTATE:[39m Compile: {"name":"human/nodejs/cpu","format":"cjs","platform":"node","input":"src/human.ts","output":"dist/human.node.js","files":52,"inputBytes":508349,"outputBytes":423453}
|
||||||
|
2021-10-04 16:08:37 [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-10-04 16:08:37 [35mSTATE:[39m Compile: {"name":"human/nodejs/gpu","format":"cjs","platform":"node","input":"src/human.ts","output":"dist/human.node-gpu.js","files":52,"inputBytes":508357,"outputBytes":423457}
|
||||||
|
2021-10-04 16:08:37 [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-10-04 16:08:37 [35mSTATE:[39m Compile: {"name":"human/nodejs/wasm","format":"cjs","platform":"node","input":"src/human.ts","output":"dist/human.node-wasm.js","files":52,"inputBytes":508424,"outputBytes":423529}
|
||||||
|
2021-10-04 16:08:37 [35mSTATE:[39m Compile: {"name":"tfjs/browser/version","format":"esm","platform":"browser","input":"tfjs/tf-version.ts","output":"dist/tfjs.version.js","files":1,"inputBytes":1063,"outputBytes":1631}
|
||||||
|
2021-10-04 16:08:37 [35mSTATE:[39m Compile: {"name":"tfjs/browser/esm/nobundle","format":"esm","platform":"browser","input":"tfjs/tf-browser.ts","output":"dist/tfjs.esm.js","files":2,"inputBytes":3088,"outputBytes":793}
|
||||||
|
2021-10-04 16:08:37 [35mSTATE:[39m Compile: {"name":"human/browser/esm/nobundle","format":"esm","platform":"browser","input":"src/human.ts","output":"dist/human.esm-nobundle.js","files":52,"inputBytes":507867,"outputBytes":424978}
|
||||||
|
2021-10-04 16:08:38 [35mSTATE:[39m Compile: {"name":"tfjs/browser/esm/bundle","format":"esm","platform":"browser","input":"tfjs/tf-browser.ts","output":"dist/tfjs.esm.js","files":8,"inputBytes":3088,"outputBytes":2377041}
|
||||||
|
2021-10-04 16:08:38 [35mSTATE:[39m Compile: {"name":"human/browser/iife/bundle","format":"iife","platform":"browser","input":"src/human.ts","output":"dist/human.js","files":55,"inputBytes":2884115,"outputBytes":2395575}
|
||||||
|
2021-10-04 16:08:40 [35mSTATE:[39m Compile: {"name":"human/browser/esm/bundle","format":"esm","platform":"browser","input":"src/human.ts","output":"dist/human.esm.js","files":55,"inputBytes":2884115,"outputBytes":4635564}
|
||||||
|
2021-10-04 16:08:42 [32mDATA: [39m HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"text/html","size":7842,"url":"/?worker=false","remote":"::ffff:192.168.0.200"}
|
||||||
|
2021-10-04 16:08:42 [32mDATA: [39m HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"text/css","size":107884,"url":"/icons.css","remote":"::ffff:192.168.0.200"}
|
||||||
|
2021-10-04 16:08:42 [32mDATA: [39m HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"text/javascript","size":47585,"url":"/index.js","remote":"::ffff:192.168.0.200"}
|
||||||
|
2021-10-04 16:08:42 [32mDATA: [39m HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"font/woff2","size":181500,"url":"/assets/lato-light.woff2","remote":"::ffff:192.168.0.200"}
|
||||||
|
2021-10-04 16:08:42 [32mDATA: [39m HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"text/javascript","size":4635564,"url":"/dist/human.esm.js","remote":"::ffff:192.168.0.200"}
|
||||||
|
2021-10-04 16:08:42 [32mDATA: [39m HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"text/javascript","size":14222,"url":"/helpers/menu.js","remote":"::ffff:192.168.0.200"}
|
||||||
|
2021-10-04 16:08:42 [32mDATA: [39m HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"text/javascript","size":10894,"url":"/helpers/gl-bench.js","remote":"::ffff:192.168.0.200"}
|
||||||
|
2021-10-04 16:08:42 [32mDATA: [39m HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"text/javascript","size":3406,"url":"/helpers/webrtc.js","remote":"::ffff:192.168.0.200"}
|
||||||
|
2021-10-04 16:08:42 [32mDATA: [39m HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"text/javascript","size":5785,"url":"/helpers/jsonview.js","remote":"::ffff:192.168.0.200"}
|
||||||
|
2021-10-04 16:08:42 [32mDATA: [39m HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"application/octet-stream","size":12155361,"url":"/dist/human.esm.js.map","remote":"::ffff:192.168.0.200"}
|
||||||
|
2021-10-04 16:08:42 [32mDATA: [39m HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"image/x-icon","size":261950,"url":"/favicon.ico","remote":"::ffff:192.168.0.200"}
|
||||||
|
2021-10-04 16:08:43 [32mDATA: [39m HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"text/javascript","size":4115,"url":"/index-pwa.js","remote":"::ffff:192.168.0.200"}
|
||||||
|
2021-10-04 16:08:52 [32mDATA: [39m HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"application/json","size":161813,"url":"/models/movenet-lightning.json","remote":"::ffff:192.168.0.200"}
|
||||||
|
2021-10-04 16:08:52 [32mDATA: [39m HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"application/octet-stream","size":4650216,"url":"/models/movenet-lightning.bin","remote":"::ffff:192.168.0.200"}
|
||||||
|
2021-10-04 16:10:18 [32mDATA: [39m HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"text/html","size":7842,"url":"/?worker=false","remote":"::ffff:192.168.0.200"}
|
||||||
|
2021-10-04 16:10:18 [32mDATA: [39m HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"text/css","size":107884,"url":"/icons.css","remote":"::ffff:192.168.0.200"}
|
||||||
|
2021-10-04 16:10:18 [32mDATA: [39m HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"text/javascript","size":47646,"url":"/index.js","remote":"::ffff:192.168.0.200"}
|
||||||
|
2021-10-04 16:10:18 [32mDATA: [39m HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"text/javascript","size":4635564,"url":"/dist/human.esm.js","remote":"::ffff:192.168.0.200"}
|
||||||
|
2021-10-04 16:10:18 [32mDATA: [39m HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"text/javascript","size":14222,"url":"/helpers/menu.js","remote":"::ffff:192.168.0.200"}
|
||||||
|
2021-10-04 16:10:18 [32mDATA: [39m HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"text/javascript","size":10894,"url":"/helpers/gl-bench.js","remote":"::ffff:192.168.0.200"}
|
||||||
|
2021-10-04 16:10:18 [32mDATA: [39m HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"text/javascript","size":3406,"url":"/helpers/webrtc.js","remote":"::ffff:192.168.0.200"}
|
||||||
|
2021-10-04 16:10:18 [32mDATA: [39m HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"text/javascript","size":5785,"url":"/helpers/jsonview.js","remote":"::ffff:192.168.0.200"}
|
||||||
|
2021-10-04 16:10:18 [32mDATA: [39m HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"font/woff2","size":181500,"url":"/assets/lato-light.woff2","remote":"::ffff:192.168.0.200"}
|
||||||
|
2021-10-04 16:10:18 [32mDATA: [39m HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"application/octet-stream","size":12155361,"url":"/dist/human.esm.js.map","remote":"::ffff:192.168.0.200"}
|
||||||
|
2021-10-04 16:10:18 [32mDATA: [39m HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"image/x-icon","size":261950,"url":"/favicon.ico","remote":"::ffff:192.168.0.200"}
|
||||||
|
2021-10-04 16:10:19 [32mDATA: [39m HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"text/javascript","size":4115,"url":"/index-pwa.js","remote":"::ffff:192.168.0.200"}
|
||||||
|
2021-10-04 16:10:22 [33mWARN: [39m HTTP: {"method":"GET","ver":"1.1","status":404,"url":"/human-models/models/movenet-thunder.json","remote":"::ffff:192.168.0.200"}
|
||||||
|
2021-10-04 16:12:33 [32mDATA: [39m HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"text/html","size":7842,"url":"/?worker=false","remote":"::ffff:192.168.0.200"}
|
||||||
|
2021-10-04 16:12:33 [32mDATA: [39m HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"text/css","size":107884,"url":"/icons.css","remote":"::ffff:192.168.0.200"}
|
||||||
|
2021-10-04 16:12:33 [32mDATA: [39m HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"text/javascript","size":47669,"url":"/index.js","remote":"::ffff:192.168.0.200"}
|
||||||
|
2021-10-04 16:12:33 [32mDATA: [39m HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"text/javascript","size":4635564,"url":"/dist/human.esm.js","remote":"::ffff:192.168.0.200"}
|
||||||
|
2021-10-04 16:12:33 [32mDATA: [39m HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"text/javascript","size":14222,"url":"/helpers/menu.js","remote":"::ffff:192.168.0.200"}
|
||||||
|
2021-10-04 16:12:33 [32mDATA: [39m HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"text/javascript","size":10894,"url":"/helpers/gl-bench.js","remote":"::ffff:192.168.0.200"}
|
||||||
|
2021-10-04 16:12:33 [32mDATA: [39m HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"text/javascript","size":3406,"url":"/helpers/webrtc.js","remote":"::ffff:192.168.0.200"}
|
||||||
|
2021-10-04 16:12:33 [32mDATA: [39m HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"text/javascript","size":5785,"url":"/helpers/jsonview.js","remote":"::ffff:192.168.0.200"}
|
||||||
|
2021-10-04 16:12:33 [32mDATA: [39m HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"font/woff2","size":181500,"url":"/assets/lato-light.woff2","remote":"::ffff:192.168.0.200"}
|
||||||
|
2021-10-04 16:12:34 [32mDATA: [39m HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"application/octet-stream","size":12155361,"url":"/dist/human.esm.js.map","remote":"::ffff:192.168.0.200"}
|
||||||
|
2021-10-04 16:12:34 [32mDATA: [39m HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"image/x-icon","size":261950,"url":"/favicon.ico","remote":"::ffff:192.168.0.200"}
|
||||||
|
2021-10-04 16:12:34 [32mDATA: [39m HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"text/javascript","size":4115,"url":"/index-pwa.js","remote":"::ffff:192.168.0.200"}
|
||||||
|
2021-10-04 16:13:27 [32mDATA: [39m HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"text/html","size":7842,"url":"/?worker=false","remote":"::ffff:192.168.0.200"}
|
||||||
|
2021-10-04 16:13:27 [32mDATA: [39m HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"text/css","size":107884,"url":"/icons.css","remote":"::ffff:192.168.0.200"}
|
||||||
|
2021-10-04 16:13:27 [32mDATA: [39m HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"text/javascript","size":47671,"url":"/index.js","remote":"::ffff:192.168.0.200"}
|
||||||
|
2021-10-04 16:13:27 [32mDATA: [39m HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"text/javascript","size":4635564,"url":"/dist/human.esm.js","remote":"::ffff:192.168.0.200"}
|
||||||
|
2021-10-04 16:13:27 [32mDATA: [39m HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"text/javascript","size":14222,"url":"/helpers/menu.js","remote":"::ffff:192.168.0.200"}
|
||||||
|
2021-10-04 16:13:27 [32mDATA: [39m HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"text/javascript","size":10894,"url":"/helpers/gl-bench.js","remote":"::ffff:192.168.0.200"}
|
||||||
|
2021-10-04 16:13:27 [32mDATA: [39m HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"text/javascript","size":3406,"url":"/helpers/webrtc.js","remote":"::ffff:192.168.0.200"}
|
||||||
|
2021-10-04 16:13:27 [32mDATA: [39m HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"text/javascript","size":5785,"url":"/helpers/jsonview.js","remote":"::ffff:192.168.0.200"}
|
||||||
|
2021-10-04 16:13:28 [32mDATA: [39m HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"font/woff2","size":181500,"url":"/assets/lato-light.woff2","remote":"::ffff:192.168.0.200"}
|
||||||
|
2021-10-04 16:13:28 [32mDATA: [39m HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"application/octet-stream","size":12155361,"url":"/dist/human.esm.js.map","remote":"::ffff:192.168.0.200"}
|
||||||
|
2021-10-04 16:13:28 [32mDATA: [39m HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"image/x-icon","size":261950,"url":"/favicon.ico","remote":"::ffff:192.168.0.200"}
|
||||||
|
2021-10-04 16:13:28 [32mDATA: [39m HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"text/javascript","size":4115,"url":"/index-pwa.js","remote":"::ffff:192.168.0.200"}
|
||||||
|
2021-10-04 16:13:57 [32mDATA: [39m HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"text/html","size":7842,"url":"/?worker=false","remote":"::ffff:192.168.0.200"}
|
||||||
|
2021-10-04 16:13:58 [32mDATA: [39m HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"text/css","size":107884,"url":"/icons.css","remote":"::ffff:192.168.0.200"}
|
||||||
|
2021-10-04 16:13:58 [32mDATA: [39m HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"text/javascript","size":47671,"url":"/index.js","remote":"::ffff:192.168.0.200"}
|
||||||
|
2021-10-04 16:13:58 [32mDATA: [39m HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"text/javascript","size":4635564,"url":"/dist/human.esm.js","remote":"::ffff:192.168.0.200"}
|
||||||
|
2021-10-04 16:13:58 [32mDATA: [39m HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"text/javascript","size":14222,"url":"/helpers/menu.js","remote":"::ffff:192.168.0.200"}
|
||||||
|
2021-10-04 16:13:58 [32mDATA: [39m HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"text/javascript","size":10894,"url":"/helpers/gl-bench.js","remote":"::ffff:192.168.0.200"}
|
||||||
|
2021-10-04 16:13:58 [32mDATA: [39m HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"text/javascript","size":3406,"url":"/helpers/webrtc.js","remote":"::ffff:192.168.0.200"}
|
||||||
|
2021-10-04 16:13:58 [32mDATA: [39m HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"text/javascript","size":5785,"url":"/helpers/jsonview.js","remote":"::ffff:192.168.0.200"}
|
||||||
|
2021-10-04 16:13:58 [32mDATA: [39m HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"font/woff2","size":181500,"url":"/assets/lato-light.woff2","remote":"::ffff:192.168.0.200"}
|
||||||
|
2021-10-04 16:13:58 [32mDATA: [39m HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"application/octet-stream","size":12155361,"url":"/dist/human.esm.js.map","remote":"::ffff:192.168.0.200"}
|
||||||
|
2021-10-04 16:13:58 [32mDATA: [39m HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"image/x-icon","size":261950,"url":"/favicon.ico","remote":"::ffff:192.168.0.200"}
|
||||||
|
2021-10-04 16:13:58 [32mDATA: [39m HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"text/javascript","size":4115,"url":"/index-pwa.js","remote":"::ffff:192.168.0.200"}
|
||||||
|
2021-10-04 16:15:21 [36mINFO: [39m Watch: {"event":"modify","input":"src/body/movenet.ts"}
|
||||||
|
2021-10-04 16:15:22 [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-10-04 16:15:22 [35mSTATE:[39m Compile: {"name":"human/nodejs/cpu","format":"cjs","platform":"node","input":"src/human.ts","output":"dist/human.node.js","files":52,"inputBytes":508352,"outputBytes":423176}
|
||||||
|
2021-10-04 16:15:22 [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-10-04 16:15:22 [35mSTATE:[39m Compile: {"name":"human/nodejs/gpu","format":"cjs","platform":"node","input":"src/human.ts","output":"dist/human.node-gpu.js","files":52,"inputBytes":508360,"outputBytes":423180}
|
||||||
|
2021-10-04 16:15:22 [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-10-04 16:15:22 [35mSTATE:[39m Compile: {"name":"human/nodejs/wasm","format":"cjs","platform":"node","input":"src/human.ts","output":"dist/human.node-wasm.js","files":52,"inputBytes":508427,"outputBytes":423252}
|
||||||
|
2021-10-04 16:15:22 [35mSTATE:[39m Compile: {"name":"tfjs/browser/version","format":"esm","platform":"browser","input":"tfjs/tf-version.ts","output":"dist/tfjs.version.js","files":1,"inputBytes":1063,"outputBytes":1631}
|
||||||
|
2021-10-04 16:15:22 [35mSTATE:[39m Compile: {"name":"tfjs/browser/esm/nobundle","format":"esm","platform":"browser","input":"tfjs/tf-browser.ts","output":"dist/tfjs.esm.js","files":2,"inputBytes":3088,"outputBytes":793}
|
||||||
|
2021-10-04 16:15:22 [35mSTATE:[39m Compile: {"name":"human/browser/esm/nobundle","format":"esm","platform":"browser","input":"src/human.ts","output":"dist/human.esm-nobundle.js","files":52,"inputBytes":507870,"outputBytes":424701}
|
||||||
|
2021-10-04 16:15:22 [35mSTATE:[39m Compile: {"name":"tfjs/browser/esm/bundle","format":"esm","platform":"browser","input":"tfjs/tf-browser.ts","output":"dist/tfjs.esm.js","files":8,"inputBytes":3088,"outputBytes":2377041}
|
||||||
|
2021-10-04 16:15:23 [35mSTATE:[39m Compile: {"name":"human/browser/iife/bundle","format":"iife","platform":"browser","input":"src/human.ts","output":"dist/human.js","files":55,"inputBytes":2884118,"outputBytes":2395400}
|
||||||
|
2021-10-04 16:15:24 [35mSTATE:[39m Compile: {"name":"human/browser/esm/bundle","format":"esm","platform":"browser","input":"src/human.ts","output":"dist/human.esm.js","files":55,"inputBytes":2884118,"outputBytes":4635291}
|
||||||
|
2021-10-04 16:15:25 [32mDATA: [39m HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"text/html","size":7842,"url":"/?worker=false","remote":"::ffff:192.168.0.200"}
|
||||||
|
2021-10-04 16:15:25 [32mDATA: [39m HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"text/css","size":107884,"url":"/icons.css","remote":"::ffff:192.168.0.200"}
|
||||||
|
2021-10-04 16:15:25 [32mDATA: [39m HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"text/javascript","size":47671,"url":"/index.js","remote":"::ffff:192.168.0.200"}
|
||||||
|
2021-10-04 16:15:25 [32mDATA: [39m HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"text/javascript","size":4635291,"url":"/dist/human.esm.js","remote":"::ffff:192.168.0.200"}
|
||||||
|
2021-10-04 16:15:25 [32mDATA: [39m HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"text/javascript","size":14222,"url":"/helpers/menu.js","remote":"::ffff:192.168.0.200"}
|
||||||
|
2021-10-04 16:15:25 [32mDATA: [39m HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"text/javascript","size":10894,"url":"/helpers/gl-bench.js","remote":"::ffff:192.168.0.200"}
|
||||||
|
2021-10-04 16:15:25 [32mDATA: [39m HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"text/javascript","size":3406,"url":"/helpers/webrtc.js","remote":"::ffff:192.168.0.200"}
|
||||||
|
2021-10-04 16:15:25 [32mDATA: [39m HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"text/javascript","size":5785,"url":"/helpers/jsonview.js","remote":"::ffff:192.168.0.200"}
|
||||||
|
2021-10-04 16:15:25 [32mDATA: [39m HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"font/woff2","size":181500,"url":"/assets/lato-light.woff2","remote":"::ffff:192.168.0.200"}
|
||||||
|
2021-10-04 16:15:25 [32mDATA: [39m HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"application/octet-stream","size":12155113,"url":"/dist/human.esm.js.map","remote":"::ffff:192.168.0.200"}
|
||||||
|
2021-10-04 16:15:25 [32mDATA: [39m HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"image/x-icon","size":261950,"url":"/favicon.ico","remote":"::ffff:192.168.0.200"}
|
||||||
|
2021-10-04 16:15:26 [32mDATA: [39m HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"text/javascript","size":4115,"url":"/index-pwa.js","remote":"::ffff:192.168.0.200"}
|
||||||
|
2021-10-04 16:16:06 [32mDATA: [39m HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"text/html","size":7842,"url":"/?worker=false","remote":"::ffff:192.168.0.200"}
|
||||||
|
2021-10-04 16:16:06 [32mDATA: [39m HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"text/css","size":107884,"url":"/icons.css","remote":"::ffff:192.168.0.200"}
|
||||||
|
2021-10-04 16:16:06 [32mDATA: [39m HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"text/javascript","size":47661,"url":"/index.js","remote":"::ffff:192.168.0.200"}
|
||||||
|
2021-10-04 16:16:06 [32mDATA: [39m HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"text/javascript","size":4635291,"url":"/dist/human.esm.js","remote":"::ffff:192.168.0.200"}
|
||||||
|
2021-10-04 16:16:06 [32mDATA: [39m HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"text/javascript","size":14222,"url":"/helpers/menu.js","remote":"::ffff:192.168.0.200"}
|
||||||
|
2021-10-04 16:16:06 [32mDATA: [39m HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"text/javascript","size":10894,"url":"/helpers/gl-bench.js","remote":"::ffff:192.168.0.200"}
|
||||||
|
2021-10-04 16:16:06 [32mDATA: [39m HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"text/javascript","size":3406,"url":"/helpers/webrtc.js","remote":"::ffff:192.168.0.200"}
|
||||||
|
2021-10-04 16:16:06 [32mDATA: [39m HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"text/javascript","size":5785,"url":"/helpers/jsonview.js","remote":"::ffff:192.168.0.200"}
|
||||||
|
2021-10-04 16:16:06 [32mDATA: [39m HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"font/woff2","size":181500,"url":"/assets/lato-light.woff2","remote":"::ffff:192.168.0.200"}
|
||||||
|
2021-10-04 16:16:07 [32mDATA: [39m HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"application/octet-stream","size":12155113,"url":"/dist/human.esm.js.map","remote":"::ffff:192.168.0.200"}
|
||||||
|
2021-10-04 16:16:07 [32mDATA: [39m HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"image/x-icon","size":261950,"url":"/favicon.ico","remote":"::ffff:192.168.0.200"}
|
||||||
|
2021-10-04 16:16:07 [32mDATA: [39m HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"text/javascript","size":4115,"url":"/index-pwa.js","remote":"::ffff:192.168.0.200"}
|
||||||
|
2021-10-04 16:18:14 [32mDATA: [39m HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"text/html","size":7842,"url":"/?worker=false","remote":"::ffff:192.168.0.200"}
|
||||||
|
2021-10-04 16:18:14 [32mDATA: [39m HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"text/css","size":107884,"url":"/icons.css","remote":"::ffff:192.168.0.200"}
|
||||||
|
2021-10-04 16:18:14 [32mDATA: [39m HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"text/javascript","size":47668,"url":"/index.js","remote":"::ffff:192.168.0.200"}
|
||||||
|
2021-10-04 16:18:14 [32mDATA: [39m HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"text/javascript","size":4635291,"url":"/dist/human.esm.js","remote":"::ffff:192.168.0.200"}
|
||||||
|
2021-10-04 16:18:14 [32mDATA: [39m HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"text/javascript","size":14222,"url":"/helpers/menu.js","remote":"::ffff:192.168.0.200"}
|
||||||
|
2021-10-04 16:18:14 [32mDATA: [39m HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"text/javascript","size":10894,"url":"/helpers/gl-bench.js","remote":"::ffff:192.168.0.200"}
|
||||||
|
2021-10-04 16:18:14 [32mDATA: [39m HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"text/javascript","size":3406,"url":"/helpers/webrtc.js","remote":"::ffff:192.168.0.200"}
|
||||||
|
2021-10-04 16:18:14 [32mDATA: [39m HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"text/javascript","size":5785,"url":"/helpers/jsonview.js","remote":"::ffff:192.168.0.200"}
|
||||||
|
2021-10-04 16:18:14 [32mDATA: [39m HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"font/woff2","size":181500,"url":"/assets/lato-light.woff2","remote":"::ffff:192.168.0.200"}
|
||||||
|
2021-10-04 16:18:14 [32mDATA: [39m HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"application/octet-stream","size":12155113,"url":"/dist/human.esm.js.map","remote":"::ffff:192.168.0.200"}
|
||||||
|
2021-10-04 16:18:14 [32mDATA: [39m HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"image/x-icon","size":261950,"url":"/favicon.ico","remote":"::ffff:192.168.0.200"}
|
||||||
|
2021-10-04 16:18:14 [32mDATA: [39m HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"text/javascript","size":4115,"url":"/index-pwa.js","remote":"::ffff:192.168.0.200"}
|
||||||
|
2021-10-04 16:19:25 [36mINFO: [39m Watch: {"event":"modify","input":"src/body/blazeposecoords.ts"}
|
||||||
|
2021-10-04 16:19:25 [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-10-04 16:19:25 [35mSTATE:[39m Compile: {"name":"human/nodejs/cpu","format":"cjs","platform":"node","input":"src/human.ts","output":"dist/human.node.js","files":52,"inputBytes":508352,"outputBytes":423175}
|
||||||
|
2021-10-04 16:19:25 [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-10-04 16:19:25 [35mSTATE:[39m Compile: {"name":"human/nodejs/gpu","format":"cjs","platform":"node","input":"src/human.ts","output":"dist/human.node-gpu.js","files":52,"inputBytes":508360,"outputBytes":423179}
|
||||||
|
2021-10-04 16:19:25 [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-10-04 16:19:26 [35mSTATE:[39m Compile: {"name":"human/nodejs/wasm","format":"cjs","platform":"node","input":"src/human.ts","output":"dist/human.node-wasm.js","files":52,"inputBytes":508427,"outputBytes":423251}
|
||||||
|
2021-10-04 16:19:26 [35mSTATE:[39m Compile: {"name":"tfjs/browser/version","format":"esm","platform":"browser","input":"tfjs/tf-version.ts","output":"dist/tfjs.version.js","files":1,"inputBytes":1063,"outputBytes":1631}
|
||||||
|
2021-10-04 16:19:26 [35mSTATE:[39m Compile: {"name":"tfjs/browser/esm/nobundle","format":"esm","platform":"browser","input":"tfjs/tf-browser.ts","output":"dist/tfjs.esm.js","files":2,"inputBytes":3088,"outputBytes":793}
|
||||||
|
2021-10-04 16:19:26 [35mSTATE:[39m Compile: {"name":"human/browser/esm/nobundle","format":"esm","platform":"browser","input":"src/human.ts","output":"dist/human.esm-nobundle.js","files":52,"inputBytes":507870,"outputBytes":424700}
|
||||||
|
2021-10-04 16:19:27 [35mSTATE:[39m Compile: {"name":"tfjs/browser/esm/bundle","format":"esm","platform":"browser","input":"tfjs/tf-browser.ts","output":"dist/tfjs.esm.js","files":8,"inputBytes":3088,"outputBytes":2377041}
|
||||||
|
2021-10-04 16:19:27 [35mSTATE:[39m Compile: {"name":"human/browser/iife/bundle","format":"iife","platform":"browser","input":"src/human.ts","output":"dist/human.js","files":55,"inputBytes":2884118,"outputBytes":2395399}
|
||||||
|
2021-10-04 16:19:28 [35mSTATE:[39m Compile: {"name":"human/browser/esm/bundle","format":"esm","platform":"browser","input":"src/human.ts","output":"dist/human.esm.js","files":55,"inputBytes":2884118,"outputBytes":4635290}
|
||||||
|
2021-10-04 16:19:38 [32mDATA: [39m HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"text/html","size":7842,"url":"/?worker=false","remote":"::ffff:192.168.0.200"}
|
||||||
|
2021-10-04 16:19:38 [32mDATA: [39m HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"text/css","size":107884,"url":"/icons.css","remote":"::ffff:192.168.0.200"}
|
||||||
|
2021-10-04 16:19:38 [32mDATA: [39m HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"text/javascript","size":47668,"url":"/index.js","remote":"::ffff:192.168.0.200"}
|
||||||
|
2021-10-04 16:19:38 [32mDATA: [39m HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"text/javascript","size":4635290,"url":"/dist/human.esm.js","remote":"::ffff:192.168.0.200"}
|
||||||
|
2021-10-04 16:19:38 [32mDATA: [39m HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"text/javascript","size":14222,"url":"/helpers/menu.js","remote":"::ffff:192.168.0.200"}
|
||||||
|
2021-10-04 16:19:38 [32mDATA: [39m HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"text/javascript","size":10894,"url":"/helpers/gl-bench.js","remote":"::ffff:192.168.0.200"}
|
||||||
|
2021-10-04 16:19:38 [32mDATA: [39m HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"text/javascript","size":3406,"url":"/helpers/webrtc.js","remote":"::ffff:192.168.0.200"}
|
||||||
|
2021-10-04 16:19:38 [32mDATA: [39m HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"text/javascript","size":5785,"url":"/helpers/jsonview.js","remote":"::ffff:192.168.0.200"}
|
||||||
|
2021-10-04 16:19:38 [32mDATA: [39m HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"font/woff2","size":181500,"url":"/assets/lato-light.woff2","remote":"::ffff:192.168.0.200"}
|
||||||
|
2021-10-04 16:19:38 [32mDATA: [39m HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"application/octet-stream","size":12155113,"url":"/dist/human.esm.js.map","remote":"::ffff:192.168.0.200"}
|
||||||
|
2021-10-04 16:19:39 [32mDATA: [39m HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"image/x-icon","size":261950,"url":"/favicon.ico","remote":"::ffff:192.168.0.200"}
|
||||||
|
2021-10-04 16:19:39 [32mDATA: [39m HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"text/javascript","size":4115,"url":"/index-pwa.js","remote":"::ffff:192.168.0.200"}
|
||||||
|
2021-10-04 16:20:08 [32mDATA: [39m HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"text/html","size":7842,"url":"/?worker=false","remote":"::ffff:192.168.0.200"}
|
||||||
|
2021-10-04 16:20:08 [32mDATA: [39m HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"text/css","size":107884,"url":"/icons.css","remote":"::ffff:192.168.0.200"}
|
||||||
|
2021-10-04 16:20:08 [32mDATA: [39m HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"text/javascript","size":47668,"url":"/index.js","remote":"::ffff:192.168.0.200"}
|
||||||
|
2021-10-04 16:20:08 [32mDATA: [39m HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"text/javascript","size":4635290,"url":"/dist/human.esm.js","remote":"::ffff:192.168.0.200"}
|
||||||
|
2021-10-04 16:20:08 [32mDATA: [39m HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"text/javascript","size":14222,"url":"/helpers/menu.js","remote":"::ffff:192.168.0.200"}
|
||||||
|
2021-10-04 16:20:08 [32mDATA: [39m HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"text/javascript","size":10894,"url":"/helpers/gl-bench.js","remote":"::ffff:192.168.0.200"}
|
||||||
|
2021-10-04 16:20:08 [32mDATA: [39m HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"text/javascript","size":3406,"url":"/helpers/webrtc.js","remote":"::ffff:192.168.0.200"}
|
||||||
|
2021-10-04 16:20:08 [32mDATA: [39m HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"text/javascript","size":5785,"url":"/helpers/jsonview.js","remote":"::ffff:192.168.0.200"}
|
||||||
|
2021-10-04 16:20:08 [32mDATA: [39m HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"font/woff2","size":181500,"url":"/assets/lato-light.woff2","remote":"::ffff:192.168.0.200"}
|
||||||
|
2021-10-04 16:20:09 [32mDATA: [39m HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"application/octet-stream","size":12155113,"url":"/dist/human.esm.js.map","remote":"::ffff:192.168.0.200"}
|
||||||
|
2021-10-04 16:20:09 [32mDATA: [39m HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"image/x-icon","size":261950,"url":"/favicon.ico","remote":"::ffff:192.168.0.200"}
|
||||||
|
2021-10-04 16:20:09 [32mDATA: [39m HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"text/javascript","size":4115,"url":"/index-pwa.js","remote":"::ffff:192.168.0.200"}
|
||||||
|
2021-10-04 16:20:53 [32mDATA: [39m HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"text/html","size":7842,"url":"/?worker=false","remote":"::ffff:192.168.0.200"}
|
||||||
|
2021-10-04 16:20:53 [32mDATA: [39m HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"text/css","size":107884,"url":"/icons.css","remote":"::ffff:192.168.0.200"}
|
||||||
|
2021-10-04 16:20:53 [32mDATA: [39m HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"text/javascript","size":47669,"url":"/index.js","remote":"::ffff:192.168.0.200"}
|
||||||
|
2021-10-04 16:20:53 [32mDATA: [39m HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"text/javascript","size":4635290,"url":"/dist/human.esm.js","remote":"::ffff:192.168.0.200"}
|
||||||
|
2021-10-04 16:20:53 [32mDATA: [39m HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"text/javascript","size":14222,"url":"/helpers/menu.js","remote":"::ffff:192.168.0.200"}
|
||||||
|
2021-10-04 16:20:53 [32mDATA: [39m HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"text/javascript","size":10894,"url":"/helpers/gl-bench.js","remote":"::ffff:192.168.0.200"}
|
||||||
|
2021-10-04 16:20:53 [32mDATA: [39m HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"text/javascript","size":3406,"url":"/helpers/webrtc.js","remote":"::ffff:192.168.0.200"}
|
||||||
|
2021-10-04 16:20:53 [32mDATA: [39m HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"text/javascript","size":5785,"url":"/helpers/jsonview.js","remote":"::ffff:192.168.0.200"}
|
||||||
|
2021-10-04 16:20:53 [32mDATA: [39m HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"font/woff2","size":181500,"url":"/assets/lato-light.woff2","remote":"::ffff:192.168.0.200"}
|
||||||
|
2021-10-04 16:20:53 [32mDATA: [39m HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"application/octet-stream","size":12155113,"url":"/dist/human.esm.js.map","remote":"::ffff:192.168.0.200"}
|
||||||
|
2021-10-04 16:20:54 [32mDATA: [39m HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"image/x-icon","size":261950,"url":"/favicon.ico","remote":"::ffff:192.168.0.200"}
|
||||||
|
2021-10-04 16:20:54 [32mDATA: [39m HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"text/javascript","size":4115,"url":"/index-pwa.js","remote":"::ffff:192.168.0.200"}
|
||||||
|
2021-10-04 16:21:56 [36mINFO: [39m Watch: {"event":"modify","input":"src/config.ts"}
|
||||||
|
2021-10-04 16:21:56 [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-10-04 16:21:56 [35mSTATE:[39m Compile: {"name":"human/nodejs/cpu","format":"cjs","platform":"node","input":"src/human.ts","output":"dist/human.node.js","files":52,"inputBytes":508352,"outputBytes":423175}
|
||||||
|
2021-10-04 16:21:56 [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-10-04 16:21:56 [35mSTATE:[39m Compile: {"name":"human/nodejs/gpu","format":"cjs","platform":"node","input":"src/human.ts","output":"dist/human.node-gpu.js","files":52,"inputBytes":508360,"outputBytes":423179}
|
||||||
|
2021-10-04 16:21:56 [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-10-04 16:21:56 [35mSTATE:[39m Compile: {"name":"human/nodejs/wasm","format":"cjs","platform":"node","input":"src/human.ts","output":"dist/human.node-wasm.js","files":52,"inputBytes":508427,"outputBytes":423251}
|
||||||
|
2021-10-04 16:21:56 [35mSTATE:[39m Compile: {"name":"tfjs/browser/version","format":"esm","platform":"browser","input":"tfjs/tf-version.ts","output":"dist/tfjs.version.js","files":1,"inputBytes":1063,"outputBytes":1631}
|
||||||
|
2021-10-04 16:21:56 [35mSTATE:[39m Compile: {"name":"tfjs/browser/esm/nobundle","format":"esm","platform":"browser","input":"tfjs/tf-browser.ts","output":"dist/tfjs.esm.js","files":2,"inputBytes":3088,"outputBytes":793}
|
||||||
|
2021-10-04 16:21:56 [35mSTATE:[39m Compile: {"name":"human/browser/esm/nobundle","format":"esm","platform":"browser","input":"src/human.ts","output":"dist/human.esm-nobundle.js","files":52,"inputBytes":507870,"outputBytes":424700}
|
||||||
|
2021-10-04 16:21:57 [35mSTATE:[39m Compile: {"name":"tfjs/browser/esm/bundle","format":"esm","platform":"browser","input":"tfjs/tf-browser.ts","output":"dist/tfjs.esm.js","files":8,"inputBytes":3088,"outputBytes":2377041}
|
||||||
|
2021-10-04 16:21:57 [35mSTATE:[39m Compile: {"name":"human/browser/iife/bundle","format":"iife","platform":"browser","input":"src/human.ts","output":"dist/human.js","files":55,"inputBytes":2884118,"outputBytes":2395399}
|
||||||
|
2021-10-04 16:21:57 [32mDATA: [39m HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"text/html","size":7842,"url":"/?worker=false","remote":"::ffff:192.168.0.200"}
|
||||||
|
2021-10-04 16:21:57 [32mDATA: [39m HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"text/css","size":107884,"url":"/icons.css","remote":"::ffff:192.168.0.200"}
|
||||||
|
2021-10-04 16:21:57 [32mDATA: [39m HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"text/javascript","size":47668,"url":"/index.js","remote":"::ffff:192.168.0.200"}
|
||||||
|
2021-10-04 16:21:57 [32mDATA: [39m HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"text/javascript","size":4635290,"url":"/dist/human.esm.js","remote":"::ffff:192.168.0.200"}
|
||||||
|
2021-10-04 16:21:57 [32mDATA: [39m HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"text/javascript","size":14222,"url":"/helpers/menu.js","remote":"::ffff:192.168.0.200"}
|
||||||
|
2021-10-04 16:21:57 [32mDATA: [39m HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"text/javascript","size":10894,"url":"/helpers/gl-bench.js","remote":"::ffff:192.168.0.200"}
|
||||||
|
2021-10-04 16:21:57 [32mDATA: [39m HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"text/javascript","size":3406,"url":"/helpers/webrtc.js","remote":"::ffff:192.168.0.200"}
|
||||||
|
2021-10-04 16:21:57 [32mDATA: [39m HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"text/javascript","size":5785,"url":"/helpers/jsonview.js","remote":"::ffff:192.168.0.200"}
|
||||||
|
2021-10-04 16:21:57 [32mDATA: [39m HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"font/woff2","size":181500,"url":"/assets/lato-light.woff2","remote":"::ffff:192.168.0.200"}
|
||||||
|
2021-10-04 16:21:58 [32mDATA: [39m HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"application/octet-stream","size":12155113,"url":"/dist/human.esm.js.map","remote":"::ffff:192.168.0.200"}
|
||||||
|
2021-10-04 16:21:58 [32mDATA: [39m HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"image/x-icon","size":261950,"url":"/favicon.ico","remote":"::ffff:192.168.0.200"}
|
||||||
|
2021-10-04 16:21:58 [32mDATA: [39m HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"text/javascript","size":4115,"url":"/index-pwa.js","remote":"::ffff:192.168.0.200"}
|
||||||
|
2021-10-04 16:21:58 [35mSTATE:[39m Compile: {"name":"human/browser/esm/bundle","format":"esm","platform":"browser","input":"src/human.ts","output":"dist/human.esm.js","files":55,"inputBytes":2884118,"outputBytes":4635290}
|
||||||
|
2021-10-04 16:22:23 [36mINFO: [39m Watch: {"event":"modify","input":"src/config.ts"}
|
||||||
|
2021-10-04 16:22:23 [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-10-04 16:22:24 [35mSTATE:[39m Compile: {"name":"human/nodejs/cpu","format":"cjs","platform":"node","input":"src/human.ts","output":"dist/human.node.js","files":52,"inputBytes":508352,"outputBytes":423175}
|
||||||
|
2021-10-04 16:22:24 [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-10-04 16:22:24 [35mSTATE:[39m Compile: {"name":"human/nodejs/gpu","format":"cjs","platform":"node","input":"src/human.ts","output":"dist/human.node-gpu.js","files":52,"inputBytes":508360,"outputBytes":423179}
|
||||||
|
2021-10-04 16:22:24 [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-10-04 16:22:24 [35mSTATE:[39m Compile: {"name":"human/nodejs/wasm","format":"cjs","platform":"node","input":"src/human.ts","output":"dist/human.node-wasm.js","files":52,"inputBytes":508427,"outputBytes":423251}
|
||||||
|
2021-10-04 16:22:24 [35mSTATE:[39m Compile: {"name":"tfjs/browser/version","format":"esm","platform":"browser","input":"tfjs/tf-version.ts","output":"dist/tfjs.version.js","files":1,"inputBytes":1063,"outputBytes":1631}
|
||||||
|
2021-10-04 16:22:24 [35mSTATE:[39m Compile: {"name":"tfjs/browser/esm/nobundle","format":"esm","platform":"browser","input":"tfjs/tf-browser.ts","output":"dist/tfjs.esm.js","files":2,"inputBytes":3088,"outputBytes":793}
|
||||||
|
2021-10-04 16:22:24 [35mSTATE:[39m Compile: {"name":"human/browser/esm/nobundle","format":"esm","platform":"browser","input":"src/human.ts","output":"dist/human.esm-nobundle.js","files":52,"inputBytes":507870,"outputBytes":424700}
|
||||||
|
2021-10-04 16:22:24 [35mSTATE:[39m Compile: {"name":"tfjs/browser/esm/bundle","format":"esm","platform":"browser","input":"tfjs/tf-browser.ts","output":"dist/tfjs.esm.js","files":8,"inputBytes":3088,"outputBytes":2377041}
|
||||||
|
2021-10-04 16:22:25 [35mSTATE:[39m Compile: {"name":"human/browser/iife/bundle","format":"iife","platform":"browser","input":"src/human.ts","output":"dist/human.js","files":55,"inputBytes":2884118,"outputBytes":2395399}
|
||||||
|
2021-10-04 16:22:25 [32mDATA: [39m HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"text/html","size":7842,"url":"/?worker=false","remote":"::ffff:192.168.0.200"}
|
||||||
|
2021-10-04 16:22:25 [32mDATA: [39m HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"text/css","size":107884,"url":"/icons.css","remote":"::ffff:192.168.0.200"}
|
||||||
|
2021-10-04 16:22:25 [32mDATA: [39m HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"text/javascript","size":47668,"url":"/index.js","remote":"::ffff:192.168.0.200"}
|
||||||
|
2021-10-04 16:22:25 [32mDATA: [39m HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"text/javascript","size":4635290,"url":"/dist/human.esm.js","remote":"::ffff:192.168.0.200"}
|
||||||
|
2021-10-04 16:22:25 [32mDATA: [39m HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"text/javascript","size":14222,"url":"/helpers/menu.js","remote":"::ffff:192.168.0.200"}
|
||||||
|
2021-10-04 16:22:25 [32mDATA: [39m HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"text/javascript","size":10894,"url":"/helpers/gl-bench.js","remote":"::ffff:192.168.0.200"}
|
||||||
|
2021-10-04 16:22:25 [32mDATA: [39m HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"text/javascript","size":3406,"url":"/helpers/webrtc.js","remote":"::ffff:192.168.0.200"}
|
||||||
|
2021-10-04 16:22:25 [32mDATA: [39m HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"text/javascript","size":5785,"url":"/helpers/jsonview.js","remote":"::ffff:192.168.0.200"}
|
||||||
|
2021-10-04 16:22:25 [32mDATA: [39m HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"font/woff2","size":181500,"url":"/assets/lato-light.woff2","remote":"::ffff:192.168.0.200"}
|
||||||
|
2021-10-04 16:22:26 [35mSTATE:[39m Compile: {"name":"human/browser/esm/bundle","format":"esm","platform":"browser","input":"src/human.ts","output":"dist/human.esm.js","files":55,"inputBytes":2884118,"outputBytes":4635290}
|
||||||
|
2021-10-04 16:22:26 [32mDATA: [39m HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"application/octet-stream","size":12155113,"url":"/dist/human.esm.js.map","remote":"::ffff:192.168.0.200"}
|
||||||
|
2021-10-04 16:22:26 [32mDATA: [39m HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"image/x-icon","size":261950,"url":"/favicon.ico","remote":"::ffff:192.168.0.200"}
|
||||||
|
2021-10-04 16:22:26 [32mDATA: [39m HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"text/javascript","size":4115,"url":"/index-pwa.js","remote":"::ffff:192.168.0.200"}
|
||||||
|
2021-10-04 16:23:06 [32mDATA: [39m HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"text/html","size":7842,"url":"/","remote":"::ffff:192.168.0.200"}
|
||||||
|
2021-10-04 16:23:06 [32mDATA: [39m HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"text/css","size":107884,"url":"/icons.css","remote":"::ffff:192.168.0.200"}
|
||||||
|
2021-10-04 16:23:06 [32mDATA: [39m HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"text/javascript","size":47668,"url":"/index.js","remote":"::ffff:192.168.0.200"}
|
||||||
|
2021-10-04 16:23:06 [32mDATA: [39m HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"text/javascript","size":4635290,"url":"/dist/human.esm.js","remote":"::ffff:192.168.0.200"}
|
||||||
|
2021-10-04 16:23:06 [32mDATA: [39m HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"text/javascript","size":14222,"url":"/helpers/menu.js","remote":"::ffff:192.168.0.200"}
|
||||||
|
2021-10-04 16:23:06 [32mDATA: [39m HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"text/javascript","size":10894,"url":"/helpers/gl-bench.js","remote":"::ffff:192.168.0.200"}
|
||||||
|
2021-10-04 16:23:06 [32mDATA: [39m HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"text/javascript","size":3406,"url":"/helpers/webrtc.js","remote":"::ffff:192.168.0.200"}
|
||||||
|
2021-10-04 16:23:06 [32mDATA: [39m HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"text/javascript","size":5785,"url":"/helpers/jsonview.js","remote":"::ffff:192.168.0.200"}
|
||||||
|
2021-10-04 16:23:06 [32mDATA: [39m HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"font/woff2","size":181500,"url":"/assets/lato-light.woff2","remote":"::ffff:192.168.0.200"}
|
||||||
|
2021-10-04 16:23:06 [32mDATA: [39m HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"application/octet-stream","size":12155113,"url":"/dist/human.esm.js.map","remote":"::ffff:192.168.0.200"}
|
||||||
|
2021-10-04 16:23:06 [32mDATA: [39m HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"text/javascript","size":4115,"url":"/index-pwa.js","remote":"::ffff:192.168.0.200"}
|
||||||
|
2021-10-04 16:23:10 [32mDATA: [39m HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"text/javascript","size":1816,"url":"/index-worker.js","remote":"::ffff:192.168.0.200"}
|
||||||
|
2021-10-04 16:23:10 [32mDATA: [39m HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"text/javascript","size":2395399,"url":"/dist/human.js","remote":"::ffff:192.168.0.200"}
|
||||||
|
2021-10-04 16:23:43 [36mINFO: [39m Watch: {"event":"modify","input":"src/tfjs/humangl.ts"}
|
||||||
|
2021-10-04 16:23:43 [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-10-04 16:23:43 [35mSTATE:[39m Compile: {"name":"human/nodejs/cpu","format":"cjs","platform":"node","input":"src/human.ts","output":"dist/human.node.js","files":52,"inputBytes":508355,"outputBytes":423125}
|
||||||
|
2021-10-04 16:23:43 [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-10-04 16:23:44 [35mSTATE:[39m Compile: {"name":"human/nodejs/gpu","format":"cjs","platform":"node","input":"src/human.ts","output":"dist/human.node-gpu.js","files":52,"inputBytes":508363,"outputBytes":423129}
|
||||||
|
2021-10-04 16:23:44 [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-10-04 16:23:44 [35mSTATE:[39m Compile: {"name":"human/nodejs/wasm","format":"cjs","platform":"node","input":"src/human.ts","output":"dist/human.node-wasm.js","files":52,"inputBytes":508430,"outputBytes":423201}
|
||||||
|
2021-10-04 16:23:44 [35mSTATE:[39m Compile: {"name":"tfjs/browser/version","format":"esm","platform":"browser","input":"tfjs/tf-version.ts","output":"dist/tfjs.version.js","files":1,"inputBytes":1063,"outputBytes":1631}
|
||||||
|
2021-10-04 16:23:44 [35mSTATE:[39m Compile: {"name":"tfjs/browser/esm/nobundle","format":"esm","platform":"browser","input":"tfjs/tf-browser.ts","output":"dist/tfjs.esm.js","files":2,"inputBytes":3088,"outputBytes":793}
|
||||||
|
2021-10-04 16:23:44 [35mSTATE:[39m Compile: {"name":"human/browser/esm/nobundle","format":"esm","platform":"browser","input":"src/human.ts","output":"dist/human.esm-nobundle.js","files":52,"inputBytes":507873,"outputBytes":424650}
|
||||||
|
2021-10-04 16:23:44 [35mSTATE:[39m Compile: {"name":"tfjs/browser/esm/bundle","format":"esm","platform":"browser","input":"tfjs/tf-browser.ts","output":"dist/tfjs.esm.js","files":8,"inputBytes":3088,"outputBytes":2377041}
|
||||||
|
2021-10-04 16:23:45 [35mSTATE:[39m Compile: {"name":"human/browser/iife/bundle","format":"iife","platform":"browser","input":"src/human.ts","output":"dist/human.js","files":55,"inputBytes":2884121,"outputBytes":2395360}
|
||||||
|
2021-10-04 16:23:46 [35mSTATE:[39m Compile: {"name":"human/browser/esm/bundle","format":"esm","platform":"browser","input":"src/human.ts","output":"dist/human.esm.js","files":55,"inputBytes":2884121,"outputBytes":4635240}
|
||||||
|
2021-10-04 16:23:49 [32mDATA: [39m HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"text/html","size":7842,"url":"/","remote":"::ffff:192.168.0.200"}
|
||||||
|
2021-10-04 16:23:49 [32mDATA: [39m HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"text/css","size":107884,"url":"/icons.css","remote":"::ffff:192.168.0.200"}
|
||||||
|
2021-10-04 16:23:49 [32mDATA: [39m HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"text/javascript","size":47668,"url":"/index.js","remote":"::ffff:192.168.0.200"}
|
||||||
|
2021-10-04 16:23:49 [32mDATA: [39m HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"text/javascript","size":4635240,"url":"/dist/human.esm.js","remote":"::ffff:192.168.0.200"}
|
||||||
|
2021-10-04 16:23:49 [32mDATA: [39m HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"text/javascript","size":14222,"url":"/helpers/menu.js","remote":"::ffff:192.168.0.200"}
|
||||||
|
2021-10-04 16:23:49 [32mDATA: [39m HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"text/javascript","size":10894,"url":"/helpers/gl-bench.js","remote":"::ffff:192.168.0.200"}
|
||||||
|
2021-10-04 16:23:49 [32mDATA: [39m HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"text/javascript","size":3406,"url":"/helpers/webrtc.js","remote":"::ffff:192.168.0.200"}
|
||||||
|
2021-10-04 16:23:49 [32mDATA: [39m HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"text/javascript","size":5785,"url":"/helpers/jsonview.js","remote":"::ffff:192.168.0.200"}
|
||||||
|
2021-10-04 16:23:49 [32mDATA: [39m HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"font/woff2","size":181500,"url":"/assets/lato-light.woff2","remote":"::ffff:192.168.0.200"}
|
||||||
|
2021-10-04 16:23:50 [32mDATA: [39m HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"application/octet-stream","size":12155095,"url":"/dist/human.esm.js.map","remote":"::ffff:192.168.0.200"}
|
||||||
|
2021-10-04 16:23:50 [32mDATA: [39m HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"image/x-icon","size":261950,"url":"/favicon.ico","remote":"::ffff:192.168.0.200"}
|
||||||
|
2021-10-04 16:23:50 [32mDATA: [39m HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"text/javascript","size":4115,"url":"/index-pwa.js","remote":"::ffff:192.168.0.200"}
|
||||||
|
2021-10-04 16:23:55 [32mDATA: [39m HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"text/javascript","size":1816,"url":"/index-worker.js","remote":"::ffff:192.168.0.200"}
|
||||||
|
2021-10-04 16:23:55 [32mDATA: [39m HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"text/javascript","size":2395360,"url":"/dist/human.js","remote":"::ffff:192.168.0.200"}
|
||||||
|
2021-10-04 16:24:46 [36mINFO: [39m Watch: {"event":"modify","input":"src/image/image.ts"}
|
||||||
|
2021-10-04 16:24:46 [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-10-04 16:24:46 [35mSTATE:[39m Compile: {"name":"human/nodejs/cpu","format":"cjs","platform":"node","input":"src/human.ts","output":"dist/human.node.js","files":52,"inputBytes":508487,"outputBytes":423258}
|
||||||
|
2021-10-04 16:24:46 [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-10-04 16:24:46 [35mSTATE:[39m Compile: {"name":"human/nodejs/gpu","format":"cjs","platform":"node","input":"src/human.ts","output":"dist/human.node-gpu.js","files":52,"inputBytes":508495,"outputBytes":423262}
|
||||||
|
2021-10-04 16:24:46 [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-10-04 16:24:46 [35mSTATE:[39m Compile: {"name":"human/nodejs/wasm","format":"cjs","platform":"node","input":"src/human.ts","output":"dist/human.node-wasm.js","files":52,"inputBytes":508562,"outputBytes":423334}
|
||||||
|
2021-10-04 16:24:47 [35mSTATE:[39m Compile: {"name":"tfjs/browser/version","format":"esm","platform":"browser","input":"tfjs/tf-version.ts","output":"dist/tfjs.version.js","files":1,"inputBytes":1063,"outputBytes":1631}
|
||||||
|
2021-10-04 16:24:47 [35mSTATE:[39m Compile: {"name":"tfjs/browser/esm/nobundle","format":"esm","platform":"browser","input":"tfjs/tf-browser.ts","output":"dist/tfjs.esm.js","files":2,"inputBytes":3088,"outputBytes":793}
|
||||||
|
2021-10-04 16:24:47 [35mSTATE:[39m Compile: {"name":"human/browser/esm/nobundle","format":"esm","platform":"browser","input":"src/human.ts","output":"dist/human.esm-nobundle.js","files":52,"inputBytes":508005,"outputBytes":424809}
|
||||||
|
2021-10-04 16:24:47 [35mSTATE:[39m Compile: {"name":"tfjs/browser/esm/bundle","format":"esm","platform":"browser","input":"tfjs/tf-browser.ts","output":"dist/tfjs.esm.js","files":8,"inputBytes":3088,"outputBytes":2377041}
|
||||||
|
2021-10-04 16:24:48 [35mSTATE:[39m Compile: {"name":"human/browser/iife/bundle","format":"iife","platform":"browser","input":"src/human.ts","output":"dist/human.js","files":55,"inputBytes":2884253,"outputBytes":2395423}
|
||||||
|
2021-10-04 16:24:49 [35mSTATE:[39m Compile: {"name":"human/browser/esm/bundle","format":"esm","platform":"browser","input":"src/human.ts","output":"dist/human.esm.js","files":55,"inputBytes":2884253,"outputBytes":4635381}
|
||||||
|
2021-10-04 16:25:04 [32mDATA: [39m HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"text/html","size":7842,"url":"/","remote":"::ffff:192.168.0.200"}
|
||||||
|
2021-10-04 16:25:04 [32mDATA: [39m HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"text/css","size":107884,"url":"/icons.css","remote":"::ffff:192.168.0.200"}
|
||||||
|
2021-10-04 16:25:04 [32mDATA: [39m HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"text/javascript","size":47668,"url":"/index.js","remote":"::ffff:192.168.0.200"}
|
||||||
|
2021-10-04 16:25:04 [32mDATA: [39m HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"text/javascript","size":4635381,"url":"/dist/human.esm.js","remote":"::ffff:192.168.0.200"}
|
||||||
|
2021-10-04 16:25:04 [32mDATA: [39m HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"text/javascript","size":14222,"url":"/helpers/menu.js","remote":"::ffff:192.168.0.200"}
|
||||||
|
2021-10-04 16:25:04 [32mDATA: [39m HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"text/javascript","size":10894,"url":"/helpers/gl-bench.js","remote":"::ffff:192.168.0.200"}
|
||||||
|
2021-10-04 16:25:04 [32mDATA: [39m HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"text/javascript","size":3406,"url":"/helpers/webrtc.js","remote":"::ffff:192.168.0.200"}
|
||||||
|
2021-10-04 16:25:04 [32mDATA: [39m HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"text/javascript","size":5785,"url":"/helpers/jsonview.js","remote":"::ffff:192.168.0.200"}
|
||||||
|
2021-10-04 16:25:04 [32mDATA: [39m HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"font/woff2","size":181500,"url":"/assets/lato-light.woff2","remote":"::ffff:192.168.0.200"}
|
||||||
|
2021-10-04 16:25:04 [32mDATA: [39m HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"application/octet-stream","size":12155305,"url":"/dist/human.esm.js.map","remote":"::ffff:192.168.0.200"}
|
||||||
|
2021-10-04 16:25:04 [32mDATA: [39m HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"image/x-icon","size":261950,"url":"/favicon.ico","remote":"::ffff:192.168.0.200"}
|
||||||
|
2021-10-04 16:25:05 [32mDATA: [39m HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"text/javascript","size":4115,"url":"/index-pwa.js","remote":"::ffff:192.168.0.200"}
|
||||||
|
2021-10-04 16:25:07 [32mDATA: [39m HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"text/javascript","size":1816,"url":"/index-worker.js","remote":"::ffff:192.168.0.200"}
|
||||||
|
2021-10-04 16:25:07 [32mDATA: [39m HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"text/javascript","size":2395423,"url":"/dist/human.js","remote":"::ffff:192.168.0.200"}
|
||||||
|
2021-10-04 16:25:47 [32mDATA: [39m HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"text/html","size":7842,"url":"/","remote":"::ffff:192.168.0.200"}
|
||||||
|
2021-10-04 16:25:47 [32mDATA: [39m HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"text/css","size":107884,"url":"/icons.css","remote":"::ffff:192.168.0.200"}
|
||||||
|
2021-10-04 16:25:47 [32mDATA: [39m HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"text/javascript","size":47668,"url":"/index.js","remote":"::ffff:192.168.0.200"}
|
||||||
|
2021-10-04 16:25:47 [32mDATA: [39m HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"text/javascript","size":4635381,"url":"/dist/human.esm.js","remote":"::ffff:192.168.0.200"}
|
||||||
|
2021-10-04 16:25:47 [32mDATA: [39m HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"text/javascript","size":14222,"url":"/helpers/menu.js","remote":"::ffff:192.168.0.200"}
|
||||||
|
2021-10-04 16:25:47 [32mDATA: [39m HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"text/javascript","size":10894,"url":"/helpers/gl-bench.js","remote":"::ffff:192.168.0.200"}
|
||||||
|
2021-10-04 16:25:47 [32mDATA: [39m HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"text/javascript","size":3406,"url":"/helpers/webrtc.js","remote":"::ffff:192.168.0.200"}
|
||||||
|
2021-10-04 16:25:47 [32mDATA: [39m HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"text/javascript","size":5785,"url":"/helpers/jsonview.js","remote":"::ffff:192.168.0.200"}
|
||||||
|
2021-10-04 16:25:47 [32mDATA: [39m HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"font/woff2","size":181500,"url":"/assets/lato-light.woff2","remote":"::ffff:192.168.0.200"}
|
||||||
|
2021-10-04 16:25:48 [32mDATA: [39m HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"application/octet-stream","size":12155305,"url":"/dist/human.esm.js.map","remote":"::ffff:192.168.0.200"}
|
||||||
|
2021-10-04 16:25:48 [32mDATA: [39m HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"text/javascript","size":4115,"url":"/index-pwa.js","remote":"::ffff:192.168.0.200"}
|
||||||
|
2021-10-04 16:25:53 [32mDATA: [39m HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"text/html","size":7842,"url":"/?backend=webgl&warmup=body&worker=false","remote":"::ffff:192.168.0.200"}
|
||||||
|
2021-10-04 16:25:53 [32mDATA: [39m HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"text/css","size":107884,"url":"/icons.css","remote":"::ffff:192.168.0.200"}
|
||||||
|
2021-10-04 16:25:53 [32mDATA: [39m HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"text/javascript","size":47668,"url":"/index.js","remote":"::ffff:192.168.0.200"}
|
||||||
|
2021-10-04 16:25:53 [32mDATA: [39m HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"text/javascript","size":4635381,"url":"/dist/human.esm.js","remote":"::ffff:192.168.0.200"}
|
||||||
|
2021-10-04 16:25:53 [32mDATA: [39m HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"text/javascript","size":14222,"url":"/helpers/menu.js","remote":"::ffff:192.168.0.200"}
|
||||||
|
2021-10-04 16:25:53 [32mDATA: [39m HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"text/javascript","size":10894,"url":"/helpers/gl-bench.js","remote":"::ffff:192.168.0.200"}
|
||||||
|
2021-10-04 16:25:53 [32mDATA: [39m HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"text/javascript","size":3406,"url":"/helpers/webrtc.js","remote":"::ffff:192.168.0.200"}
|
||||||
|
2021-10-04 16:25:53 [32mDATA: [39m HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"text/javascript","size":5785,"url":"/helpers/jsonview.js","remote":"::ffff:192.168.0.200"}
|
||||||
|
2021-10-04 16:25:53 [32mDATA: [39m HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"font/woff2","size":181500,"url":"/assets/lato-light.woff2","remote":"::ffff:192.168.0.200"}
|
||||||
|
2021-10-04 16:25:53 [32mDATA: [39m HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"application/octet-stream","size":12155305,"url":"/dist/human.esm.js.map","remote":"::ffff:192.168.0.200"}
|
||||||
|
2021-10-04 16:25:53 [32mDATA: [39m HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"text/javascript","size":4115,"url":"/index-pwa.js","remote":"::ffff:192.168.0.200"}
|
||||||
|
2021-10-04 16:26:05 [32mDATA: [39m HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"text/html","size":7842,"url":"/?backend=webgl","remote":"::ffff:192.168.0.200"}
|
||||||
|
2021-10-04 16:26:05 [32mDATA: [39m HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"text/css","size":107884,"url":"/icons.css","remote":"::ffff:192.168.0.200"}
|
||||||
|
2021-10-04 16:26:05 [32mDATA: [39m HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"text/javascript","size":47668,"url":"/index.js","remote":"::ffff:192.168.0.200"}
|
||||||
|
2021-10-04 16:26:05 [32mDATA: [39m HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"text/javascript","size":4635381,"url":"/dist/human.esm.js","remote":"::ffff:192.168.0.200"}
|
||||||
|
2021-10-04 16:26:05 [32mDATA: [39m HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"text/javascript","size":14222,"url":"/helpers/menu.js","remote":"::ffff:192.168.0.200"}
|
||||||
|
2021-10-04 16:26:05 [32mDATA: [39m HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"text/javascript","size":10894,"url":"/helpers/gl-bench.js","remote":"::ffff:192.168.0.200"}
|
||||||
|
2021-10-04 16:26:05 [32mDATA: [39m HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"text/javascript","size":3406,"url":"/helpers/webrtc.js","remote":"::ffff:192.168.0.200"}
|
||||||
|
2021-10-04 16:26:05 [32mDATA: [39m HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"text/javascript","size":5785,"url":"/helpers/jsonview.js","remote":"::ffff:192.168.0.200"}
|
||||||
|
2021-10-04 16:26:05 [32mDATA: [39m HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"font/woff2","size":181500,"url":"/assets/lato-light.woff2","remote":"::ffff:192.168.0.200"}
|
||||||
|
2021-10-04 16:26:06 [32mDATA: [39m HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"application/octet-stream","size":12155305,"url":"/dist/human.esm.js.map","remote":"::ffff:192.168.0.200"}
|
||||||
|
2021-10-04 16:26:06 [32mDATA: [39m HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"text/javascript","size":4115,"url":"/index-pwa.js","remote":"::ffff:192.168.0.200"}
|
||||||
|
2021-10-04 16:26:09 [32mDATA: [39m HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"text/javascript","size":1816,"url":"/index-worker.js","remote":"::ffff:192.168.0.200"}
|
||||||
|
2021-10-04 16:26:09 [32mDATA: [39m HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"text/javascript","size":2395423,"url":"/dist/human.js","remote":"::ffff:192.168.0.200"}
|
||||||
|
2021-10-04 16:26:40 [32mDATA: [39m HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"text/html","size":7842,"url":"/?backend=webgl","remote":"::ffff:192.168.0.200"}
|
||||||
|
2021-10-04 16:26:40 [32mDATA: [39m HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"text/css","size":107884,"url":"/icons.css","remote":"::ffff:192.168.0.200"}
|
||||||
|
2021-10-04 16:26:40 [32mDATA: [39m HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"text/javascript","size":47668,"url":"/index.js","remote":"::ffff:192.168.0.200"}
|
||||||
|
2021-10-04 16:26:40 [32mDATA: [39m HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"text/javascript","size":4635381,"url":"/dist/human.esm.js","remote":"::ffff:192.168.0.200"}
|
||||||
|
2021-10-04 16:26:40 [32mDATA: [39m HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"text/javascript","size":14222,"url":"/helpers/menu.js","remote":"::ffff:192.168.0.200"}
|
||||||
|
2021-10-04 16:26:40 [32mDATA: [39m HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"text/javascript","size":10894,"url":"/helpers/gl-bench.js","remote":"::ffff:192.168.0.200"}
|
||||||
|
2021-10-04 16:26:40 [32mDATA: [39m HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"text/javascript","size":3406,"url":"/helpers/webrtc.js","remote":"::ffff:192.168.0.200"}
|
||||||
|
2021-10-04 16:26:40 [32mDATA: [39m HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"text/javascript","size":5785,"url":"/helpers/jsonview.js","remote":"::ffff:192.168.0.200"}
|
||||||
|
2021-10-04 16:26:40 [32mDATA: [39m HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"font/woff2","size":181500,"url":"/assets/lato-light.woff2","remote":"::ffff:192.168.0.200"}
|
||||||
|
2021-10-04 16:26:41 [32mDATA: [39m HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"text/javascript","size":4115,"url":"/index-pwa.js","remote":"::ffff:192.168.0.200"}
|
||||||
|
2021-10-04 16:26:43 [32mDATA: [39m HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"text/css","size":107884,"url":"/icons.css","remote":"::ffff:192.168.0.200"}
|
||||||
|
2021-10-04 16:26:43 [32mDATA: [39m HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"application/octet-stream","size":303,"url":"/manifest.webmanifest","remote":"::ffff:192.168.0.200"}
|
||||||
|
2021-10-04 16:26:43 [32mDATA: [39m HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"application/octet-stream","size":12155305,"url":"/dist/human.esm.js.map","remote":"::ffff:192.168.0.200"}
|
||||||
|
2021-10-04 16:26:50 [32mDATA: [39m HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"text/html","size":7842,"url":"/?backend=webgl","remote":"::ffff:192.168.0.200"}
|
||||||
|
2021-10-04 16:26:50 [32mDATA: [39m HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"text/css","size":107884,"url":"/icons.css","remote":"::ffff:192.168.0.200"}
|
||||||
|
2021-10-04 16:26:50 [32mDATA: [39m HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"text/javascript","size":47668,"url":"/index.js","remote":"::ffff:192.168.0.200"}
|
||||||
|
2021-10-04 16:26:50 [32mDATA: [39m HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"text/javascript","size":4635381,"url":"/dist/human.esm.js","remote":"::ffff:192.168.0.200"}
|
||||||
|
2021-10-04 16:26:50 [32mDATA: [39m HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"text/javascript","size":14222,"url":"/helpers/menu.js","remote":"::ffff:192.168.0.200"}
|
||||||
|
2021-10-04 16:26:50 [32mDATA: [39m HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"text/javascript","size":10894,"url":"/helpers/gl-bench.js","remote":"::ffff:192.168.0.200"}
|
||||||
|
2021-10-04 16:26:50 [32mDATA: [39m HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"text/javascript","size":3406,"url":"/helpers/webrtc.js","remote":"::ffff:192.168.0.200"}
|
||||||
|
2021-10-04 16:26:50 [32mDATA: [39m HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"text/javascript","size":5785,"url":"/helpers/jsonview.js","remote":"::ffff:192.168.0.200"}
|
||||||
|
2021-10-04 16:26:50 [32mDATA: [39m HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"font/woff2","size":181500,"url":"/assets/lato-light.woff2","remote":"::ffff:192.168.0.200"}
|
||||||
|
2021-10-04 16:26:51 [32mDATA: [39m HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"application/octet-stream","size":12155305,"url":"/dist/human.esm.js.map","remote":"::ffff:192.168.0.200"}
|
||||||
|
2021-10-04 16:26:51 [32mDATA: [39m HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"image/x-icon","size":261950,"url":"/favicon.ico","remote":"::ffff:192.168.0.200"}
|
||||||
|
2021-10-04 16:26:51 [32mDATA: [39m HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"text/javascript","size":4115,"url":"/index-pwa.js","remote":"::ffff:192.168.0.200"}
|
||||||
|
2021-10-04 16:26:56 [32mDATA: [39m HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"text/javascript","size":1816,"url":"/index-worker.js","remote":"::ffff:192.168.0.200"}
|
||||||
|
2021-10-04 16:26:56 [32mDATA: [39m HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"text/javascript","size":2395423,"url":"/dist/human.js","remote":"::ffff:192.168.0.200"}
|
||||||
|
2021-10-04 16:27:25 [32mDATA: [39m HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"text/html","size":7842,"url":"/?backend=webgl","remote":"::ffff:192.168.0.200"}
|
||||||
|
2021-10-04 16:27:25 [32mDATA: [39m HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"text/css","size":107884,"url":"/icons.css","remote":"::ffff:192.168.0.200"}
|
||||||
|
2021-10-04 16:27:25 [32mDATA: [39m HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"text/javascript","size":47668,"url":"/index.js","remote":"::ffff:192.168.0.200"}
|
||||||
|
2021-10-04 16:27:25 [32mDATA: [39m HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"text/javascript","size":4635381,"url":"/dist/human.esm.js","remote":"::ffff:192.168.0.200"}
|
||||||
|
2021-10-04 16:27:25 [32mDATA: [39m HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"text/javascript","size":14222,"url":"/helpers/menu.js","remote":"::ffff:192.168.0.200"}
|
||||||
|
2021-10-04 16:27:25 [32mDATA: [39m HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"text/javascript","size":10894,"url":"/helpers/gl-bench.js","remote":"::ffff:192.168.0.200"}
|
||||||
|
2021-10-04 16:27:25 [32mDATA: [39m HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"text/javascript","size":3406,"url":"/helpers/webrtc.js","remote":"::ffff:192.168.0.200"}
|
||||||
|
2021-10-04 16:27:25 [32mDATA: [39m HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"text/javascript","size":5785,"url":"/helpers/jsonview.js","remote":"::ffff:192.168.0.200"}
|
||||||
|
2021-10-04 16:27:25 [32mDATA: [39m HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"font/woff2","size":181500,"url":"/assets/lato-light.woff2","remote":"::ffff:192.168.0.200"}
|
||||||
|
2021-10-04 16:27:26 [32mDATA: [39m HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"application/octet-stream","size":12155305,"url":"/dist/human.esm.js.map","remote":"::ffff:192.168.0.200"}
|
||||||
|
2021-10-04 16:27:26 [32mDATA: [39m HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"image/x-icon","size":261950,"url":"/favicon.ico","remote":"::ffff:192.168.0.200"}
|
||||||
|
2021-10-04 16:27:27 [32mDATA: [39m HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"text/javascript","size":4115,"url":"/index-pwa.js","remote":"::ffff:192.168.0.200"}
|
||||||
|
2021-10-04 16:27:30 [32mDATA: [39m HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"text/javascript","size":1816,"url":"/index-worker.js","remote":"::ffff:192.168.0.200"}
|
||||||
|
2021-10-04 16:27:30 [32mDATA: [39m HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"text/javascript","size":2395423,"url":"/dist/human.js","remote":"::ffff:192.168.0.200"}
|
||||||
|
2021-10-04 16:28:42 [32mDATA: [39m HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"text/html","size":7842,"url":"/?backend=webgl","remote":"::ffff:192.168.0.200"}
|
||||||
|
2021-10-04 16:28:43 [32mDATA: [39m HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"text/css","size":107884,"url":"/icons.css","remote":"::ffff:192.168.0.200"}
|
||||||
|
2021-10-04 16:28:43 [32mDATA: [39m HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"text/javascript","size":47668,"url":"/index.js","remote":"::ffff:192.168.0.200"}
|
||||||
|
2021-10-04 16:28:43 [32mDATA: [39m HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"text/javascript","size":4635381,"url":"/dist/human.esm.js","remote":"::ffff:192.168.0.200"}
|
||||||
|
2021-10-04 16:28:43 [32mDATA: [39m HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"text/javascript","size":14222,"url":"/helpers/menu.js","remote":"::ffff:192.168.0.200"}
|
||||||
|
2021-10-04 16:28:43 [32mDATA: [39m HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"text/javascript","size":10894,"url":"/helpers/gl-bench.js","remote":"::ffff:192.168.0.200"}
|
||||||
|
2021-10-04 16:28:43 [32mDATA: [39m HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"text/javascript","size":3406,"url":"/helpers/webrtc.js","remote":"::ffff:192.168.0.200"}
|
||||||
|
2021-10-04 16:28:43 [32mDATA: [39m HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"text/javascript","size":5785,"url":"/helpers/jsonview.js","remote":"::ffff:192.168.0.200"}
|
||||||
|
2021-10-04 16:28:43 [32mDATA: [39m HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"font/woff2","size":181500,"url":"/assets/lato-light.woff2","remote":"::ffff:192.168.0.200"}
|
||||||
|
2021-10-04 16:28:43 [32mDATA: [39m HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"application/octet-stream","size":12155305,"url":"/dist/human.esm.js.map","remote":"::ffff:192.168.0.200"}
|
||||||
|
2021-10-04 16:28:43 [32mDATA: [39m HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"text/javascript","size":4115,"url":"/index-pwa.js","remote":"::ffff:192.168.0.200"}
|
||||||
|
|
File diff suppressed because one or more lines are too long
|
@ -8,16 +8,16 @@
|
||||||
</ul>
|
</ul>
|
||||||
</div><dl class="tsd-comment-tags"><dt>param userConfig:</dt><dd><p><a href="../interfaces/Config.html">Config</a></p>
|
</div><dl class="tsd-comment-tags"><dt>param userConfig:</dt><dd><p><a href="../interfaces/Config.html">Config</a></p>
|
||||||
</dd><dt>returns</dt><dd><p>instance</p>
|
</dd><dt>returns</dt><dd><p>instance</p>
|
||||||
</dd></dl></div></section><section class="tsd-panel tsd-hierarchy"><h3>Hierarchy</h3><ul class="tsd-hierarchy"><li><span class="target">Human</span></li></ul></section><section class="tsd-panel-group tsd-index-group"><h2>Index</h2><section class="tsd-panel tsd-index-panel"><div class="tsd-index-content"><section class="tsd-index-section "><h3>Constructors</h3><ul class="tsd-index-list"><li class="tsd-kind-constructor tsd-parent-kind-class"><a href="Human.html#constructor" class="tsd-kind-icon">constructor</a></li></ul></section><section class="tsd-index-section "><h3>Properties</h3><ul class="tsd-index-list"><li class="tsd-kind-property tsd-parent-kind-class"><a href="Human.html#config" class="tsd-kind-icon">config</a></li><li class="tsd-kind-property tsd-parent-kind-class"><a href="Human.html#distance" class="tsd-kind-icon">distance</a></li><li class="tsd-kind-property tsd-parent-kind-class"><a href="Human.html#draw" class="tsd-kind-icon">draw</a></li><li class="tsd-kind-property tsd-parent-kind-class"><a href="Human.html#env" class="tsd-kind-icon">env</a></li><li class="tsd-kind-property tsd-parent-kind-class"><a href="Human.html#events" class="tsd-kind-icon">events</a></li><li class="tsd-kind-property tsd-parent-kind-class"><a href="Human.html#faceTriangulation" class="tsd-kind-icon">face<wbr/>Triangulation</a></li><li class="tsd-kind-property tsd-parent-kind-class"><a href="Human.html#faceUVMap" class="tsd-kind-icon">faceUVMap</a></li><li class="tsd-kind-property tsd-parent-kind-class"><a href="Human.html#gl" class="tsd-kind-icon">gl</a></li><li class="tsd-kind-property tsd-parent-kind-class"><a href="Human.html#match" class="tsd-kind-icon">match</a></li><li class="tsd-kind-property tsd-parent-kind-class"><a href="Human.html#performance" class="tsd-kind-icon">performance</a></li><li class="tsd-kind-property tsd-parent-kind-class"><a href="Human.html#process" class="tsd-kind-icon">process</a></li><li class="tsd-kind-property tsd-parent-kind-class"><a href="Human.html#result" class="tsd-kind-icon">result</a></li><li class="tsd-kind-property tsd-parent-kind-class"><a href="Human.html#similarity" class="tsd-kind-icon">similarity</a></li><li class="tsd-kind-property tsd-parent-kind-class"><a href="Human.html#state" class="tsd-kind-icon">state</a></li><li class="tsd-kind-property tsd-parent-kind-class"><a href="Human.html#version" class="tsd-kind-icon">version</a></li></ul></section><section class="tsd-index-section "><h3>Methods</h3><ul class="tsd-index-list"><li class="tsd-kind-method tsd-parent-kind-class"><a href="Human.html#detect" class="tsd-kind-icon">detect</a></li><li class="tsd-kind-method tsd-parent-kind-class"><a href="Human.html#enhance" class="tsd-kind-icon">enhance</a></li><li class="tsd-kind-method tsd-parent-kind-class"><a href="Human.html#image" class="tsd-kind-icon">image</a></li><li class="tsd-kind-method tsd-parent-kind-class"><a href="Human.html#init" class="tsd-kind-icon">init</a></li><li class="tsd-kind-method tsd-parent-kind-class"><a href="Human.html#load" class="tsd-kind-icon">load</a></li><li class="tsd-kind-method tsd-parent-kind-class"><a href="Human.html#next" class="tsd-kind-icon">next</a></li><li class="tsd-kind-method tsd-parent-kind-class"><a href="Human.html#reset" class="tsd-kind-icon">reset</a></li><li class="tsd-kind-method tsd-parent-kind-class"><a href="Human.html#segmentation" class="tsd-kind-icon">segmentation</a></li><li class="tsd-kind-method tsd-parent-kind-class"><a href="Human.html#validate" class="tsd-kind-icon">validate</a></li><li class="tsd-kind-method tsd-parent-kind-class"><a href="Human.html#warmup" class="tsd-kind-icon">warmup</a></li></ul></section></div></section></section><section class="tsd-panel-group tsd-member-group "><h2>Constructors</h2><section class="tsd-panel tsd-member tsd-kind-constructor tsd-parent-kind-class"><a name="constructor" class="tsd-anchor"></a><h3>constructor</h3><ul class="tsd-signatures tsd-kind-constructor tsd-parent-kind-class"><li class="tsd-signature tsd-kind-icon">new <wbr/>Human<span class="tsd-signature-symbol">(</span>userConfig<span class="tsd-signature-symbol">?: </span><span class="tsd-signature-type">Partial</span><span class="tsd-signature-symbol"><</span><a href="../interfaces/Config.html" class="tsd-signature-type" data-tsd-kind="Interface">Config</a><span class="tsd-signature-symbol">></span><span class="tsd-signature-symbol">)</span><span class="tsd-signature-symbol">: </span><a href="Human.html" class="tsd-signature-type" data-tsd-kind="Class">Human</a></li></ul><ul class="tsd-descriptions"><li class="tsd-description"><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/vladmandic/human/blob/main/src/human.ts#L177">human.ts:177</a></li></ul></aside><div class="tsd-comment tsd-typography"><div class="lead">
|
</dd></dl></div></section><section class="tsd-panel tsd-hierarchy"><h3>Hierarchy</h3><ul class="tsd-hierarchy"><li><span class="target">Human</span></li></ul></section><section class="tsd-panel-group tsd-index-group"><h2>Index</h2><section class="tsd-panel tsd-index-panel"><div class="tsd-index-content"><section class="tsd-index-section "><h3>Constructors</h3><ul class="tsd-index-list"><li class="tsd-kind-constructor tsd-parent-kind-class"><a href="Human.html#constructor" class="tsd-kind-icon">constructor</a></li></ul></section><section class="tsd-index-section "><h3>Properties</h3><ul class="tsd-index-list"><li class="tsd-kind-property tsd-parent-kind-class"><a href="Human.html#config" class="tsd-kind-icon">config</a></li><li class="tsd-kind-property tsd-parent-kind-class"><a href="Human.html#distance" class="tsd-kind-icon">distance</a></li><li class="tsd-kind-property tsd-parent-kind-class"><a href="Human.html#draw" class="tsd-kind-icon">draw</a></li><li class="tsd-kind-property tsd-parent-kind-class"><a href="Human.html#env" class="tsd-kind-icon">env</a></li><li class="tsd-kind-property tsd-parent-kind-class"><a href="Human.html#events" class="tsd-kind-icon">events</a></li><li class="tsd-kind-property tsd-parent-kind-class"><a href="Human.html#faceTriangulation" class="tsd-kind-icon">face<wbr/>Triangulation</a></li><li class="tsd-kind-property tsd-parent-kind-class"><a href="Human.html#faceUVMap" class="tsd-kind-icon">faceUVMap</a></li><li class="tsd-kind-property tsd-parent-kind-class"><a href="Human.html#gl" class="tsd-kind-icon">gl</a></li><li class="tsd-kind-property tsd-parent-kind-class"><a href="Human.html#match" class="tsd-kind-icon">match</a></li><li class="tsd-kind-property tsd-parent-kind-class"><a href="Human.html#performance" class="tsd-kind-icon">performance</a></li><li class="tsd-kind-property tsd-parent-kind-class"><a href="Human.html#process" class="tsd-kind-icon">process</a></li><li class="tsd-kind-property tsd-parent-kind-class"><a href="Human.html#result" class="tsd-kind-icon">result</a></li><li class="tsd-kind-property tsd-parent-kind-class"><a href="Human.html#similarity" class="tsd-kind-icon">similarity</a></li><li class="tsd-kind-property tsd-parent-kind-class"><a href="Human.html#state" class="tsd-kind-icon">state</a></li><li class="tsd-kind-property tsd-parent-kind-class"><a href="Human.html#version" class="tsd-kind-icon">version</a></li></ul></section><section class="tsd-index-section "><h3>Methods</h3><ul class="tsd-index-list"><li class="tsd-kind-method tsd-parent-kind-class"><a href="Human.html#detect" class="tsd-kind-icon">detect</a></li><li class="tsd-kind-method tsd-parent-kind-class"><a href="Human.html#enhance" class="tsd-kind-icon">enhance</a></li><li class="tsd-kind-method tsd-parent-kind-class"><a href="Human.html#image" class="tsd-kind-icon">image</a></li><li class="tsd-kind-method tsd-parent-kind-class"><a href="Human.html#init" class="tsd-kind-icon">init</a></li><li class="tsd-kind-method tsd-parent-kind-class"><a href="Human.html#load" class="tsd-kind-icon">load</a></li><li class="tsd-kind-method tsd-parent-kind-class"><a href="Human.html#next" class="tsd-kind-icon">next</a></li><li class="tsd-kind-method tsd-parent-kind-class"><a href="Human.html#reset" class="tsd-kind-icon">reset</a></li><li class="tsd-kind-method tsd-parent-kind-class"><a href="Human.html#segmentation" class="tsd-kind-icon">segmentation</a></li><li class="tsd-kind-method tsd-parent-kind-class"><a href="Human.html#validate" class="tsd-kind-icon">validate</a></li><li class="tsd-kind-method tsd-parent-kind-class"><a href="Human.html#warmup" class="tsd-kind-icon">warmup</a></li></ul></section></div></section></section><section class="tsd-panel-group tsd-member-group "><h2>Constructors</h2><section class="tsd-panel tsd-member tsd-kind-constructor tsd-parent-kind-class"><a name="constructor" class="tsd-anchor"></a><h3>constructor</h3><ul class="tsd-signatures tsd-kind-constructor tsd-parent-kind-class"><li class="tsd-signature tsd-kind-icon">new <wbr/>Human<span class="tsd-signature-symbol">(</span>userConfig<span class="tsd-signature-symbol">?: </span><span class="tsd-signature-type">Partial</span><span class="tsd-signature-symbol"><</span><a href="../interfaces/Config.html" class="tsd-signature-type" data-tsd-kind="Interface">Config</a><span class="tsd-signature-symbol">></span><span class="tsd-signature-symbol">)</span><span class="tsd-signature-symbol">: </span><a href="Human.html" class="tsd-signature-type" data-tsd-kind="Class">Human</a></li></ul><ul class="tsd-descriptions"><li class="tsd-description"><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/vladmandic/human/blob/main/src/human.ts#L176">human.ts:176</a></li></ul></aside><div class="tsd-comment tsd-typography"><div class="lead">
|
||||||
<p>Constructor for <strong>Human</strong> library that is futher used for all operations</p>
|
<p>Constructor for <strong>Human</strong> library that is futher used for all operations</p>
|
||||||
</div></div><h4 class="tsd-parameters-title">Parameters</h4><ul class="tsd-parameters"><li><h5><span class="tsd-flag ts-flagOptional">Optional</span> userConfig: <span class="tsd-signature-type">Partial</span><span class="tsd-signature-symbol"><</span><a href="../interfaces/Config.html" class="tsd-signature-type" data-tsd-kind="Interface">Config</a><span class="tsd-signature-symbol">></span></h5></li></ul><h4 class="tsd-returns-title">Returns <a href="Human.html" class="tsd-signature-type" data-tsd-kind="Class">Human</a></h4><div><p>instance: <a href="Human.html">Human</a></p>
|
</div></div><h4 class="tsd-parameters-title">Parameters</h4><ul class="tsd-parameters"><li><h5><span class="tsd-flag ts-flagOptional">Optional</span> userConfig: <span class="tsd-signature-type">Partial</span><span class="tsd-signature-symbol"><</span><a href="../interfaces/Config.html" class="tsd-signature-type" data-tsd-kind="Interface">Config</a><span class="tsd-signature-symbol">></span></h5></li></ul><h4 class="tsd-returns-title">Returns <a href="Human.html" class="tsd-signature-type" data-tsd-kind="Class">Human</a></h4><div><p>instance: <a href="Human.html">Human</a></p>
|
||||||
</div></li></ul></section></section><section class="tsd-panel-group tsd-member-group "><h2>Properties</h2><section class="tsd-panel tsd-member tsd-kind-property tsd-parent-kind-class"><a name="config" class="tsd-anchor"></a><h3>config</h3><div class="tsd-signature tsd-kind-icon">config<span class="tsd-signature-symbol">:</span> <a href="../interfaces/Config.html" class="tsd-signature-type" data-tsd-kind="Interface">Config</a></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/vladmandic/human/blob/main/src/human.ts#L103">human.ts:103</a></li></ul></aside><div class="tsd-comment tsd-typography"><div class="lead">
|
</div></li></ul></section></section><section class="tsd-panel-group tsd-member-group "><h2>Properties</h2><section class="tsd-panel tsd-member tsd-kind-property tsd-parent-kind-class"><a name="config" class="tsd-anchor"></a><h3>config</h3><div class="tsd-signature tsd-kind-icon">config<span class="tsd-signature-symbol">:</span> <a href="../interfaces/Config.html" class="tsd-signature-type" data-tsd-kind="Interface">Config</a></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/vladmandic/human/blob/main/src/human.ts#L102">human.ts:102</a></li></ul></aside><div class="tsd-comment tsd-typography"><div class="lead">
|
||||||
<p>Current configuration</p>
|
<p>Current configuration</p>
|
||||||
<ul>
|
<ul>
|
||||||
<li>Definition: <a href="../interfaces/Config.html">Config</a></li>
|
<li>Definition: <a href="../interfaces/Config.html">Config</a></li>
|
||||||
<li>Defaults: <a href="https://github.com/vladmandic/human/blob/main/src/config.ts#L292">config</a></li>
|
<li>Defaults: <a href="https://github.com/vladmandic/human/blob/main/src/config.ts#L292">config</a></li>
|
||||||
</ul>
|
</ul>
|
||||||
</div></div></section><section class="tsd-panel tsd-member tsd-kind-property tsd-parent-kind-class"><a name="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-symbol">{ </span>order<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">number</span><span class="tsd-signature-symbol"> }</span><span class="tsd-signature-symbol">)</span><span class="tsd-signature-symbol"> => </span><span class="tsd-signature-type">number</span><span class="tsd-signature-symbol"> = ...</span></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/vladmandic/human/blob/main/src/human.ts#L261">human.ts:261</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-symbol">{ </span>order<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">number</span><span class="tsd-signature-symbol"> }</span><span class="tsd-signature-symbol">)</span><span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">number</span></li></ul><ul class="tsd-descriptions"><li class="tsd-description"><div class="tsd-comment tsd-typography"><div class="lead">
|
</div></div></section><section class="tsd-panel tsd-member tsd-kind-property tsd-parent-kind-class"><a name="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-symbol">{ </span>order<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">number</span><span class="tsd-signature-symbol"> }</span><span class="tsd-signature-symbol">)</span><span class="tsd-signature-symbol"> => </span><span class="tsd-signature-type">number</span><span class="tsd-signature-symbol"> = ...</span></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/vladmandic/human/blob/main/src/human.ts#L260">human.ts:260</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-symbol">{ </span>order<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">number</span><span class="tsd-signature-symbol"> }</span><span class="tsd-signature-symbol">)</span><span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">number</span></li></ul><ul class="tsd-descriptions"><li class="tsd-description"><div class="tsd-comment tsd-typography"><div class="lead">
|
||||||
<p>Calculates distance between two descriptors</p>
|
<p>Calculates distance between two descriptors</p>
|
||||||
<ul>
|
<ul>
|
||||||
<li>Minkowski distance algorithm of nth order if <code>order</code> is different than 2</li>
|
<li>Minkowski distance algorithm of nth order if <code>order</code> is different than 2</li>
|
||||||
|
@ -28,7 +28,7 @@
|
||||||
<li><code>order</code></li>
|
<li><code>order</code></li>
|
||||||
</ul>
|
</ul>
|
||||||
<p>Note: No checks are performed for performance reasons so make sure to pass valid number arrays of equal length</p>
|
<p>Note: No checks are performed for performance reasons so make sure to pass valid number arrays of equal length</p>
|
||||||
</div></div><h4 class="tsd-parameters-title">Parameters</h4><ul class="tsd-parameters"><li><h5>descriptor1: <a href="../index.html#Descriptor" class="tsd-signature-type" data-tsd-kind="Type alias">Descriptor</a></h5></li><li><h5>descriptor2: <a href="../index.html#Descriptor" class="tsd-signature-type" data-tsd-kind="Type alias">Descriptor</a></h5></li><li><h5>options: <span class="tsd-signature-symbol">{ </span>order<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">number</span><span class="tsd-signature-symbol"> }</span><span class="tsd-signature-symbol"> = ...</span></h5><ul class="tsd-parameters"><li class="tsd-parameter"><h5>order<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">number</span></h5></li></ul></li></ul><h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">number</span></h4></li></ul></li></ul></div></section><section class="tsd-panel tsd-member tsd-kind-property tsd-parent-kind-class"><a name="draw" class="tsd-anchor"></a><h3>draw</h3><div class="tsd-signature tsd-kind-icon">draw<span class="tsd-signature-symbol">:</span> <span class="tsd-signature-symbol">{ </span>all<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">any</span><span class="tsd-signature-symbol">; </span>body<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">any</span><span class="tsd-signature-symbol">; </span>canvas<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">any</span><span class="tsd-signature-symbol">; </span>face<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">any</span><span class="tsd-signature-symbol">; </span>gesture<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">any</span><span class="tsd-signature-symbol">; </span>hand<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">any</span><span class="tsd-signature-symbol">; </span>object<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">any</span><span class="tsd-signature-symbol">; </span>options<span class="tsd-signature-symbol">: </span><a href="../interfaces/DrawOptions.html" class="tsd-signature-type" data-tsd-kind="Interface">DrawOptions</a><span class="tsd-signature-symbol">; </span>person<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">any</span><span class="tsd-signature-symbol"> }</span></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/vladmandic/human/blob/main/src/human.ts#L139">human.ts:139</a></li></ul></aside><div class="tsd-comment tsd-typography"><div class="lead">
|
</div></div><h4 class="tsd-parameters-title">Parameters</h4><ul class="tsd-parameters"><li><h5>descriptor1: <a href="../index.html#Descriptor" class="tsd-signature-type" data-tsd-kind="Type alias">Descriptor</a></h5></li><li><h5>descriptor2: <a href="../index.html#Descriptor" class="tsd-signature-type" data-tsd-kind="Type alias">Descriptor</a></h5></li><li><h5>options: <span class="tsd-signature-symbol">{ </span>order<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">number</span><span class="tsd-signature-symbol"> }</span><span class="tsd-signature-symbol"> = ...</span></h5><ul class="tsd-parameters"><li class="tsd-parameter"><h5>order<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">number</span></h5></li></ul></li></ul><h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">number</span></h4></li></ul></li></ul></div></section><section class="tsd-panel tsd-member tsd-kind-property tsd-parent-kind-class"><a name="draw" class="tsd-anchor"></a><h3>draw</h3><div class="tsd-signature tsd-kind-icon">draw<span class="tsd-signature-symbol">:</span> <span class="tsd-signature-symbol">{ </span>all<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">any</span><span class="tsd-signature-symbol">; </span>body<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">any</span><span class="tsd-signature-symbol">; </span>canvas<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">any</span><span class="tsd-signature-symbol">; </span>face<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">any</span><span class="tsd-signature-symbol">; </span>gesture<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">any</span><span class="tsd-signature-symbol">; </span>hand<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">any</span><span class="tsd-signature-symbol">; </span>object<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">any</span><span class="tsd-signature-symbol">; </span>options<span class="tsd-signature-symbol">: </span><a href="../interfaces/DrawOptions.html" class="tsd-signature-type" data-tsd-kind="Interface">DrawOptions</a><span class="tsd-signature-symbol">; </span>person<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">any</span><span class="tsd-signature-symbol"> }</span></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/vladmandic/human/blob/main/src/human.ts#L138">human.ts:138</a></li></ul></aside><div class="tsd-comment tsd-typography"><div class="lead">
|
||||||
<p>Draw helper classes that can draw detected objects on canvas using specified draw</p>
|
<p>Draw helper classes that can draw detected objects on canvas using specified draw</p>
|
||||||
<ul>
|
<ul>
|
||||||
<li>options: <a href="../interfaces/DrawOptions.html">DrawOptions</a> global settings for all draw operations, can be overriden for each draw method</li>
|
<li>options: <a href="../interfaces/DrawOptions.html">DrawOptions</a> global settings for all draw operations, can be overriden for each draw method</li>
|
||||||
|
@ -38,9 +38,9 @@
|
||||||
<li>canvas: draw processed canvas which is a processed copy of the input</li>
|
<li>canvas: draw processed canvas which is a processed copy of the input</li>
|
||||||
<li>all: meta-function that performs: canvas, face, body, hand</li>
|
<li>all: meta-function that performs: canvas, face, body, hand</li>
|
||||||
</ul>
|
</ul>
|
||||||
</div></div><div class="tsd-type-declaration"><h4>Type declaration</h4><ul class="tsd-parameters"><li class="tsd-parameter"><h5>all<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">any</span></h5></li><li class="tsd-parameter"><h5>body<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">any</span></h5></li><li class="tsd-parameter"><h5>canvas<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">any</span></h5></li><li class="tsd-parameter"><h5>face<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">any</span></h5></li><li class="tsd-parameter"><h5>gesture<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">any</span></h5></li><li class="tsd-parameter"><h5>hand<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">any</span></h5></li><li class="tsd-parameter"><h5>object<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">any</span></h5></li><li class="tsd-parameter"><h5>options<span class="tsd-signature-symbol">: </span><a href="../interfaces/DrawOptions.html" class="tsd-signature-type" data-tsd-kind="Interface">DrawOptions</a></h5></li><li class="tsd-parameter"><h5>person<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">any</span></h5></li></ul></div></section><section class="tsd-panel tsd-member tsd-kind-property tsd-parent-kind-class"><a name="env" class="tsd-anchor"></a><h3>env</h3><div class="tsd-signature tsd-kind-icon">env<span class="tsd-signature-symbol">:</span> <a href="../index.html#Env" class="tsd-signature-type" data-tsd-kind="Type alias">Env</a></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/vladmandic/human/blob/main/src/human.ts#L129">human.ts:129</a></li></ul></aside><div class="tsd-comment tsd-typography"><div class="lead">
|
</div></div><div class="tsd-type-declaration"><h4>Type declaration</h4><ul class="tsd-parameters"><li class="tsd-parameter"><h5>all<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">any</span></h5></li><li class="tsd-parameter"><h5>body<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">any</span></h5></li><li class="tsd-parameter"><h5>canvas<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">any</span></h5></li><li class="tsd-parameter"><h5>face<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">any</span></h5></li><li class="tsd-parameter"><h5>gesture<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">any</span></h5></li><li class="tsd-parameter"><h5>hand<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">any</span></h5></li><li class="tsd-parameter"><h5>object<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">any</span></h5></li><li class="tsd-parameter"><h5>options<span class="tsd-signature-symbol">: </span><a href="../interfaces/DrawOptions.html" class="tsd-signature-type" data-tsd-kind="Interface">DrawOptions</a></h5></li><li class="tsd-parameter"><h5>person<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">any</span></h5></li></ul></div></section><section class="tsd-panel tsd-member tsd-kind-property tsd-parent-kind-class"><a name="env" class="tsd-anchor"></a><h3>env</h3><div class="tsd-signature tsd-kind-icon">env<span class="tsd-signature-symbol">:</span> <a href="../index.html#Env" class="tsd-signature-type" data-tsd-kind="Type alias">Env</a></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/vladmandic/human/blob/main/src/human.ts#L128">human.ts:128</a></li></ul></aside><div class="tsd-comment tsd-typography"><div class="lead">
|
||||||
<p>Object containing environment information used for diagnostics</p>
|
<p>Object containing environment information used for diagnostics</p>
|
||||||
</div></div></section><section class="tsd-panel tsd-member tsd-kind-property tsd-parent-kind-class"><a name="events" class="tsd-anchor"></a><h3>events</h3><div class="tsd-signature tsd-kind-icon">events<span class="tsd-signature-symbol">:</span> <span class="tsd-signature-type">undefined</span><span class="tsd-signature-symbol"> | </span><span class="tsd-signature-type">EventTarget</span></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/vladmandic/human/blob/main/src/human.ts#L157">human.ts:157</a></li></ul></aside><div class="tsd-comment tsd-typography"><div class="lead">
|
</div></div></section><section class="tsd-panel tsd-member tsd-kind-property tsd-parent-kind-class"><a name="events" class="tsd-anchor"></a><h3>events</h3><div class="tsd-signature tsd-kind-icon">events<span class="tsd-signature-symbol">:</span> <span class="tsd-signature-type">undefined</span><span class="tsd-signature-symbol"> | </span><span class="tsd-signature-type">EventTarget</span></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/vladmandic/human/blob/main/src/human.ts#L156">human.ts:156</a></li></ul></aside><div class="tsd-comment tsd-typography"><div class="lead">
|
||||||
<p>Container for events dispatched by Human</p>
|
<p>Container for events dispatched by Human</p>
|
||||||
</div><div><p>Possible events:</p>
|
</div><div><p>Possible events:</p>
|
||||||
<ul>
|
<ul>
|
||||||
|
@ -51,13 +51,13 @@
|
||||||
<li><code>warmup</code>: triggered when warmup is complete</li>
|
<li><code>warmup</code>: triggered when warmup is complete</li>
|
||||||
<li><code>error</code>: triggered on some errors</li>
|
<li><code>error</code>: triggered on some errors</li>
|
||||||
</ul>
|
</ul>
|
||||||
</div></div></section><section class="tsd-panel tsd-member tsd-kind-property tsd-parent-kind-class"><a name="faceTriangulation" class="tsd-anchor"></a><h3>face<wbr/>Triangulation</h3><div class="tsd-signature tsd-kind-icon">face<wbr/>Triangulation<span class="tsd-signature-symbol">:</span> <span class="tsd-signature-type">number</span><span class="tsd-signature-symbol">[]</span></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/vladmandic/human/blob/main/src/human.ts#L159">human.ts:159</a></li></ul></aside><div class="tsd-comment tsd-typography"><div class="lead">
|
</div></div></section><section class="tsd-panel tsd-member tsd-kind-property tsd-parent-kind-class"><a name="faceTriangulation" class="tsd-anchor"></a><h3>face<wbr/>Triangulation</h3><div class="tsd-signature tsd-kind-icon">face<wbr/>Triangulation<span class="tsd-signature-symbol">:</span> <span class="tsd-signature-type">number</span><span class="tsd-signature-symbol">[]</span></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/vladmandic/human/blob/main/src/human.ts#L158">human.ts:158</a></li></ul></aside><div class="tsd-comment tsd-typography"><div class="lead">
|
||||||
<p>Reference face triangualtion array of 468 points, used for triangle references between points</p>
|
<p>Reference face triangualtion array of 468 points, used for triangle references between points</p>
|
||||||
</div></div></section><section class="tsd-panel tsd-member tsd-kind-property tsd-parent-kind-class"><a name="faceUVMap" class="tsd-anchor"></a><h3>faceUVMap</h3><div class="tsd-signature tsd-kind-icon">faceUVMap<span class="tsd-signature-symbol">:</span> <span class="tsd-signature-type">number</span><span class="tsd-signature-symbol">[]</span><span class="tsd-signature-symbol">[]</span></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/vladmandic/human/blob/main/src/human.ts#L161">human.ts:161</a></li></ul></aside><div class="tsd-comment tsd-typography"><div class="lead">
|
</div></div></section><section class="tsd-panel tsd-member tsd-kind-property tsd-parent-kind-class"><a name="faceUVMap" class="tsd-anchor"></a><h3>faceUVMap</h3><div class="tsd-signature tsd-kind-icon">faceUVMap<span class="tsd-signature-symbol">:</span> <span class="tsd-signature-type">number</span><span class="tsd-signature-symbol">[]</span><span class="tsd-signature-symbol">[]</span></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/vladmandic/human/blob/main/src/human.ts#L160">human.ts:160</a></li></ul></aside><div class="tsd-comment tsd-typography"><div class="lead">
|
||||||
<p>Refernce UV map of 468 values, used for 3D mapping of the face mesh</p>
|
<p>Refernce UV map of 468 values, used for 3D mapping of the face mesh</p>
|
||||||
</div></div></section><section class="tsd-panel tsd-member tsd-kind-property tsd-parent-kind-class"><a name="gl" class="tsd-anchor"></a><h3>gl</h3><div class="tsd-signature tsd-kind-icon">gl<span class="tsd-signature-symbol">:</span> <span class="tsd-signature-type">Record</span><span class="tsd-signature-symbol"><</span><span class="tsd-signature-type">string</span><span class="tsd-signature-symbol">, </span><span class="tsd-signature-type">unknown</span><span class="tsd-signature-symbol">></span></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/vladmandic/human/blob/main/src/human.ts#L168">human.ts:168</a></li></ul></aside><div class="tsd-comment tsd-typography"><div class="lead">
|
</div></div></section><section class="tsd-panel tsd-member tsd-kind-property tsd-parent-kind-class"><a name="gl" class="tsd-anchor"></a><h3>gl</h3><div class="tsd-signature tsd-kind-icon">gl<span class="tsd-signature-symbol">:</span> <span class="tsd-signature-type">Record</span><span class="tsd-signature-symbol"><</span><span class="tsd-signature-type">string</span><span class="tsd-signature-symbol">, </span><span class="tsd-signature-type">unknown</span><span class="tsd-signature-symbol">></span></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/vladmandic/human/blob/main/src/human.ts#L167">human.ts:167</a></li></ul></aside><div class="tsd-comment tsd-typography"><div class="lead">
|
||||||
<p>WebGL debug info</p>
|
<p>WebGL debug info</p>
|
||||||
</div></div></section><section class="tsd-panel tsd-member tsd-kind-property tsd-parent-kind-class"><a name="match" class="tsd-anchor"></a><h3>match</h3><div class="tsd-signature tsd-kind-icon">match<span class="tsd-signature-symbol">:</span> <span class="tsd-signature-symbol">(</span>descriptor<span class="tsd-signature-symbol">: </span><a href="../index.html#Descriptor" class="tsd-signature-type" data-tsd-kind="Type alias">Descriptor</a>, descriptors<span class="tsd-signature-symbol">: </span><a href="../index.html#Descriptor" class="tsd-signature-type" data-tsd-kind="Type alias">Descriptor</a><span class="tsd-signature-symbol">[]</span>, options<span class="tsd-signature-symbol">?: </span><span class="tsd-signature-symbol">{ </span>order<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">number</span><span class="tsd-signature-symbol">; </span>threshold<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">number</span><span class="tsd-signature-symbol"> }</span><span class="tsd-signature-symbol">)</span><span class="tsd-signature-symbol"> => </span><span class="tsd-signature-symbol">{ </span>distance<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">number</span><span class="tsd-signature-symbol">; </span>index<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">number</span><span class="tsd-signature-symbol">; </span>similarity<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">number</span><span class="tsd-signature-symbol"> }</span><span class="tsd-signature-symbol"> = ...</span></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/vladmandic/human/blob/main/src/human.ts#L262">human.ts:262</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>descriptor<span class="tsd-signature-symbol">: </span><a href="../index.html#Descriptor" class="tsd-signature-type" data-tsd-kind="Type alias">Descriptor</a>, descriptors<span class="tsd-signature-symbol">: </span><a href="../index.html#Descriptor" class="tsd-signature-type" data-tsd-kind="Type alias">Descriptor</a><span class="tsd-signature-symbol">[]</span>, options<span class="tsd-signature-symbol">?: </span><span class="tsd-signature-symbol">{ </span>order<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">number</span><span class="tsd-signature-symbol">; </span>threshold<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">number</span><span class="tsd-signature-symbol"> }</span><span class="tsd-signature-symbol">)</span><span class="tsd-signature-symbol">: </span><span class="tsd-signature-symbol">{ </span>distance<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">number</span><span class="tsd-signature-symbol">; </span>index<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">number</span><span class="tsd-signature-symbol">; </span>similarity<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">number</span><span class="tsd-signature-symbol"> }</span></li></ul><ul class="tsd-descriptions"><li class="tsd-description"><div class="tsd-comment tsd-typography"><div class="lead">
|
</div></div></section><section class="tsd-panel tsd-member tsd-kind-property tsd-parent-kind-class"><a name="match" class="tsd-anchor"></a><h3>match</h3><div class="tsd-signature tsd-kind-icon">match<span class="tsd-signature-symbol">:</span> <span class="tsd-signature-symbol">(</span>descriptor<span class="tsd-signature-symbol">: </span><a href="../index.html#Descriptor" class="tsd-signature-type" data-tsd-kind="Type alias">Descriptor</a>, descriptors<span class="tsd-signature-symbol">: </span><a href="../index.html#Descriptor" class="tsd-signature-type" data-tsd-kind="Type alias">Descriptor</a><span class="tsd-signature-symbol">[]</span>, options<span class="tsd-signature-symbol">?: </span><span class="tsd-signature-symbol">{ </span>order<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">number</span><span class="tsd-signature-symbol">; </span>threshold<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">number</span><span class="tsd-signature-symbol"> }</span><span class="tsd-signature-symbol">)</span><span class="tsd-signature-symbol"> => </span><span class="tsd-signature-symbol">{ </span>distance<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">number</span><span class="tsd-signature-symbol">; </span>index<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">number</span><span class="tsd-signature-symbol">; </span>similarity<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">number</span><span class="tsd-signature-symbol"> }</span><span class="tsd-signature-symbol"> = ...</span></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/vladmandic/human/blob/main/src/human.ts#L261">human.ts:261</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>descriptor<span class="tsd-signature-symbol">: </span><a href="../index.html#Descriptor" class="tsd-signature-type" data-tsd-kind="Type alias">Descriptor</a>, descriptors<span class="tsd-signature-symbol">: </span><a href="../index.html#Descriptor" class="tsd-signature-type" data-tsd-kind="Type alias">Descriptor</a><span class="tsd-signature-symbol">[]</span>, options<span class="tsd-signature-symbol">?: </span><span class="tsd-signature-symbol">{ </span>order<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">number</span><span class="tsd-signature-symbol">; </span>threshold<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">number</span><span class="tsd-signature-symbol"> }</span><span class="tsd-signature-symbol">)</span><span class="tsd-signature-symbol">: </span><span class="tsd-signature-symbol">{ </span>distance<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">number</span><span class="tsd-signature-symbol">; </span>index<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">number</span><span class="tsd-signature-symbol">; </span>similarity<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">number</span><span class="tsd-signature-symbol"> }</span></li></ul><ul class="tsd-descriptions"><li class="tsd-description"><div class="tsd-comment tsd-typography"><div class="lead">
|
||||||
<p>Matches given descriptor to a closest entry in array of descriptors</p>
|
<p>Matches given descriptor to a closest entry in array of descriptors</p>
|
||||||
</div></div><h4 class="tsd-parameters-title">Parameters</h4><ul class="tsd-parameters"><li><h5>descriptor: <a href="../index.html#Descriptor" class="tsd-signature-type" data-tsd-kind="Type alias">Descriptor</a></h5><div class="tsd-comment tsd-typography"><div class="lead">
|
</div></div><h4 class="tsd-parameters-title">Parameters</h4><ul class="tsd-parameters"><li><h5>descriptor: <a href="../index.html#Descriptor" class="tsd-signature-type" data-tsd-kind="Type alias">Descriptor</a></h5><div class="tsd-comment tsd-typography"><div class="lead">
|
||||||
<p>face descriptor</p>
|
<p>face descriptor</p>
|
||||||
|
@ -74,27 +74,27 @@
|
||||||
<li><a href="Human.html#distance">distance</a> calculated <code>distance</code> of given descriptor to the best match</li>
|
<li><a href="Human.html#distance">distance</a> calculated <code>distance</code> of given descriptor to the best match</li>
|
||||||
<li><a href="Human.html#similarity">similarity</a> calculated normalized <code>similarity</code> of given descriptor to the best match</li>
|
<li><a href="Human.html#similarity">similarity</a> calculated normalized <code>similarity</code> of given descriptor to the best match</li>
|
||||||
</ul>
|
</ul>
|
||||||
</div><ul class="tsd-parameters"><li class="tsd-parameter"><h5>distance<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">number</span></h5></li><li class="tsd-parameter"><h5>index<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">number</span></h5></li><li class="tsd-parameter"><h5>similarity<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">number</span></h5></li></ul></li></ul></li></ul></div></section><section class="tsd-panel tsd-member tsd-kind-property tsd-parent-kind-class"><a name="performance" class="tsd-anchor"></a><h3>performance</h3><div class="tsd-signature tsd-kind-icon">performance<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><span class="tsd-signature-type">number</span><span class="tsd-signature-symbol">></span></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/vladmandic/human/blob/main/src/human.ts#L163">human.ts:163</a></li></ul></aside><div class="tsd-comment tsd-typography"><div class="lead">
|
</div><ul class="tsd-parameters"><li class="tsd-parameter"><h5>distance<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">number</span></h5></li><li class="tsd-parameter"><h5>index<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">number</span></h5></li><li class="tsd-parameter"><h5>similarity<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">number</span></h5></li></ul></li></ul></li></ul></div></section><section class="tsd-panel tsd-member tsd-kind-property tsd-parent-kind-class"><a name="performance" class="tsd-anchor"></a><h3>performance</h3><div class="tsd-signature tsd-kind-icon">performance<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><span class="tsd-signature-type">number</span><span class="tsd-signature-symbol">></span></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/vladmandic/human/blob/main/src/human.ts#L162">human.ts:162</a></li></ul></aside><div class="tsd-comment tsd-typography"><div class="lead">
|
||||||
<p>Performance object that contains values for all recently performed operations</p>
|
<p>Performance object that contains values for all recently performed operations</p>
|
||||||
</div></div></section><section class="tsd-panel tsd-member tsd-kind-property tsd-parent-kind-class"><a name="process" class="tsd-anchor"></a><h3>process</h3><div class="tsd-signature tsd-kind-icon">process<span class="tsd-signature-symbol">:</span> <span class="tsd-signature-symbol">{ </span>canvas<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">null</span><span class="tsd-signature-symbol"> | </span><span class="tsd-signature-type">OffscreenCanvas</span><span class="tsd-signature-symbol"> | </span><span class="tsd-signature-type">HTMLCanvasElement</span><span class="tsd-signature-symbol">; </span>tensor<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">null</span><span class="tsd-signature-symbol"> | </span><span class="tsd-signature-type">Tensor</span><span class="tsd-signature-symbol"><</span><span class="tsd-signature-type">Rank</span><span class="tsd-signature-symbol">></span><span class="tsd-signature-symbol"> }</span></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/vladmandic/human/blob/main/src/human.ts#L118">human.ts:118</a></li></ul></aside><div class="tsd-comment tsd-typography"><div class="lead">
|
</div></div></section><section class="tsd-panel tsd-member tsd-kind-property tsd-parent-kind-class"><a name="process" class="tsd-anchor"></a><h3>process</h3><div class="tsd-signature tsd-kind-icon">process<span class="tsd-signature-symbol">:</span> <span class="tsd-signature-symbol">{ </span>canvas<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">null</span><span class="tsd-signature-symbol"> | </span><span class="tsd-signature-type">OffscreenCanvas</span><span class="tsd-signature-symbol"> | </span><span class="tsd-signature-type">HTMLCanvasElement</span><span class="tsd-signature-symbol">; </span>tensor<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">null</span><span class="tsd-signature-symbol"> | </span><span class="tsd-signature-type">Tensor</span><span class="tsd-signature-symbol"><</span><span class="tsd-signature-type">Rank</span><span class="tsd-signature-symbol">></span><span class="tsd-signature-symbol"> }</span></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/vladmandic/human/blob/main/src/human.ts#L117">human.ts:117</a></li></ul></aside><div class="tsd-comment tsd-typography"><div class="lead">
|
||||||
<p>currenty processed image tensor and canvas</p>
|
<p>currenty processed image tensor and canvas</p>
|
||||||
</div></div><div class="tsd-type-declaration"><h4>Type declaration</h4><ul class="tsd-parameters"><li class="tsd-parameter"><h5>canvas<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">null</span><span class="tsd-signature-symbol"> | </span><span class="tsd-signature-type">OffscreenCanvas</span><span class="tsd-signature-symbol"> | </span><span class="tsd-signature-type">HTMLCanvasElement</span></h5></li><li class="tsd-parameter"><h5>tensor<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">null</span><span class="tsd-signature-symbol"> | </span><span class="tsd-signature-type">Tensor</span><span class="tsd-signature-symbol"><</span><span class="tsd-signature-type">Rank</span><span class="tsd-signature-symbol">></span></h5></li></ul></div></section><section class="tsd-panel tsd-member tsd-kind-property tsd-parent-kind-class"><a name="result" class="tsd-anchor"></a><h3>result</h3><div class="tsd-signature tsd-kind-icon">result<span class="tsd-signature-symbol">:</span> <a href="../interfaces/Result.html" class="tsd-signature-type" data-tsd-kind="Interface">Result</a></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/vladmandic/human/blob/main/src/human.ts#L109">human.ts:109</a></li></ul></aside><div class="tsd-comment tsd-typography"><div class="lead">
|
</div></div><div class="tsd-type-declaration"><h4>Type declaration</h4><ul class="tsd-parameters"><li class="tsd-parameter"><h5>canvas<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">null</span><span class="tsd-signature-symbol"> | </span><span class="tsd-signature-type">OffscreenCanvas</span><span class="tsd-signature-symbol"> | </span><span class="tsd-signature-type">HTMLCanvasElement</span></h5></li><li class="tsd-parameter"><h5>tensor<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">null</span><span class="tsd-signature-symbol"> | </span><span class="tsd-signature-type">Tensor</span><span class="tsd-signature-symbol"><</span><span class="tsd-signature-type">Rank</span><span class="tsd-signature-symbol">></span></h5></li></ul></div></section><section class="tsd-panel tsd-member tsd-kind-property tsd-parent-kind-class"><a name="result" class="tsd-anchor"></a><h3>result</h3><div class="tsd-signature tsd-kind-icon">result<span class="tsd-signature-symbol">:</span> <a href="../interfaces/Result.html" class="tsd-signature-type" data-tsd-kind="Interface">Result</a></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/vladmandic/human/blob/main/src/human.ts#L108">human.ts:108</a></li></ul></aside><div class="tsd-comment tsd-typography"><div class="lead">
|
||||||
<p>Last known result of detect run</p>
|
<p>Last known result of detect run</p>
|
||||||
<ul>
|
<ul>
|
||||||
<li>Can be accessed anytime after initial detection</li>
|
<li>Can be accessed anytime after initial detection</li>
|
||||||
<li>Definition: <a href="../interfaces/Result.html">Result</a></li>
|
<li>Definition: <a href="../interfaces/Result.html">Result</a></li>
|
||||||
</ul>
|
</ul>
|
||||||
</div></div></section><section class="tsd-panel tsd-member tsd-kind-property tsd-parent-kind-class"><a name="similarity" class="tsd-anchor"></a><h3>similarity</h3><div class="tsd-signature tsd-kind-icon">similarity<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-symbol">{ </span>order<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">number</span><span class="tsd-signature-symbol"> }</span><span class="tsd-signature-symbol">)</span><span class="tsd-signature-symbol"> => </span><span class="tsd-signature-type">number</span><span class="tsd-signature-symbol"> = ...</span></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/vladmandic/human/blob/main/src/human.ts#L260">human.ts:260</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-symbol">{ </span>order<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">number</span><span class="tsd-signature-symbol"> }</span><span class="tsd-signature-symbol">)</span><span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">number</span></li></ul><ul class="tsd-descriptions"><li class="tsd-description"><div class="tsd-comment tsd-typography"><div class="lead">
|
</div></div></section><section class="tsd-panel tsd-member tsd-kind-property tsd-parent-kind-class"><a name="similarity" class="tsd-anchor"></a><h3>similarity</h3><div class="tsd-signature tsd-kind-icon">similarity<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-symbol">{ </span>order<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">number</span><span class="tsd-signature-symbol"> }</span><span class="tsd-signature-symbol">)</span><span class="tsd-signature-symbol"> => </span><span class="tsd-signature-type">number</span><span class="tsd-signature-symbol"> = ...</span></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/vladmandic/human/blob/main/src/human.ts#L259">human.ts:259</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-symbol">{ </span>order<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">number</span><span class="tsd-signature-symbol"> }</span><span class="tsd-signature-symbol">)</span><span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">number</span></li></ul><ul class="tsd-descriptions"><li class="tsd-description"><div class="tsd-comment tsd-typography"><div class="lead">
|
||||||
<p>Calculates normalized similarity between two descriptors based on their <code>distance</code></p>
|
<p>Calculates normalized similarity between two descriptors based on their <code>distance</code></p>
|
||||||
</div></div><h4 class="tsd-parameters-title">Parameters</h4><ul class="tsd-parameters"><li><h5>descriptor1: <a href="../index.html#Descriptor" class="tsd-signature-type" data-tsd-kind="Type alias">Descriptor</a></h5></li><li><h5>descriptor2: <a href="../index.html#Descriptor" class="tsd-signature-type" data-tsd-kind="Type alias">Descriptor</a></h5></li><li><h5>options: <span class="tsd-signature-symbol">{ </span>order<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">number</span><span class="tsd-signature-symbol"> }</span><span class="tsd-signature-symbol"> = ...</span></h5><ul class="tsd-parameters"><li class="tsd-parameter"><h5>order<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">number</span></h5></li></ul></li></ul><h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">number</span></h4></li></ul></li></ul></div></section><section class="tsd-panel tsd-member tsd-kind-property tsd-parent-kind-class"><a name="state" class="tsd-anchor"></a><h3>state</h3><div class="tsd-signature tsd-kind-icon">state<span class="tsd-signature-symbol">:</span> <span class="tsd-signature-type">string</span></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/vladmandic/human/blob/main/src/human.ts#L115">human.ts:115</a></li></ul></aside><div class="tsd-comment tsd-typography"><div class="lead">
|
</div></div><h4 class="tsd-parameters-title">Parameters</h4><ul class="tsd-parameters"><li><h5>descriptor1: <a href="../index.html#Descriptor" class="tsd-signature-type" data-tsd-kind="Type alias">Descriptor</a></h5></li><li><h5>descriptor2: <a href="../index.html#Descriptor" class="tsd-signature-type" data-tsd-kind="Type alias">Descriptor</a></h5></li><li><h5>options: <span class="tsd-signature-symbol">{ </span>order<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">number</span><span class="tsd-signature-symbol"> }</span><span class="tsd-signature-symbol"> = ...</span></h5><ul class="tsd-parameters"><li class="tsd-parameter"><h5>order<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">number</span></h5></li></ul></li></ul><h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">number</span></h4></li></ul></li></ul></div></section><section class="tsd-panel tsd-member tsd-kind-property tsd-parent-kind-class"><a name="state" class="tsd-anchor"></a><h3>state</h3><div class="tsd-signature tsd-kind-icon">state<span class="tsd-signature-symbol">:</span> <span class="tsd-signature-type">string</span></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/vladmandic/human/blob/main/src/human.ts#L114">human.ts:114</a></li></ul></aside><div class="tsd-comment tsd-typography"><div class="lead">
|
||||||
<p>Current state of Human library</p>
|
<p>Current state of Human library</p>
|
||||||
<ul>
|
<ul>
|
||||||
<li>Can be polled to determine operations that are currently executed</li>
|
<li>Can be polled to determine operations that are currently executed</li>
|
||||||
<li>Progresses through: 'config', 'check', 'backend', 'load', 'run:<model>', 'idle'</li>
|
<li>Progresses through: 'config', 'check', 'backend', 'load', 'run:<model>', 'idle'</li>
|
||||||
</ul>
|
</ul>
|
||||||
</div></div></section><section class="tsd-panel tsd-member tsd-kind-property tsd-parent-kind-class"><a name="version" class="tsd-anchor"></a><h3>version</h3><div class="tsd-signature tsd-kind-icon">version<span class="tsd-signature-symbol">:</span> <span class="tsd-signature-type">string</span></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/vladmandic/human/blob/main/src/human.ts#L97">human.ts:97</a></li></ul></aside><div class="tsd-comment tsd-typography"><div class="lead">
|
</div></div></section><section class="tsd-panel tsd-member tsd-kind-property tsd-parent-kind-class"><a name="version" class="tsd-anchor"></a><h3>version</h3><div class="tsd-signature tsd-kind-icon">version<span class="tsd-signature-symbol">:</span> <span class="tsd-signature-type">string</span></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/vladmandic/human/blob/main/src/human.ts#L96">human.ts:96</a></li></ul></aside><div class="tsd-comment tsd-typography"><div class="lead">
|
||||||
<p>Current version of Human library in <em>semver</em> format</p>
|
<p>Current version of Human library in <em>semver</em> format</p>
|
||||||
</div></div></section></section><section class="tsd-panel-group tsd-member-group "><h2>Methods</h2><section class="tsd-panel tsd-member tsd-kind-method tsd-parent-kind-class"><a name="detect" class="tsd-anchor"></a><h3>detect</h3><ul class="tsd-signatures tsd-kind-method tsd-parent-kind-class"><li class="tsd-signature tsd-kind-icon">detect<span class="tsd-signature-symbol">(</span>input<span class="tsd-signature-symbol">: </span><a href="../index.html#Input" class="tsd-signature-type" data-tsd-kind="Type alias">Input</a>, userConfig<span class="tsd-signature-symbol">?: </span><span class="tsd-signature-type">Partial</span><span class="tsd-signature-symbol"><</span><a href="../interfaces/Config.html" class="tsd-signature-type" data-tsd-kind="Interface">Config</a><span class="tsd-signature-symbol">></span><span class="tsd-signature-symbol">)</span><span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">Promise</span><span class="tsd-signature-symbol"><</span><a href="../index.html#Error" class="tsd-signature-type" data-tsd-kind="Type alias">Error</a><span class="tsd-signature-symbol"> | </span><a href="../interfaces/Result.html" class="tsd-signature-type" data-tsd-kind="Interface">Result</a><span class="tsd-signature-symbol">></span></li></ul><ul class="tsd-descriptions"><li class="tsd-description"><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/vladmandic/human/blob/main/src/human.ts#L386">human.ts:386</a></li></ul></aside><div class="tsd-comment tsd-typography"><div class="lead">
|
</div></div></section></section><section class="tsd-panel-group tsd-member-group "><h2>Methods</h2><section class="tsd-panel tsd-member tsd-kind-method tsd-parent-kind-class"><a name="detect" class="tsd-anchor"></a><h3>detect</h3><ul class="tsd-signatures tsd-kind-method tsd-parent-kind-class"><li class="tsd-signature tsd-kind-icon">detect<span class="tsd-signature-symbol">(</span>input<span class="tsd-signature-symbol">: </span><a href="../index.html#Input" class="tsd-signature-type" data-tsd-kind="Type alias">Input</a>, userConfig<span class="tsd-signature-symbol">?: </span><span class="tsd-signature-type">Partial</span><span class="tsd-signature-symbol"><</span><a href="../interfaces/Config.html" class="tsd-signature-type" data-tsd-kind="Interface">Config</a><span class="tsd-signature-symbol">></span><span class="tsd-signature-symbol">)</span><span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">Promise</span><span class="tsd-signature-symbol"><</span><a href="../index.html#Error" class="tsd-signature-type" data-tsd-kind="Type alias">Error</a><span class="tsd-signature-symbol"> | </span><a href="../interfaces/Result.html" class="tsd-signature-type" data-tsd-kind="Interface">Result</a><span class="tsd-signature-symbol">></span></li></ul><ul class="tsd-descriptions"><li class="tsd-description"><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/vladmandic/human/blob/main/src/human.ts#L385">human.ts:385</a></li></ul></aside><div class="tsd-comment tsd-typography"><div class="lead">
|
||||||
<p>Main detection method</p>
|
<p>Main detection method</p>
|
||||||
<ul>
|
<ul>
|
||||||
<li>Analyze configuration: <a href="../interfaces/Config.html">Config</a></li>
|
<li>Analyze configuration: <a href="../interfaces/Config.html">Config</a></li>
|
||||||
|
@ -103,12 +103,12 @@
|
||||||
<li>Process and return result: <a href="../interfaces/Result.html">Result</a></li>
|
<li>Process and return result: <a href="../interfaces/Result.html">Result</a></li>
|
||||||
</ul>
|
</ul>
|
||||||
</div></div><h4 class="tsd-parameters-title">Parameters</h4><ul class="tsd-parameters"><li><h5>input: <a href="../index.html#Input" class="tsd-signature-type" data-tsd-kind="Type alias">Input</a></h5></li><li><h5><span class="tsd-flag ts-flagOptional">Optional</span> userConfig: <span class="tsd-signature-type">Partial</span><span class="tsd-signature-symbol"><</span><a href="../interfaces/Config.html" class="tsd-signature-type" data-tsd-kind="Interface">Config</a><span class="tsd-signature-symbol">></span></h5></li></ul><h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">Promise</span><span class="tsd-signature-symbol"><</span><a href="../index.html#Error" class="tsd-signature-type" data-tsd-kind="Type alias">Error</a><span class="tsd-signature-symbol"> | </span><a href="../interfaces/Result.html" class="tsd-signature-type" data-tsd-kind="Interface">Result</a><span class="tsd-signature-symbol">></span></h4><div><p>result: <a href="../interfaces/Result.html">Result</a></p>
|
</div></div><h4 class="tsd-parameters-title">Parameters</h4><ul class="tsd-parameters"><li><h5>input: <a href="../index.html#Input" class="tsd-signature-type" data-tsd-kind="Type alias">Input</a></h5></li><li><h5><span class="tsd-flag ts-flagOptional">Optional</span> userConfig: <span class="tsd-signature-type">Partial</span><span class="tsd-signature-symbol"><</span><a href="../interfaces/Config.html" class="tsd-signature-type" data-tsd-kind="Interface">Config</a><span class="tsd-signature-symbol">></span></h5></li></ul><h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">Promise</span><span class="tsd-signature-symbol"><</span><a href="../index.html#Error" class="tsd-signature-type" data-tsd-kind="Type alias">Error</a><span class="tsd-signature-symbol"> | </span><a href="../interfaces/Result.html" class="tsd-signature-type" data-tsd-kind="Interface">Result</a><span class="tsd-signature-symbol">></span></h4><div><p>result: <a href="../interfaces/Result.html">Result</a></p>
|
||||||
</div></li></ul></section><section class="tsd-panel tsd-member tsd-kind-method tsd-parent-kind-class"><a name="enhance" class="tsd-anchor"></a><h3>enhance</h3><ul class="tsd-signatures tsd-kind-method tsd-parent-kind-class"><li class="tsd-signature tsd-kind-icon">enhance<span class="tsd-signature-symbol">(</span>input<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">Tensor</span><span class="tsd-signature-symbol"><</span><span class="tsd-signature-type">Rank</span><span class="tsd-signature-symbol">></span><span class="tsd-signature-symbol">)</span><span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">null</span><span class="tsd-signature-symbol"> | </span><span class="tsd-signature-type">Tensor</span><span class="tsd-signature-symbol"><</span><span class="tsd-signature-type">Rank</span><span class="tsd-signature-symbol">></span></li></ul><ul class="tsd-descriptions"><li class="tsd-description"><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/vladmandic/human/blob/main/src/human.ts#L296">human.ts:296</a></li></ul></aside><div class="tsd-comment tsd-typography"><div class="lead">
|
</div></li></ul></section><section class="tsd-panel tsd-member tsd-kind-method tsd-parent-kind-class"><a name="enhance" class="tsd-anchor"></a><h3>enhance</h3><ul class="tsd-signatures tsd-kind-method tsd-parent-kind-class"><li class="tsd-signature tsd-kind-icon">enhance<span class="tsd-signature-symbol">(</span>input<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">Tensor</span><span class="tsd-signature-symbol"><</span><span class="tsd-signature-type">Rank</span><span class="tsd-signature-symbol">></span><span class="tsd-signature-symbol">)</span><span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">null</span><span class="tsd-signature-symbol"> | </span><span class="tsd-signature-type">Tensor</span><span class="tsd-signature-symbol"><</span><span class="tsd-signature-type">Rank</span><span class="tsd-signature-symbol">></span></li></ul><ul class="tsd-descriptions"><li class="tsd-description"><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/vladmandic/human/blob/main/src/human.ts#L295">human.ts:295</a></li></ul></aside><div class="tsd-comment tsd-typography"><div class="lead">
|
||||||
<p>Enhance method performs additional enhacements to face image previously detected for futher processing</p>
|
<p>Enhance method performs additional enhacements to face image previously detected for futher processing</p>
|
||||||
</div></div><h4 class="tsd-parameters-title">Parameters</h4><ul class="tsd-parameters"><li><h5>input: <span class="tsd-signature-type">Tensor</span><span class="tsd-signature-symbol"><</span><span class="tsd-signature-type">Rank</span><span class="tsd-signature-symbol">></span></h5></li></ul><h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">null</span><span class="tsd-signature-symbol"> | </span><span class="tsd-signature-type">Tensor</span><span class="tsd-signature-symbol"><</span><span class="tsd-signature-type">Rank</span><span class="tsd-signature-symbol">></span></h4><div><p>Tensor</p>
|
</div></div><h4 class="tsd-parameters-title">Parameters</h4><ul class="tsd-parameters"><li><h5>input: <span class="tsd-signature-type">Tensor</span><span class="tsd-signature-symbol"><</span><span class="tsd-signature-type">Rank</span><span class="tsd-signature-symbol">></span></h5></li></ul><h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">null</span><span class="tsd-signature-symbol"> | </span><span class="tsd-signature-type">Tensor</span><span class="tsd-signature-symbol"><</span><span class="tsd-signature-type">Rank</span><span class="tsd-signature-symbol">></span></h4><div><p>Tensor</p>
|
||||||
</div></li></ul></section><section class="tsd-panel tsd-member tsd-kind-method tsd-parent-kind-class"><a name="image" class="tsd-anchor"></a><h3>image</h3><ul class="tsd-signatures tsd-kind-method tsd-parent-kind-class"><li class="tsd-signature tsd-kind-icon">image<span class="tsd-signature-symbol">(</span>input<span class="tsd-signature-symbol">: </span><a href="../index.html#Input" class="tsd-signature-type" data-tsd-kind="Type alias">Input</a><span class="tsd-signature-symbol">)</span><span class="tsd-signature-symbol">: </span><span class="tsd-signature-symbol">{ </span>canvas<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">null</span><span class="tsd-signature-symbol"> | </span><span class="tsd-signature-type">OffscreenCanvas</span><span class="tsd-signature-symbol"> | </span><span class="tsd-signature-type">HTMLCanvasElement</span><span class="tsd-signature-symbol">; </span>tensor<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">null</span><span class="tsd-signature-symbol"> | </span><span class="tsd-signature-type">Tensor</span><span class="tsd-signature-symbol"><</span><span class="tsd-signature-type">Rank</span><span class="tsd-signature-symbol">></span><span class="tsd-signature-symbol"> }</span></li></ul><ul class="tsd-descriptions"><li class="tsd-description"><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/vladmandic/human/blob/main/src/human.ts#L269">human.ts:269</a></li></ul></aside><div class="tsd-comment tsd-typography"><div class="lead">
|
</div></li></ul></section><section class="tsd-panel tsd-member tsd-kind-method tsd-parent-kind-class"><a name="image" class="tsd-anchor"></a><h3>image</h3><ul class="tsd-signatures tsd-kind-method tsd-parent-kind-class"><li class="tsd-signature tsd-kind-icon">image<span class="tsd-signature-symbol">(</span>input<span class="tsd-signature-symbol">: </span><a href="../index.html#Input" class="tsd-signature-type" data-tsd-kind="Type alias">Input</a><span class="tsd-signature-symbol">)</span><span class="tsd-signature-symbol">: </span><span class="tsd-signature-symbol">{ </span>canvas<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">null</span><span class="tsd-signature-symbol"> | </span><span class="tsd-signature-type">OffscreenCanvas</span><span class="tsd-signature-symbol"> | </span><span class="tsd-signature-type">HTMLCanvasElement</span><span class="tsd-signature-symbol">; </span>tensor<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">null</span><span class="tsd-signature-symbol"> | </span><span class="tsd-signature-type">Tensor</span><span class="tsd-signature-symbol"><</span><span class="tsd-signature-type">Rank</span><span class="tsd-signature-symbol">></span><span class="tsd-signature-symbol"> }</span></li></ul><ul class="tsd-descriptions"><li class="tsd-description"><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/vladmandic/human/blob/main/src/human.ts#L268">human.ts:268</a></li></ul></aside><div class="tsd-comment tsd-typography"><div class="lead">
|
||||||
<p>Process input as return canvas and tensor</p>
|
<p>Process input as return canvas and tensor</p>
|
||||||
</div></div><h4 class="tsd-parameters-title">Parameters</h4><ul class="tsd-parameters"><li><h5>input: <a href="../index.html#Input" class="tsd-signature-type" data-tsd-kind="Type alias">Input</a></h5></li></ul><h4 class="tsd-returns-title">Returns <span class="tsd-signature-symbol">{ </span>canvas<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">null</span><span class="tsd-signature-symbol"> | </span><span class="tsd-signature-type">OffscreenCanvas</span><span class="tsd-signature-symbol"> | </span><span class="tsd-signature-type">HTMLCanvasElement</span><span class="tsd-signature-symbol">; </span>tensor<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">null</span><span class="tsd-signature-symbol"> | </span><span class="tsd-signature-type">Tensor</span><span class="tsd-signature-symbol"><</span><span class="tsd-signature-type">Rank</span><span class="tsd-signature-symbol">></span><span class="tsd-signature-symbol"> }</span></h4><div></div><ul class="tsd-parameters"><li class="tsd-parameter"><h5>canvas<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">null</span><span class="tsd-signature-symbol"> | </span><span class="tsd-signature-type">OffscreenCanvas</span><span class="tsd-signature-symbol"> | </span><span class="tsd-signature-type">HTMLCanvasElement</span></h5></li><li class="tsd-parameter"><h5>tensor<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">null</span><span class="tsd-signature-symbol"> | </span><span class="tsd-signature-type">Tensor</span><span class="tsd-signature-symbol"><</span><span class="tsd-signature-type">Rank</span><span class="tsd-signature-symbol">></span></h5></li></ul></li></ul></section><section class="tsd-panel tsd-member tsd-kind-method tsd-parent-kind-class"><a name="init" class="tsd-anchor"></a><h3>init</h3><ul class="tsd-signatures tsd-kind-method tsd-parent-kind-class"><li class="tsd-signature tsd-kind-icon">init<span class="tsd-signature-symbol">(</span><span class="tsd-signature-symbol">)</span><span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">Promise</span><span class="tsd-signature-symbol"><</span><span class="tsd-signature-type">void</span><span class="tsd-signature-symbol">></span></li></ul><ul class="tsd-descriptions"><li class="tsd-description"><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/vladmandic/human/blob/main/src/human.ts#L307">human.ts:307</a></li></ul></aside><div class="tsd-comment tsd-typography"><div class="lead">
|
</div></div><h4 class="tsd-parameters-title">Parameters</h4><ul class="tsd-parameters"><li><h5>input: <a href="../index.html#Input" class="tsd-signature-type" data-tsd-kind="Type alias">Input</a></h5></li></ul><h4 class="tsd-returns-title">Returns <span class="tsd-signature-symbol">{ </span>canvas<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">null</span><span class="tsd-signature-symbol"> | </span><span class="tsd-signature-type">OffscreenCanvas</span><span class="tsd-signature-symbol"> | </span><span class="tsd-signature-type">HTMLCanvasElement</span><span class="tsd-signature-symbol">; </span>tensor<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">null</span><span class="tsd-signature-symbol"> | </span><span class="tsd-signature-type">Tensor</span><span class="tsd-signature-symbol"><</span><span class="tsd-signature-type">Rank</span><span class="tsd-signature-symbol">></span><span class="tsd-signature-symbol"> }</span></h4><div></div><ul class="tsd-parameters"><li class="tsd-parameter"><h5>canvas<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">null</span><span class="tsd-signature-symbol"> | </span><span class="tsd-signature-type">OffscreenCanvas</span><span class="tsd-signature-symbol"> | </span><span class="tsd-signature-type">HTMLCanvasElement</span></h5></li><li class="tsd-parameter"><h5>tensor<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">null</span><span class="tsd-signature-symbol"> | </span><span class="tsd-signature-type">Tensor</span><span class="tsd-signature-symbol"><</span><span class="tsd-signature-type">Rank</span><span class="tsd-signature-symbol">></span></h5></li></ul></li></ul></section><section class="tsd-panel tsd-member tsd-kind-method tsd-parent-kind-class"><a name="init" class="tsd-anchor"></a><h3>init</h3><ul class="tsd-signatures tsd-kind-method tsd-parent-kind-class"><li class="tsd-signature tsd-kind-icon">init<span class="tsd-signature-symbol">(</span><span class="tsd-signature-symbol">)</span><span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">Promise</span><span class="tsd-signature-symbol"><</span><span class="tsd-signature-type">void</span><span class="tsd-signature-symbol">></span></li></ul><ul class="tsd-descriptions"><li class="tsd-description"><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/vladmandic/human/blob/main/src/human.ts#L306">human.ts:306</a></li></ul></aside><div class="tsd-comment tsd-typography"><div class="lead">
|
||||||
<p>Explicit backend initialization</p>
|
<p>Explicit backend initialization</p>
|
||||||
<ul>
|
<ul>
|
||||||
<li>Normally done implicitly during initial load phase</li>
|
<li>Normally done implicitly during initial load phase</li>
|
||||||
|
@ -116,19 +116,19 @@
|
||||||
<li>Use when changing backend during runtime</li>
|
<li>Use when changing backend during runtime</li>
|
||||||
</ul>
|
</ul>
|
||||||
</div></div><h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">Promise</span><span class="tsd-signature-symbol"><</span><span class="tsd-signature-type">void</span><span class="tsd-signature-symbol">></span></h4><div><p>Promise<void></p>
|
</div></div><h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">Promise</span><span class="tsd-signature-symbol"><</span><span class="tsd-signature-type">void</span><span class="tsd-signature-symbol">></span></h4><div><p>Promise<void></p>
|
||||||
</div></li></ul></section><section class="tsd-panel tsd-member tsd-kind-method tsd-parent-kind-class"><a name="load" class="tsd-anchor"></a><h3>load</h3><ul class="tsd-signatures tsd-kind-method tsd-parent-kind-class"><li class="tsd-signature tsd-kind-icon">load<span class="tsd-signature-symbol">(</span>userConfig<span class="tsd-signature-symbol">?: </span><span class="tsd-signature-type">Partial</span><span class="tsd-signature-symbol"><</span><a href="../interfaces/Config.html" class="tsd-signature-type" data-tsd-kind="Interface">Config</a><span class="tsd-signature-symbol">></span><span class="tsd-signature-symbol">)</span><span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">Promise</span><span class="tsd-signature-symbol"><</span><span class="tsd-signature-type">void</span><span class="tsd-signature-symbol">></span></li></ul><ul class="tsd-descriptions"><li class="tsd-description"><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/vladmandic/human/blob/main/src/human.ts#L319">human.ts:319</a></li></ul></aside><div class="tsd-comment tsd-typography"><div class="lead">
|
</div></li></ul></section><section class="tsd-panel tsd-member tsd-kind-method tsd-parent-kind-class"><a name="load" class="tsd-anchor"></a><h3>load</h3><ul class="tsd-signatures tsd-kind-method tsd-parent-kind-class"><li class="tsd-signature tsd-kind-icon">load<span class="tsd-signature-symbol">(</span>userConfig<span class="tsd-signature-symbol">?: </span><span class="tsd-signature-type">Partial</span><span class="tsd-signature-symbol"><</span><a href="../interfaces/Config.html" class="tsd-signature-type" data-tsd-kind="Interface">Config</a><span class="tsd-signature-symbol">></span><span class="tsd-signature-symbol">)</span><span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">Promise</span><span class="tsd-signature-symbol"><</span><span class="tsd-signature-type">void</span><span class="tsd-signature-symbol">></span></li></ul><ul class="tsd-descriptions"><li class="tsd-description"><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/vladmandic/human/blob/main/src/human.ts#L318">human.ts:318</a></li></ul></aside><div class="tsd-comment tsd-typography"><div class="lead">
|
||||||
<p>Load method preloads all configured models on-demand</p>
|
<p>Load method preloads all configured models on-demand</p>
|
||||||
<ul>
|
<ul>
|
||||||
<li>Not explicitly required as any required model is load implicitly on it's first run</li>
|
<li>Not explicitly required as any required model is load implicitly on it's first run</li>
|
||||||
</ul>
|
</ul>
|
||||||
</div></div><h4 class="tsd-parameters-title">Parameters</h4><ul class="tsd-parameters"><li><h5><span class="tsd-flag ts-flagOptional">Optional</span> userConfig: <span class="tsd-signature-type">Partial</span><span class="tsd-signature-symbol"><</span><a href="../interfaces/Config.html" class="tsd-signature-type" data-tsd-kind="Interface">Config</a><span class="tsd-signature-symbol">></span></h5></li></ul><h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">Promise</span><span class="tsd-signature-symbol"><</span><span class="tsd-signature-type">void</span><span class="tsd-signature-symbol">></span></h4><div><p>Promise<void></p>
|
</div></div><h4 class="tsd-parameters-title">Parameters</h4><ul class="tsd-parameters"><li><h5><span class="tsd-flag ts-flagOptional">Optional</span> userConfig: <span class="tsd-signature-type">Partial</span><span class="tsd-signature-symbol"><</span><a href="../interfaces/Config.html" class="tsd-signature-type" data-tsd-kind="Interface">Config</a><span class="tsd-signature-symbol">></span></h5></li></ul><h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">Promise</span><span class="tsd-signature-symbol"><</span><span class="tsd-signature-type">void</span><span class="tsd-signature-symbol">></span></h4><div><p>Promise<void></p>
|
||||||
</div></li></ul></section><section class="tsd-panel tsd-member tsd-kind-method tsd-parent-kind-class"><a name="next" class="tsd-anchor"></a><h3>next</h3><ul class="tsd-signatures tsd-kind-method tsd-parent-kind-class"><li class="tsd-signature tsd-kind-icon">next<span class="tsd-signature-symbol">(</span>result<span class="tsd-signature-symbol">?: </span><a href="../interfaces/Result.html" class="tsd-signature-type" data-tsd-kind="Interface">Result</a><span class="tsd-signature-symbol">)</span><span class="tsd-signature-symbol">: </span><a href="../interfaces/Result.html" class="tsd-signature-type" data-tsd-kind="Interface">Result</a></li></ul><ul class="tsd-descriptions"><li class="tsd-description"><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/vladmandic/human/blob/main/src/human.ts#L362">human.ts:362</a></li></ul></aside><div class="tsd-comment tsd-typography"><div class="lead">
|
</div></li></ul></section><section class="tsd-panel tsd-member tsd-kind-method tsd-parent-kind-class"><a name="next" class="tsd-anchor"></a><h3>next</h3><ul class="tsd-signatures tsd-kind-method tsd-parent-kind-class"><li class="tsd-signature tsd-kind-icon">next<span class="tsd-signature-symbol">(</span>result<span class="tsd-signature-symbol">?: </span><a href="../interfaces/Result.html" class="tsd-signature-type" data-tsd-kind="Interface">Result</a><span class="tsd-signature-symbol">)</span><span class="tsd-signature-symbol">: </span><a href="../interfaces/Result.html" class="tsd-signature-type" data-tsd-kind="Interface">Result</a></li></ul><ul class="tsd-descriptions"><li class="tsd-description"><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/vladmandic/human/blob/main/src/human.ts#L361">human.ts:361</a></li></ul></aside><div class="tsd-comment tsd-typography"><div class="lead">
|
||||||
<p>Runs interpolation using last known result and returns smoothened result
|
<p>Runs interpolation using last known result and returns smoothened result
|
||||||
Interpolation is based on time since last known result so can be called independently</p>
|
Interpolation is based on time since last known result so can be called independently</p>
|
||||||
</div></div><h4 class="tsd-parameters-title">Parameters</h4><ul class="tsd-parameters"><li><h5>result: <a href="../interfaces/Result.html" class="tsd-signature-type" data-tsd-kind="Interface">Result</a><span class="tsd-signature-symbol"> = ...</span></h5></li></ul><h4 class="tsd-returns-title">Returns <a href="../interfaces/Result.html" class="tsd-signature-type" data-tsd-kind="Interface">Result</a></h4><div><p>result: <a href="../interfaces/Result.html">Result</a></p>
|
</div></div><h4 class="tsd-parameters-title">Parameters</h4><ul class="tsd-parameters"><li><h5>result: <a href="../interfaces/Result.html" class="tsd-signature-type" data-tsd-kind="Interface">Result</a><span class="tsd-signature-symbol"> = ...</span></h5></li></ul><h4 class="tsd-returns-title">Returns <a href="../interfaces/Result.html" class="tsd-signature-type" data-tsd-kind="Interface">Result</a></h4><div><p>result: <a href="../interfaces/Result.html">Result</a></p>
|
||||||
</div></li></ul></section><section class="tsd-panel tsd-member tsd-kind-method tsd-parent-kind-class"><a name="reset" class="tsd-anchor"></a><h3>reset</h3><ul class="tsd-signatures tsd-kind-method tsd-parent-kind-class"><li class="tsd-signature tsd-kind-icon">reset<span class="tsd-signature-symbol">(</span><span class="tsd-signature-symbol">)</span><span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">void</span></li></ul><ul class="tsd-descriptions"><li class="tsd-description"><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/vladmandic/human/blob/main/src/human.ts#L248">human.ts:248</a></li></ul></aside><div class="tsd-comment tsd-typography"><div class="lead">
|
</div></li></ul></section><section class="tsd-panel tsd-member tsd-kind-method tsd-parent-kind-class"><a name="reset" class="tsd-anchor"></a><h3>reset</h3><ul class="tsd-signatures tsd-kind-method tsd-parent-kind-class"><li class="tsd-signature tsd-kind-icon">reset<span class="tsd-signature-symbol">(</span><span class="tsd-signature-symbol">)</span><span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">void</span></li></ul><ul class="tsd-descriptions"><li class="tsd-description"><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/vladmandic/human/blob/main/src/human.ts#L247">human.ts:247</a></li></ul></aside><div class="tsd-comment tsd-typography"><div class="lead">
|
||||||
<p>Reset configuration to default values</p>
|
<p>Reset configuration to default values</p>
|
||||||
</div></div><h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">void</span></h4></li></ul></section><section class="tsd-panel tsd-member tsd-kind-method tsd-parent-kind-class"><a name="segmentation" class="tsd-anchor"></a><h3>segmentation</h3><ul class="tsd-signatures tsd-kind-method tsd-parent-kind-class"><li class="tsd-signature tsd-kind-icon">segmentation<span class="tsd-signature-symbol">(</span>input<span class="tsd-signature-symbol">: </span><a href="../index.html#Input" class="tsd-signature-type" data-tsd-kind="Type alias">Input</a>, background<span class="tsd-signature-symbol">?: </span><a href="../index.html#Input" class="tsd-signature-type" data-tsd-kind="Type alias">Input</a><span class="tsd-signature-symbol">)</span><span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">Promise</span><span class="tsd-signature-symbol"><</span><span class="tsd-signature-symbol">{ </span>alpha<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">null</span><span class="tsd-signature-symbol"> | </span><span class="tsd-signature-type">OffscreenCanvas</span><span class="tsd-signature-symbol"> | </span><span class="tsd-signature-type">HTMLCanvasElement</span><span class="tsd-signature-symbol">; </span>canvas<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">null</span><span class="tsd-signature-symbol"> | </span><span class="tsd-signature-type">OffscreenCanvas</span><span class="tsd-signature-symbol"> | </span><span class="tsd-signature-type">HTMLCanvasElement</span><span class="tsd-signature-symbol">; </span>data<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">number</span><span class="tsd-signature-symbol">[]</span><span class="tsd-signature-symbol"> }</span><span class="tsd-signature-symbol">></span></li></ul><ul class="tsd-descriptions"><li class="tsd-description"><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/vladmandic/human/blob/main/src/human.ts#L286">human.ts:286</a></li></ul></aside><div class="tsd-comment tsd-typography"><div class="lead">
|
</div></div><h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">void</span></h4></li></ul></section><section class="tsd-panel tsd-member tsd-kind-method tsd-parent-kind-class"><a name="segmentation" class="tsd-anchor"></a><h3>segmentation</h3><ul class="tsd-signatures tsd-kind-method tsd-parent-kind-class"><li class="tsd-signature tsd-kind-icon">segmentation<span class="tsd-signature-symbol">(</span>input<span class="tsd-signature-symbol">: </span><a href="../index.html#Input" class="tsd-signature-type" data-tsd-kind="Type alias">Input</a>, background<span class="tsd-signature-symbol">?: </span><a href="../index.html#Input" class="tsd-signature-type" data-tsd-kind="Type alias">Input</a><span class="tsd-signature-symbol">)</span><span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">Promise</span><span class="tsd-signature-symbol"><</span><span class="tsd-signature-symbol">{ </span>alpha<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">null</span><span class="tsd-signature-symbol"> | </span><span class="tsd-signature-type">OffscreenCanvas</span><span class="tsd-signature-symbol"> | </span><span class="tsd-signature-type">HTMLCanvasElement</span><span class="tsd-signature-symbol">; </span>canvas<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">null</span><span class="tsd-signature-symbol"> | </span><span class="tsd-signature-type">OffscreenCanvas</span><span class="tsd-signature-symbol"> | </span><span class="tsd-signature-type">HTMLCanvasElement</span><span class="tsd-signature-symbol">; </span>data<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">number</span><span class="tsd-signature-symbol">[]</span><span class="tsd-signature-symbol"> }</span><span class="tsd-signature-symbol">></span></li></ul><ul class="tsd-descriptions"><li class="tsd-description"><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/vladmandic/human/blob/main/src/human.ts#L285">human.ts:285</a></li></ul></aside><div class="tsd-comment tsd-typography"><div class="lead">
|
||||||
<p>Segmentation method takes any input and returns processed canvas with body segmentation</p>
|
<p>Segmentation method takes any input and returns processed canvas with body segmentation</p>
|
||||||
<ul>
|
<ul>
|
||||||
<li>Optional parameter background is used to fill the background with specific input</li>
|
<li>Optional parameter background is used to fill the background with specific input</li>
|
||||||
|
@ -140,9 +140,9 @@ Interpolation is based on time since last known result so can be called independ
|
||||||
<li><code>canvas</code> as canvas which is input image filtered with segementation data and optionally merged with background image. canvas alpha values are set to segmentation values for easy merging</li>
|
<li><code>canvas</code> as canvas which is input image filtered with segementation data and optionally merged with background image. canvas alpha values are set to segmentation values for easy merging</li>
|
||||||
<li><code>alpha</code> as grayscale canvas that represents segmentation alpha values</li>
|
<li><code>alpha</code> as grayscale canvas that represents segmentation alpha values</li>
|
||||||
</ul>
|
</ul>
|
||||||
</div></div><h4 class="tsd-parameters-title">Parameters</h4><ul class="tsd-parameters"><li><h5>input: <a href="../index.html#Input" class="tsd-signature-type" data-tsd-kind="Type alias">Input</a></h5></li><li><h5><span class="tsd-flag ts-flagOptional">Optional</span> background: <a href="../index.html#Input" class="tsd-signature-type" data-tsd-kind="Type alias">Input</a></h5></li></ul><h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">Promise</span><span class="tsd-signature-symbol"><</span><span class="tsd-signature-symbol">{ </span>alpha<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">null</span><span class="tsd-signature-symbol"> | </span><span class="tsd-signature-type">OffscreenCanvas</span><span class="tsd-signature-symbol"> | </span><span class="tsd-signature-type">HTMLCanvasElement</span><span class="tsd-signature-symbol">; </span>canvas<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">null</span><span class="tsd-signature-symbol"> | </span><span class="tsd-signature-type">OffscreenCanvas</span><span class="tsd-signature-symbol"> | </span><span class="tsd-signature-type">HTMLCanvasElement</span><span class="tsd-signature-symbol">; </span>data<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">number</span><span class="tsd-signature-symbol">[]</span><span class="tsd-signature-symbol"> }</span><span class="tsd-signature-symbol">></span></h4><div></div></li></ul></section><section class="tsd-panel tsd-member tsd-kind-method tsd-parent-kind-class"><a name="validate" class="tsd-anchor"></a><h3>validate</h3><ul class="tsd-signatures tsd-kind-method tsd-parent-kind-class"><li class="tsd-signature tsd-kind-icon">validate<span class="tsd-signature-symbol">(</span>userConfig<span class="tsd-signature-symbol">?: </span><span class="tsd-signature-type">Partial</span><span class="tsd-signature-symbol"><</span><a href="../interfaces/Config.html" class="tsd-signature-type" data-tsd-kind="Interface">Config</a><span class="tsd-signature-symbol">></span><span class="tsd-signature-symbol">)</span><span class="tsd-signature-symbol">: </span><span class="tsd-signature-symbol">{ </span>expected<span class="tsd-signature-symbol">?: </span><span class="tsd-signature-type">string</span><span class="tsd-signature-symbol">; </span>reason<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">string</span><span class="tsd-signature-symbol">; </span>where<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">string</span><span class="tsd-signature-symbol"> }</span><span class="tsd-signature-symbol">[]</span></li></ul><ul class="tsd-descriptions"><li class="tsd-description"><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/vladmandic/human/blob/main/src/human.ts#L255">human.ts:255</a></li></ul></aside><div class="tsd-comment tsd-typography"><div class="lead">
|
</div></div><h4 class="tsd-parameters-title">Parameters</h4><ul class="tsd-parameters"><li><h5>input: <a href="../index.html#Input" class="tsd-signature-type" data-tsd-kind="Type alias">Input</a></h5></li><li><h5><span class="tsd-flag ts-flagOptional">Optional</span> background: <a href="../index.html#Input" class="tsd-signature-type" data-tsd-kind="Type alias">Input</a></h5></li></ul><h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">Promise</span><span class="tsd-signature-symbol"><</span><span class="tsd-signature-symbol">{ </span>alpha<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">null</span><span class="tsd-signature-symbol"> | </span><span class="tsd-signature-type">OffscreenCanvas</span><span class="tsd-signature-symbol"> | </span><span class="tsd-signature-type">HTMLCanvasElement</span><span class="tsd-signature-symbol">; </span>canvas<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">null</span><span class="tsd-signature-symbol"> | </span><span class="tsd-signature-type">OffscreenCanvas</span><span class="tsd-signature-symbol"> | </span><span class="tsd-signature-type">HTMLCanvasElement</span><span class="tsd-signature-symbol">; </span>data<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">number</span><span class="tsd-signature-symbol">[]</span><span class="tsd-signature-symbol"> }</span><span class="tsd-signature-symbol">></span></h4><div></div></li></ul></section><section class="tsd-panel tsd-member tsd-kind-method tsd-parent-kind-class"><a name="validate" class="tsd-anchor"></a><h3>validate</h3><ul class="tsd-signatures tsd-kind-method tsd-parent-kind-class"><li class="tsd-signature tsd-kind-icon">validate<span class="tsd-signature-symbol">(</span>userConfig<span class="tsd-signature-symbol">?: </span><span class="tsd-signature-type">Partial</span><span class="tsd-signature-symbol"><</span><a href="../interfaces/Config.html" class="tsd-signature-type" data-tsd-kind="Interface">Config</a><span class="tsd-signature-symbol">></span><span class="tsd-signature-symbol">)</span><span class="tsd-signature-symbol">: </span><span class="tsd-signature-symbol">{ </span>expected<span class="tsd-signature-symbol">?: </span><span class="tsd-signature-type">string</span><span class="tsd-signature-symbol">; </span>reason<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">string</span><span class="tsd-signature-symbol">; </span>where<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">string</span><span class="tsd-signature-symbol"> }</span><span class="tsd-signature-symbol">[]</span></li></ul><ul class="tsd-descriptions"><li class="tsd-description"><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/vladmandic/human/blob/main/src/human.ts#L254">human.ts:254</a></li></ul></aside><div class="tsd-comment tsd-typography"><div class="lead">
|
||||||
<p>Validate current configuration schema</p>
|
<p>Validate current configuration schema</p>
|
||||||
</div></div><h4 class="tsd-parameters-title">Parameters</h4><ul class="tsd-parameters"><li><h5><span class="tsd-flag ts-flagOptional">Optional</span> userConfig: <span class="tsd-signature-type">Partial</span><span class="tsd-signature-symbol"><</span><a href="../interfaces/Config.html" class="tsd-signature-type" data-tsd-kind="Interface">Config</a><span class="tsd-signature-symbol">></span></h5></li></ul><h4 class="tsd-returns-title">Returns <span class="tsd-signature-symbol">{ </span>expected<span class="tsd-signature-symbol">?: </span><span class="tsd-signature-type">string</span><span class="tsd-signature-symbol">; </span>reason<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">string</span><span class="tsd-signature-symbol">; </span>where<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">string</span><span class="tsd-signature-symbol"> }</span><span class="tsd-signature-symbol">[]</span></h4></li></ul></section><section class="tsd-panel tsd-member tsd-kind-method tsd-parent-kind-class"><a name="warmup" class="tsd-anchor"></a><h3>warmup</h3><ul class="tsd-signatures tsd-kind-method tsd-parent-kind-class"><li class="tsd-signature tsd-kind-icon">warmup<span class="tsd-signature-symbol">(</span>userConfig<span class="tsd-signature-symbol">?: </span><span class="tsd-signature-type">Partial</span><span class="tsd-signature-symbol"><</span><a href="../interfaces/Config.html" class="tsd-signature-type" data-tsd-kind="Interface">Config</a><span class="tsd-signature-symbol">></span><span class="tsd-signature-symbol">)</span><span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">Promise</span><span class="tsd-signature-symbol"><</span><a href="../interfaces/Result.html" class="tsd-signature-type" data-tsd-kind="Interface">Result</a><span class="tsd-signature-symbol"> | </span><span class="tsd-signature-symbol">{ </span>error<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">any</span><span class="tsd-signature-symbol"> }</span><span class="tsd-signature-symbol">></span></li></ul><ul class="tsd-descriptions"><li class="tsd-description"><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/vladmandic/human/blob/main/src/human.ts#L372">human.ts:372</a></li></ul></aside><div class="tsd-comment tsd-typography"><div class="lead">
|
</div></div><h4 class="tsd-parameters-title">Parameters</h4><ul class="tsd-parameters"><li><h5><span class="tsd-flag ts-flagOptional">Optional</span> userConfig: <span class="tsd-signature-type">Partial</span><span class="tsd-signature-symbol"><</span><a href="../interfaces/Config.html" class="tsd-signature-type" data-tsd-kind="Interface">Config</a><span class="tsd-signature-symbol">></span></h5></li></ul><h4 class="tsd-returns-title">Returns <span class="tsd-signature-symbol">{ </span>expected<span class="tsd-signature-symbol">?: </span><span class="tsd-signature-type">string</span><span class="tsd-signature-symbol">; </span>reason<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">string</span><span class="tsd-signature-symbol">; </span>where<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">string</span><span class="tsd-signature-symbol"> }</span><span class="tsd-signature-symbol">[]</span></h4></li></ul></section><section class="tsd-panel tsd-member tsd-kind-method tsd-parent-kind-class"><a name="warmup" class="tsd-anchor"></a><h3>warmup</h3><ul class="tsd-signatures tsd-kind-method tsd-parent-kind-class"><li class="tsd-signature tsd-kind-icon">warmup<span class="tsd-signature-symbol">(</span>userConfig<span class="tsd-signature-symbol">?: </span><span class="tsd-signature-type">Partial</span><span class="tsd-signature-symbol"><</span><a href="../interfaces/Config.html" class="tsd-signature-type" data-tsd-kind="Interface">Config</a><span class="tsd-signature-symbol">></span><span class="tsd-signature-symbol">)</span><span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">Promise</span><span class="tsd-signature-symbol"><</span><a href="../interfaces/Result.html" class="tsd-signature-type" data-tsd-kind="Interface">Result</a><span class="tsd-signature-symbol"> | </span><span class="tsd-signature-symbol">{ </span>error<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">any</span><span class="tsd-signature-symbol"> }</span><span class="tsd-signature-symbol">></span></li></ul><ul class="tsd-descriptions"><li class="tsd-description"><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/vladmandic/human/blob/main/src/human.ts#L371">human.ts:371</a></li></ul></aside><div class="tsd-comment tsd-typography"><div class="lead">
|
||||||
<p>Warmup method pre-initializes all configured models for faster inference</p>
|
<p>Warmup method pre-initializes all configured models for faster inference</p>
|
||||||
<ul>
|
<ul>
|
||||||
<li>can take significant time on startup</li>
|
<li>can take significant time on startup</li>
|
||||||
|
|
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
|
@ -1,22 +1,22 @@
|
||||||
<!DOCTYPE html><html class="default no-js"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>Result | @vladmandic/human - v2.3.0</title><meta name="description" content="Documentation for @vladmandic/human - v2.3.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><header><div class="tsd-page-toolbar"><div class="container"><div class="table-wrap"><div class="table-cell" id="tsd-search" data-base=".."><div class="field"><label for="tsd-search-field" class="tsd-widget search no-caption">Search</label><input type="text" id="tsd-search-field"/></div><ul class="results"><li class="state loading">Preparing search index...</li><li class="state failure">The search index is not available</li></ul><a href="../index.html" class="title">@vladmandic/human - v2.3.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.3.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 no-js"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>Result | @vladmandic/human - v2.3.0</title><meta name="description" content="Documentation for @vladmandic/human - v2.3.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><header><div class="tsd-page-toolbar"><div class="container"><div class="table-wrap"><div class="table-cell" id="tsd-search" data-base=".."><div class="field"><label for="tsd-search-field" class="tsd-widget search no-caption">Search</label><input type="text" id="tsd-search-field"/></div><ul class="results"><li class="state loading">Preparing search index...</li><li class="state failure">The search index is not available</li></ul><a href="../index.html" class="title">@vladmandic/human - v2.3.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.3.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">
|
||||||
<p>Result interface definition for <strong>Human</strong> library</p>
|
<p>Result interface definition for <strong>Human</strong> library</p>
|
||||||
</div><div><p>Contains all possible detection results</p>
|
</div><div><p>Contains all possible detection results</p>
|
||||||
</div></div></section><section class="tsd-panel tsd-hierarchy"><h3>Hierarchy</h3><ul class="tsd-hierarchy"><li><span class="target">Result</span></li></ul></section><section class="tsd-panel-group tsd-index-group"><h2>Index</h2><section class="tsd-panel tsd-index-panel"><div class="tsd-index-content"><section class="tsd-index-section "><h3>Properties</h3><ul class="tsd-index-list"><li class="tsd-kind-property tsd-parent-kind-interface"><a href="Result.html#body" class="tsd-kind-icon">body</a></li><li class="tsd-kind-property tsd-parent-kind-interface"><a href="Result.html#canvas" class="tsd-kind-icon">canvas</a></li><li class="tsd-kind-property tsd-parent-kind-interface"><a href="Result.html#face" class="tsd-kind-icon">face</a></li><li class="tsd-kind-property tsd-parent-kind-interface"><a href="Result.html#gesture" class="tsd-kind-icon">gesture</a></li><li class="tsd-kind-property tsd-parent-kind-interface"><a href="Result.html#hand" class="tsd-kind-icon">hand</a></li><li class="tsd-kind-property tsd-parent-kind-interface"><a href="Result.html#object" class="tsd-kind-icon">object</a></li><li class="tsd-kind-property tsd-parent-kind-interface"><a href="Result.html#performance" class="tsd-kind-icon">performance</a></li><li class="tsd-kind-property tsd-parent-kind-interface"><a href="Result.html#persons" class="tsd-kind-icon">persons</a></li><li class="tsd-kind-property tsd-parent-kind-interface"><a href="Result.html#timestamp" class="tsd-kind-icon">timestamp</a></li></ul></section></div></section></section><section class="tsd-panel-group tsd-member-group "><h2>Properties</h2><section class="tsd-panel tsd-member tsd-kind-property tsd-parent-kind-interface"><a name="body" class="tsd-anchor"></a><h3>body</h3><div class="tsd-signature tsd-kind-icon">body<span class="tsd-signature-symbol">:</span> <a href="BodyResult.html" class="tsd-signature-type" data-tsd-kind="Interface">BodyResult</a><span class="tsd-signature-symbol">[]</span></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/vladmandic/human/blob/main/src/result.ts#L185">result.ts:185</a></li></ul></aside><div class="tsd-comment tsd-typography"><div class="lead">
|
</div></div></section><section class="tsd-panel tsd-hierarchy"><h3>Hierarchy</h3><ul class="tsd-hierarchy"><li><span class="target">Result</span></li></ul></section><section class="tsd-panel-group tsd-index-group"><h2>Index</h2><section class="tsd-panel tsd-index-panel"><div class="tsd-index-content"><section class="tsd-index-section "><h3>Properties</h3><ul class="tsd-index-list"><li class="tsd-kind-property tsd-parent-kind-interface"><a href="Result.html#body" class="tsd-kind-icon">body</a></li><li class="tsd-kind-property tsd-parent-kind-interface"><a href="Result.html#canvas" class="tsd-kind-icon">canvas</a></li><li class="tsd-kind-property tsd-parent-kind-interface"><a href="Result.html#face" class="tsd-kind-icon">face</a></li><li class="tsd-kind-property tsd-parent-kind-interface"><a href="Result.html#gesture" class="tsd-kind-icon">gesture</a></li><li class="tsd-kind-property tsd-parent-kind-interface"><a href="Result.html#hand" class="tsd-kind-icon">hand</a></li><li class="tsd-kind-property tsd-parent-kind-interface"><a href="Result.html#object" class="tsd-kind-icon">object</a></li><li class="tsd-kind-property tsd-parent-kind-interface"><a href="Result.html#performance" class="tsd-kind-icon">performance</a></li><li class="tsd-kind-property tsd-parent-kind-interface"><a href="Result.html#persons" class="tsd-kind-icon">persons</a></li><li class="tsd-kind-property tsd-parent-kind-interface"><a href="Result.html#timestamp" class="tsd-kind-icon">timestamp</a></li></ul></section></div></section></section><section class="tsd-panel-group tsd-member-group "><h2>Properties</h2><section class="tsd-panel tsd-member tsd-kind-property tsd-parent-kind-interface"><a name="body" class="tsd-anchor"></a><h3>body</h3><div class="tsd-signature tsd-kind-icon">body<span class="tsd-signature-symbol">:</span> <a href="BodyResult.html" class="tsd-signature-type" data-tsd-kind="Interface">BodyResult</a><span class="tsd-signature-symbol">[]</span></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/vladmandic/human/blob/main/src/result.ts#L187">result.ts:187</a></li></ul></aside><div class="tsd-comment tsd-typography"><div class="lead">
|
||||||
<p><a href="BodyResult.html">BodyResult</a>: detection & analysis results</p>
|
<p><a href="BodyResult.html">BodyResult</a>: detection & analysis results</p>
|
||||||
</div></div></section><section class="tsd-panel tsd-member tsd-kind-property tsd-parent-kind-interface"><a name="canvas" class="tsd-anchor"></a><h3><span class="tsd-flag ts-flagOptional">Optional</span> canvas</h3><div class="tsd-signature tsd-kind-icon">canvas<span class="tsd-signature-symbol">?:</span> <span class="tsd-signature-type">null</span><span class="tsd-signature-symbol"> | </span><span class="tsd-signature-type">OffscreenCanvas</span><span class="tsd-signature-symbol"> | </span><span class="tsd-signature-type">HTMLCanvasElement</span></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/vladmandic/human/blob/main/src/result.ts#L195">result.ts:195</a></li></ul></aside><div class="tsd-comment tsd-typography"><div class="lead">
|
</div></div></section><section class="tsd-panel tsd-member tsd-kind-property tsd-parent-kind-interface"><a name="canvas" class="tsd-anchor"></a><h3><span class="tsd-flag ts-flagOptional">Optional</span> canvas</h3><div class="tsd-signature tsd-kind-icon">canvas<span class="tsd-signature-symbol">?:</span> <span class="tsd-signature-type">null</span><span class="tsd-signature-symbol"> | </span><span class="tsd-signature-type">OffscreenCanvas</span><span class="tsd-signature-symbol"> | </span><span class="tsd-signature-type">HTMLCanvasElement</span></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/vladmandic/human/blob/main/src/result.ts#L197">result.ts:197</a></li></ul></aside><div class="tsd-comment tsd-typography"><div class="lead">
|
||||||
<p>optional processed canvas that can be used to draw input on screen</p>
|
<p>optional processed canvas that can be used to draw input on screen</p>
|
||||||
</div></div></section><section class="tsd-panel tsd-member tsd-kind-property tsd-parent-kind-interface"><a name="face" class="tsd-anchor"></a><h3>face</h3><div class="tsd-signature tsd-kind-icon">face<span class="tsd-signature-symbol">:</span> <a href="FaceResult.html" class="tsd-signature-type" data-tsd-kind="Interface">FaceResult</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#L183">result.ts:183</a></li></ul></aside><div class="tsd-comment tsd-typography"><div class="lead">
|
</div></div></section><section class="tsd-panel tsd-member tsd-kind-property tsd-parent-kind-interface"><a name="face" class="tsd-anchor"></a><h3>face</h3><div class="tsd-signature tsd-kind-icon">face<span class="tsd-signature-symbol">:</span> <a href="FaceResult.html" class="tsd-signature-type" data-tsd-kind="Interface">FaceResult</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#L185">result.ts:185</a></li></ul></aside><div class="tsd-comment tsd-typography"><div class="lead">
|
||||||
<p><a href="FaceResult.html">FaceResult</a>: detection & analysis results</p>
|
<p><a href="FaceResult.html">FaceResult</a>: detection & analysis results</p>
|
||||||
</div></div></section><section class="tsd-panel tsd-member tsd-kind-property tsd-parent-kind-interface"><a name="gesture" class="tsd-anchor"></a><h3>gesture</h3><div class="tsd-signature tsd-kind-icon">gesture<span class="tsd-signature-symbol">:</span> <a href="../index.html#GestureResult" class="tsd-signature-type" data-tsd-kind="Type alias">GestureResult</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#L189">result.ts:189</a></li></ul></aside><div class="tsd-comment tsd-typography"><div class="lead">
|
</div></div></section><section class="tsd-panel tsd-member tsd-kind-property tsd-parent-kind-interface"><a name="gesture" class="tsd-anchor"></a><h3>gesture</h3><div class="tsd-signature tsd-kind-icon">gesture<span class="tsd-signature-symbol">:</span> <a href="../index.html#GestureResult" class="tsd-signature-type" data-tsd-kind="Type alias">GestureResult</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#L191">result.ts:191</a></li></ul></aside><div class="tsd-comment tsd-typography"><div class="lead">
|
||||||
<p><a href="../index.html#GestureResult">GestureResult</a>: detection & analysis results</p>
|
<p><a href="../index.html#GestureResult">GestureResult</a>: detection & analysis results</p>
|
||||||
</div></div></section><section class="tsd-panel tsd-member tsd-kind-property tsd-parent-kind-interface"><a name="hand" class="tsd-anchor"></a><h3>hand</h3><div class="tsd-signature tsd-kind-icon">hand<span class="tsd-signature-symbol">:</span> <a href="HandResult.html" class="tsd-signature-type" data-tsd-kind="Interface">HandResult</a><span class="tsd-signature-symbol">[]</span></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/vladmandic/human/blob/main/src/result.ts#L187">result.ts:187</a></li></ul></aside><div class="tsd-comment tsd-typography"><div class="lead">
|
</div></div></section><section class="tsd-panel tsd-member tsd-kind-property tsd-parent-kind-interface"><a name="hand" class="tsd-anchor"></a><h3>hand</h3><div class="tsd-signature tsd-kind-icon">hand<span class="tsd-signature-symbol">:</span> <a href="HandResult.html" class="tsd-signature-type" data-tsd-kind="Interface">HandResult</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#L189">result.ts:189</a></li></ul></aside><div class="tsd-comment tsd-typography"><div class="lead">
|
||||||
<p><a href="HandResult.html">HandResult</a>: detection & analysis results</p>
|
<p><a href="HandResult.html">HandResult</a>: detection & analysis results</p>
|
||||||
</div></div></section><section class="tsd-panel tsd-member tsd-kind-property tsd-parent-kind-interface"><a name="object" class="tsd-anchor"></a><h3>object</h3><div class="tsd-signature tsd-kind-icon">object<span class="tsd-signature-symbol">:</span> <a href="ObjectResult.html" class="tsd-signature-type" data-tsd-kind="Interface">ObjectResult</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#L191">result.ts:191</a></li></ul></aside><div class="tsd-comment tsd-typography"><div class="lead">
|
</div></div></section><section class="tsd-panel tsd-member tsd-kind-property tsd-parent-kind-interface"><a name="object" class="tsd-anchor"></a><h3>object</h3><div class="tsd-signature tsd-kind-icon">object<span class="tsd-signature-symbol">:</span> <a href="ObjectResult.html" class="tsd-signature-type" data-tsd-kind="Interface">ObjectResult</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#L193">result.ts:193</a></li></ul></aside><div class="tsd-comment tsd-typography"><div class="lead">
|
||||||
<p><a href="ObjectResult.html">ObjectResult</a>: detection & analysis results</p>
|
<p><a href="ObjectResult.html">ObjectResult</a>: detection & analysis results</p>
|
||||||
</div></div></section><section class="tsd-panel tsd-member tsd-kind-property tsd-parent-kind-interface"><a name="performance" class="tsd-anchor"></a><h3>performance</h3><div class="tsd-signature tsd-kind-icon">performance<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><span class="tsd-signature-type">unknown</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#L193">result.ts:193</a></li></ul></aside><div class="tsd-comment tsd-typography"><div class="lead">
|
</div></div></section><section class="tsd-panel tsd-member tsd-kind-property tsd-parent-kind-interface"><a name="performance" class="tsd-anchor"></a><h3>performance</h3><div class="tsd-signature tsd-kind-icon">performance<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><span class="tsd-signature-type">unknown</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#L195">result.ts:195</a></li></ul></aside><div class="tsd-comment tsd-typography"><div class="lead">
|
||||||
<p>global performance object with timing values for each operation</p>
|
<p>global performance object with timing values for each operation</p>
|
||||||
</div></div></section><section class="tsd-panel tsd-member tsd-kind-property tsd-parent-kind-interface"><a name="persons" class="tsd-anchor"></a><h3>persons</h3><div class="tsd-signature tsd-kind-icon">persons<span class="tsd-signature-symbol">:</span> <a href="PersonResult.html" class="tsd-signature-type" data-tsd-kind="Interface">PersonResult</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#L199">result.ts:199</a></li></ul></aside><div class="tsd-comment tsd-typography"><div class="lead">
|
</div></div></section><section class="tsd-panel tsd-member tsd-kind-property tsd-parent-kind-interface"><a name="persons" class="tsd-anchor"></a><h3>persons</h3><div class="tsd-signature tsd-kind-icon">persons<span class="tsd-signature-symbol">:</span> <a href="PersonResult.html" class="tsd-signature-type" data-tsd-kind="Interface">PersonResult</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#L201">result.ts:201</a></li></ul></aside><div class="tsd-comment tsd-typography"><div class="lead">
|
||||||
<p>getter property that returns unified persons object</p>
|
<p>getter property that returns unified persons object</p>
|
||||||
</div></div></section><section class="tsd-panel tsd-member tsd-kind-property tsd-parent-kind-interface"><a name="timestamp" class="tsd-anchor"></a><h3><span class="tsd-flag ts-flagReadonly">Readonly</span> timestamp</h3><div class="tsd-signature tsd-kind-icon">timestamp<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/result.ts#L197">result.ts:197</a></li></ul></aside><div class="tsd-comment tsd-typography"><div class="lead">
|
</div></div></section><section class="tsd-panel tsd-member tsd-kind-property tsd-parent-kind-interface"><a name="timestamp" class="tsd-anchor"></a><h3><span class="tsd-flag ts-flagReadonly">Readonly</span> timestamp</h3><div class="tsd-signature tsd-kind-icon">timestamp<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/result.ts#L199">result.ts:199</a></li></ul></aside><div class="tsd-comment tsd-typography"><div class="lead">
|
||||||
<p>timestamp of detection representing the milliseconds elapsed since the UNIX epoch</p>
|
<p>timestamp of detection representing the milliseconds elapsed since the UNIX epoch</p>
|
||||||
</div></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></ul></nav><nav class="tsd-navigation secondary menu-sticky"><ul><li class="current tsd-kind-interface"><a href="Result.html" class="tsd-kind-icon">Result</a><ul><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></li></ul></nav></div></div></div><footer class=""><div class="container"><h2>Legend</h2><div class="tsd-legend-group"><ul class="tsd-legend"><li class="tsd-kind-constructor tsd-parent-kind-class"><span class="tsd-kind-icon">Constructor</span></li><li class="tsd-kind-property tsd-parent-kind-class"><span class="tsd-kind-icon">Property</span></li><li class="tsd-kind-method tsd-parent-kind-class"><span class="tsd-kind-icon">Method</span></li></ul><ul class="tsd-legend"><li class="tsd-kind-property tsd-parent-kind-interface"><span class="tsd-kind-icon">Property</span></li></ul></div><h2>Settings</h2><p>Theme <select id="theme"><option value="os">OS</option><option value="light">Light</option><option value="dark">Dark</option></select></p></div></footer><div class="overlay"></div><script src="../assets/main.js"></script></body></html>
|
</div></div></section></section></div><div class="col-4 col-menu menu-sticky-wrap menu-highlight"><nav class="tsd-navigation primary"><ul><li class=""><a href="../index.html">Exports</a></li></ul></nav><nav class="tsd-navigation secondary menu-sticky"><ul><li class="current tsd-kind-interface"><a href="Result.html" class="tsd-kind-icon">Result</a><ul><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></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,7 +0,0 @@
|
||||||
/**
|
|
||||||
* BlazePose model implemenation constants
|
|
||||||
* See `blazepose.ts` for entry point
|
|
||||||
*/
|
|
||||||
export declare const full: string[];
|
|
||||||
export declare const upper: string[];
|
|
||||||
//# sourceMappingURL=annotations.d.ts.map
|
|
|
@ -1 +0,0 @@
|
||||||
{"version":3,"file":"annotations.d.ts","sourceRoot":"","sources":["../../../src/body/annotations.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,eAAO,MAAM,IAAI,UAwChB,CAAC;AAEF,eAAO,MAAM,KAAK,UAgCjB,CAAC"}
|
|
|
@ -1,7 +1,5 @@
|
||||||
/**
|
/**
|
||||||
* BlazePose model implementation
|
* BlazePose model implementation
|
||||||
*
|
|
||||||
* Based on : [**BlazePose**](https://github.com/google/mediapipe/blob/master/mediapipe/modules/pose_detection)
|
|
||||||
*/
|
*/
|
||||||
import type { BodyResult } from '../result';
|
import type { BodyResult } from '../result';
|
||||||
import type { GraphModel, Tensor } from '../tfjs/types';
|
import type { GraphModel, Tensor } from '../tfjs/types';
|
||||||
|
|
|
@ -1 +1 @@
|
||||||
{"version":3,"file":"blazepose.d.ts","sourceRoot":"","sources":["../../../src/body/blazepose.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,OAAO,KAAK,EAAE,UAAU,EAAc,MAAM,WAAW,CAAC;AACxD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AACxD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC;AAoCxC,wBAAsB,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC,CAWpE;AAED,wBAAsB,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC,CAWlE;AAED,wBAAsB,IAAI,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,UAAU,GAAG,IAAI,EAAE,UAAU,GAAG,IAAI,CAAC,CAAC,CAI1F;AA8DD,wBAAsB,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC,CAsBlF"}
|
{"version":3,"file":"blazepose.d.ts","sourceRoot":"","sources":["../../../src/body/blazepose.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH,OAAO,KAAK,EAAgB,UAAU,EAAc,MAAM,WAAW,CAAC;AACtE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AACxD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC;AAWxC,wBAAsB,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC,CAWpE;AAED,wBAAsB,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC,CAalE;AAED,wBAAsB,IAAI,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,UAAU,GAAG,IAAI,EAAE,UAAU,GAAG,IAAI,CAAC,CAAC,CAI1F;AA4FD,wBAAsB,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC,CAUlF"}
|
|
@ -0,0 +1,12 @@
|
||||||
|
export declare const kpt: string[];
|
||||||
|
export declare const connected: {
|
||||||
|
leftLeg: string[];
|
||||||
|
rightLeg: string[];
|
||||||
|
torso: string[];
|
||||||
|
leftArm: string[];
|
||||||
|
rightArm: string[];
|
||||||
|
leftHand: never[];
|
||||||
|
rightHand: never[];
|
||||||
|
head: never[];
|
||||||
|
};
|
||||||
|
//# sourceMappingURL=blazeposecoords.d.ts.map
|
|
@ -0,0 +1 @@
|
||||||
|
{"version":3,"file":"blazeposecoords.d.ts","sourceRoot":"","sources":["../../../src/body/blazeposecoords.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,GAAG,UAwCf,CAAC;AAEF,eAAO,MAAM,SAAS;;;;;;;;;CASrB,CAAC"}
|
|
@ -1 +1 @@
|
||||||
{"version":3,"file":"efficientpose.d.ts","sourceRoot":"","sources":["../../../src/body/efficientpose.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,OAAO,KAAK,EAAE,UAAU,EAAc,MAAM,WAAW,CAAC;AACxD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AACxD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC;AAexC,wBAAsB,IAAI,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC,CAQ9D;AAmBD,wBAAsB,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC,CAkElF"}
|
{"version":3,"file":"efficientpose.d.ts","sourceRoot":"","sources":["../../../src/body/efficientpose.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAKH,OAAO,KAAK,EAAgB,UAAU,EAAc,MAAM,WAAW,CAAC;AACtE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AACxD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC;AAWxC,wBAAsB,IAAI,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC,CAQ9D;AAmBD,wBAAsB,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC,CA4ElF"}
|
|
@ -0,0 +1,10 @@
|
||||||
|
export declare const kpt: string[];
|
||||||
|
export declare const connected: {
|
||||||
|
leftLeg: string[];
|
||||||
|
rightLeg: string[];
|
||||||
|
torso: string[];
|
||||||
|
leftArm: string[];
|
||||||
|
rightArm: string[];
|
||||||
|
head: never[];
|
||||||
|
};
|
||||||
|
//# sourceMappingURL=efficientposecoords.d.ts.map
|
|
@ -0,0 +1 @@
|
||||||
|
{"version":3,"file":"efficientposecoords.d.ts","sourceRoot":"","sources":["../../../src/body/efficientposecoords.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,GAAG,UAiBf,CAAC;AAEF,eAAO,MAAM,SAAS;;;;;;;CAOrB,CAAC"}
|
|
@ -1 +1 @@
|
||||||
{"version":3,"file":"movenet.d.ts","sourceRoot":"","sources":["../../../src/body/movenet.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAKH,OAAO,KAAK,EAAE,UAAU,EAAc,MAAM,WAAW,CAAC;AACxD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AACxD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC;AAgBxC,wBAAsB,IAAI,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC,CAW9D;AAwFD,wBAAsB,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC,CA2ClF"}
|
{"version":3,"file":"movenet.d.ts","sourceRoot":"","sources":["../../../src/body/movenet.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAMH,OAAO,KAAK,EAAgB,UAAU,EAAc,MAAM,WAAW,CAAC;AACtE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AACxD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC;AAWxC,wBAAsB,IAAI,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC,CAW9D;AA4GD,wBAAsB,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC,CA2ClF"}
|
|
@ -1 +1 @@
|
||||||
{"version":3,"file":"human.d.ts","sourceRoot":"","sources":["../../src/human.ts"],"names":[],"mappings":"AAAA;;GAEG;AAKH,OAAO,KAAK,EAAE,MAAM,qBAAqB,CAAC;AAQ1C,OAAO,KAAK,GAAG,MAAM,YAAY,CAAC;AAElC,OAAO,KAAK,QAAQ,MAAM,iBAAiB,CAAC;AAQ5C,OAAO,KAAK,KAAK,MAAM,cAAc,CAAC;AACtC,OAAO,KAAK,MAAM,MAAM,UAAU,CAAC;AASnC,OAAO,KAAK,EAAE,MAAM,EAAiF,MAAM,UAAU,CAAC;AACtH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAC3C,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC/C,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,eAAe,CAAC;AAC3C,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAEvC,kEAAkE;AAClE,cAAc,UAAU,CAAC;AAEzB,6DAA6D;AAC7D,cAAc,UAAU,CAAC;AAEzB,yDAAyD;AACzD,YAAY,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC/C,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,MAAM,YAAY,CAAC;AAEtC,2CAA2C;AAC3C,YAAY,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAE/C,+BAA+B;AAC/B,OAAO,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,UAAU,CAAC;AAEtC,4DAA4D;AAC5D,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAElC,+DAA+D;AAC/D,OAAO,EAAE,KAAK,EAAE,MAAM,eAAe,CAAC;AAEtC;;;;;;;GAOG;AACH,oBAAY,MAAM,GAAG,QAAQ,GAAG,MAAM,GAAG,OAAO,GAAG,QAAQ,GAAG,QAAQ,GAAG,OAAO,CAAC;AAEjF;;GAEG;AACH,oBAAY,KAAK,GAAG;IAAE,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC;AAEtC;;GAEG;AACH,oBAAY,UAAU,GAAG,OAAO,EAAE,CAAC;AAEnC;;;;;;;;;;GAUG;AACH,qBAAa,KAAK;;IAChB,0DAA0D;IAC1D,OAAO,EAAE,MAAM,CAAC;IAEhB;;;OAGG;IACH,MAAM,EAAE,MAAM,CAAC;IAEf;;;MAGE;IACF,MAAM,EAAE,MAAM,CAAC;IAEf;;;OAGG;IACH,KAAK,EAAE,MAAM,CAAC;IAEd,iDAAiD;IACjD,OAAO,EAAE;QAAE,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;QAAC,MAAM,EAAE,eAAe,GAAG,iBAAiB,GAAG,IAAI,CAAA;KAAE,CAAC;IAEvF;;;;;OAKG;IACH,EAAE,EAAE,UAAU,CAAC;IAEf,qEAAqE;IACrE,GAAG,EAAE,GAAG,CAAC,GAAG,CAAC;IAEb;;;;;;;OAOG;IACH,IAAI,EAAE;QAAE,MAAM,MAAC;QAAC,IAAI,MAAC;QAAC,IAAI,MAAC;QAAC,IAAI,MAAC;QAAC,OAAO,MAAC;QAAC,MAAM,MAAC;QAAC,MAAM,MAAC;QAAC,GAAG,MAAC;QAAC,OAAO,EAAE,WAAW,CAAA;KAAE,CAAC;IAEvF;;;MAGE;IACF,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC;IAEtB;;;;;;;;;OASG;IACH,MAAM,EAAE,WAAW,GAAG,SAAS,CAAC;IAChC,oGAAoG;IACpG,iBAAiB,EAAE,OAAO,QAAQ,CAAC,aAAa,CAAC;IACjD,0EAA0E;IAC1E,SAAS,EAAE,OAAO,QAAQ,CAAC,KAAK,CAAC;IACjC,oFAAoF;IACpF,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAIpC,uBAAuB;IACvB,EAAE,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAG5B;;;;;OAKG;gBACS,UAAU,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC;IA8CxC,cAAc;IACd,OAAO,WAAY,MAAM,EAAE,UAO1B;IAgBD,4CAA4C;IAC5C,KAAK,IAAI,IAAI;IAMb,4CAA4C;IACrC,QAAQ,CAAC,UAAU,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC;;;;;IAI5C,oCAAoC;IAC7B,UAAU,0BAAoB;IAC9B,QAAQ,wBAAkB;IAC1B,KAAK,qBAAe;IAE3B;;;;OAIG;IACH,KAAK,CAAC,KAAK,EAAE,KAAK;;;;IAIlB;;;;;;;;;;;;OAYG;IACG,YAAY,CAAC,KAAK,EAAE,KAAK,EAAE,UAAU,CAAC,EAAE,KAAK,GAAG,OAAO,CAAC;QAAE,IAAI,EAAE,MAAM,EAAE,CAAC;QAAC,MAAM,EAAE,iBAAiB,GAAG,eAAe,GAAG,IAAI,CAAC;QAAC,KAAK,EAAE,iBAAiB,GAAG,eAAe,GAAG,IAAI,CAAA;KAAE,CAAC;IAIxL;;;;OAIG;IAEH,OAAO,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;IAIrC;;;;;;OAMG;IACG,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAM3B;;;;;MAKE;IACI,IAAI,CAAC,UAAU,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IAgCvD,cAAc;IACd,IAAI,UAAW,MAAM,UAEpB;IAED;;;;;OAKG;IACH,IAAI,CAAC,MAAM,GAAE,MAAoB,GAAG,MAAM;IAI1C;;;;;MAKE;IACI,MAAM,CAAC,UAAU,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,GAAG,OAAO,CAAC,MAAM,GAAG;QAAE,KAAK,MAAA;KAAE,CAAC;IAIvE;;;;;;;;;MASE;IACI,MAAM,CAAC,KAAK,EAAE,KAAK,EAAE,UAAU,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,GAAG,OAAO,CAAC,MAAM,GAAG,KAAK,CAAC;CAkKlF;AAED,oCAAoC;AACpC,OAAO,EAAE,KAAK,IAAI,OAAO,EAAE,CAAC"}
|
{"version":3,"file":"human.d.ts","sourceRoot":"","sources":["../../src/human.ts"],"names":[],"mappings":"AAAA;;GAEG;AAKH,OAAO,KAAK,EAAE,MAAM,qBAAqB,CAAC;AAO1C,OAAO,KAAK,GAAG,MAAM,YAAY,CAAC;AAElC,OAAO,KAAK,QAAQ,MAAM,iBAAiB,CAAC;AAQ5C,OAAO,KAAK,KAAK,MAAM,cAAc,CAAC;AACtC,OAAO,KAAK,MAAM,MAAM,UAAU,CAAC;AASnC,OAAO,KAAK,EAAE,MAAM,EAAiF,MAAM,UAAU,CAAC;AACtH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAC3C,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC/C,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,eAAe,CAAC;AAC3C,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAEvC,kEAAkE;AAClE,cAAc,UAAU,CAAC;AAEzB,6DAA6D;AAC7D,cAAc,UAAU,CAAC;AAEzB,yDAAyD;AACzD,YAAY,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC/C,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,MAAM,YAAY,CAAC;AAEtC,2CAA2C;AAC3C,YAAY,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAE/C,+BAA+B;AAC/B,OAAO,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,UAAU,CAAC;AAEtC,4DAA4D;AAC5D,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAElC,+DAA+D;AAC/D,OAAO,EAAE,KAAK,EAAE,MAAM,eAAe,CAAC;AAEtC;;;;;;;GAOG;AACH,oBAAY,MAAM,GAAG,QAAQ,GAAG,MAAM,GAAG,OAAO,GAAG,QAAQ,GAAG,QAAQ,GAAG,OAAO,CAAC;AAEjF;;GAEG;AACH,oBAAY,KAAK,GAAG;IAAE,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC;AAEtC;;GAEG;AACH,oBAAY,UAAU,GAAG,OAAO,EAAE,CAAC;AAEnC;;;;;;;;;;GAUG;AACH,qBAAa,KAAK;;IAChB,0DAA0D;IAC1D,OAAO,EAAE,MAAM,CAAC;IAEhB;;;OAGG;IACH,MAAM,EAAE,MAAM,CAAC;IAEf;;;MAGE;IACF,MAAM,EAAE,MAAM,CAAC;IAEf;;;OAGG;IACH,KAAK,EAAE,MAAM,CAAC;IAEd,iDAAiD;IACjD,OAAO,EAAE;QAAE,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;QAAC,MAAM,EAAE,eAAe,GAAG,iBAAiB,GAAG,IAAI,CAAA;KAAE,CAAC;IAEvF;;;;;OAKG;IACH,EAAE,EAAE,UAAU,CAAC;IAEf,qEAAqE;IACrE,GAAG,EAAE,GAAG,CAAC,GAAG,CAAC;IAEb;;;;;;;OAOG;IACH,IAAI,EAAE;QAAE,MAAM,MAAC;QAAC,IAAI,MAAC;QAAC,IAAI,MAAC;QAAC,IAAI,MAAC;QAAC,OAAO,MAAC;QAAC,MAAM,MAAC;QAAC,MAAM,MAAC;QAAC,GAAG,MAAC;QAAC,OAAO,EAAE,WAAW,CAAA;KAAE,CAAC;IAEvF;;;MAGE;IACF,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC;IAEtB;;;;;;;;;OASG;IACH,MAAM,EAAE,WAAW,GAAG,SAAS,CAAC;IAChC,oGAAoG;IACpG,iBAAiB,EAAE,OAAO,QAAQ,CAAC,aAAa,CAAC;IACjD,0EAA0E;IAC1E,SAAS,EAAE,OAAO,QAAQ,CAAC,KAAK,CAAC;IACjC,oFAAoF;IACpF,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAIpC,uBAAuB;IACvB,EAAE,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAG5B;;;;;OAKG;gBACS,UAAU,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC;IA8CxC,cAAc;IACd,OAAO,WAAY,MAAM,EAAE,UAO1B;IAgBD,4CAA4C;IAC5C,KAAK,IAAI,IAAI;IAMb,4CAA4C;IACrC,QAAQ,CAAC,UAAU,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC;;;;;IAI5C,oCAAoC;IAC7B,UAAU,0BAAoB;IAC9B,QAAQ,wBAAkB;IAC1B,KAAK,qBAAe;IAE3B;;;;OAIG;IACH,KAAK,CAAC,KAAK,EAAE,KAAK;;;;IAIlB;;;;;;;;;;;;OAYG;IACG,YAAY,CAAC,KAAK,EAAE,KAAK,EAAE,UAAU,CAAC,EAAE,KAAK,GAAG,OAAO,CAAC;QAAE,IAAI,EAAE,MAAM,EAAE,CAAC;QAAC,MAAM,EAAE,iBAAiB,GAAG,eAAe,GAAG,IAAI,CAAC;QAAC,KAAK,EAAE,iBAAiB,GAAG,eAAe,GAAG,IAAI,CAAA;KAAE,CAAC;IAIxL;;;;OAIG;IAEH,OAAO,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;IAIrC;;;;;;OAMG;IACG,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAM3B;;;;;MAKE;IACI,IAAI,CAAC,UAAU,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IAgCvD,cAAc;IACd,IAAI,UAAW,MAAM,UAEpB;IAED;;;;;OAKG;IACH,IAAI,CAAC,MAAM,GAAE,MAAoB,GAAG,MAAM;IAI1C;;;;;MAKE;IACI,MAAM,CAAC,UAAU,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,GAAG,OAAO,CAAC,MAAM,GAAG;QAAE,KAAK,MAAA;KAAE,CAAC;IAIvE;;;;;;;;;MASE;IACI,MAAM,CAAC,KAAK,EAAE,KAAK,EAAE,UAAU,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,GAAG,OAAO,CAAC,MAAM,GAAG,KAAK,CAAC;CAkKlF;AAED,oCAAoC;AACpC,OAAO,EAAE,KAAK,IAAI,OAAO,EAAE,CAAC"}
|
|
@ -65,6 +65,12 @@ export interface FaceResult {
|
||||||
};
|
};
|
||||||
tensor?: Tensor;
|
tensor?: Tensor;
|
||||||
}
|
}
|
||||||
|
export declare type BodyKeypoint = {
|
||||||
|
part: string;
|
||||||
|
position: Point;
|
||||||
|
positionRaw: Point;
|
||||||
|
score: number;
|
||||||
|
};
|
||||||
/** Body results
|
/** Body results
|
||||||
*
|
*
|
||||||
* Each results has:
|
* Each results has:
|
||||||
|
@ -83,13 +89,8 @@ export interface BodyResult {
|
||||||
score: number;
|
score: number;
|
||||||
box: Box;
|
box: Box;
|
||||||
boxRaw: Box;
|
boxRaw: Box;
|
||||||
keypoints: Array<{
|
annotations: Record<string, Point[][]>;
|
||||||
part: string;
|
keypoints: Array<BodyKeypoint>;
|
||||||
position: Point;
|
|
||||||
positionRaw: Point;
|
|
||||||
score: number;
|
|
||||||
presence?: number;
|
|
||||||
}>;
|
|
||||||
}
|
}
|
||||||
/** Hand results
|
/** Hand results
|
||||||
*
|
*
|
||||||
|
|
|
@ -1 +1 @@
|
||||||
{"version":3,"file":"result.d.ts","sourceRoot":"","sources":["../../src/result.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAC3C,OAAO,KAAK,EAAE,WAAW,EAAE,WAAW,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAE5F,oBAAY,GAAG,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;AACnD,oBAAY,KAAK,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;AAE9C;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,MAAM,WAAW,UAAU;IACzB,EAAE,EAAE,MAAM,CAAA;IACV,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,GAAG,EAAE,GAAG,CAAC;IACT,MAAM,EAAE,GAAG,CAAC;IACZ,IAAI,EAAE,KAAK,CAAC,KAAK,CAAC,CAAA;IAClB,OAAO,EAAE,KAAK,CAAC,KAAK,CAAC,CAAA;IACrB,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,KAAK,EAAE,CAAC,CAAC;IACrC,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,EAAE,KAAK,CAAC;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACpD,SAAS,CAAC,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;IAC1B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE;QACT,KAAK,EAAE;YAAE,IAAI,EAAE,MAAM,CAAC;YAAC,GAAG,EAAE,MAAM,CAAC;YAAC,KAAK,EAAE,MAAM,CAAA;SAAE,CAAC;QACpD,MAAM,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;QACjF,IAAI,EAAE;YAAE,OAAO,EAAE,MAAM,CAAC;YAAC,QAAQ,EAAE,MAAM,CAAA;SAAE,CAAC;KAC7C,CAAA;IACD,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED;;;;;;;;;;;;GAYG;AACH,MAAM,WAAW,UAAU;IACzB,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,GAAG,CAAC;IACT,MAAM,EAAE,GAAG,CAAC;IACZ,SAAS,EAAE,KAAK,CAAC;QACf,IAAI,EAAE,MAAM,CAAC;QACb,QAAQ,EAAE,KAAK,CAAC;QAChB,WAAW,EAAE,KAAK,CAAC;QACnB,KAAK,EAAE,MAAM,CAAC;QACd,QAAQ,CAAC,EAAE,MAAM,CAAC;KACnB,CAAC,CAAA;CACH;AAED;;;;;;;;;;GAUG;AACH,MAAM,WAAW,UAAU;IACzB,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,GAAG,EAAE,GAAG,CAAC;IACT,MAAM,EAAE,GAAG,CAAC;IACZ,SAAS,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC;IACxB,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CACjB,OAAO,GAAG,QAAQ,GAAG,OAAO,GAAG,MAAM,GAAG,OAAO,GAAG,MAAM,EACxD,KAAK,CAAC,KAAK,CAAC,CACb,CAAC;IACF,SAAS,EAAE,MAAM,CACf,OAAO,GAAG,QAAQ,GAAG,OAAO,GAAG,MAAM,GAAG,OAAO,EAC/C;QAAE,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,CAAC;QAAC,SAAS,EAAE,YAAY,GAAG,cAAc,GAAG,gBAAgB,GAAG,iBAAiB,GAAG,iBAAiB,GAAG,gBAAgB,GAAG,mBAAmB,GAAG,kBAAkB,CAAA;KAAE,CACtM,CAAC;CACH;AAED;;;;;;;;;;;EAWE;AACF,MAAM,WAAW,YAAY;IAC3B,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,GAAG,CAAC;IACT,MAAM,EAAE,GAAG,CAAC;CACb;AAED;;;;;;;GAOG;AACH,oBAAY,aAAa,GACvB;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,WAAW,CAAA;CAAE,GACtC;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,WAAW,CAAA;CAAE,GACxC;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,WAAW,CAAA;CAAE,GACxC;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,WAAW,CAAA;CAAE,CAAA;AAE5C;;;;;;;;;;;EAWE;AACF,MAAM,WAAW,YAAY;IAC3B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,UAAU,CAAC;IACjB,IAAI,EAAE,UAAU,GAAG,IAAI,CAAC;IACxB,KAAK,EAAE;QAAE,IAAI,EAAE,UAAU,GAAG,IAAI,CAAC;QAAC,KAAK,EAAE,UAAU,GAAG,IAAI,CAAA;KAAE,CAAC;IAC7D,QAAQ,EAAE,KAAK,CAAC,aAAa,CAAC,CAAC;IAC/B,GAAG,EAAE,GAAG,CAAC;IACT,MAAM,CAAC,EAAE,GAAG,CAAC;CACd;AAED;;;;GAIG;AACH,MAAM,WAAW,MAAM;IACrB,uDAAuD;IACvD,IAAI,EAAE,KAAK,CAAC,UAAU,CAAC,CAAC;IACxB,uDAAuD;IACvD,IAAI,EAAE,KAAK,CAAC,UAAU,CAAC,CAAC;IACxB,uDAAuD;IACvD,IAAI,EAAE,KAAK,CAAC,UAAU,CAAC,CAAC;IACxB,0DAA0D;IAC1D,OAAO,EAAE,KAAK,CAAC,aAAa,CAAC,CAAC;IAC9B,yDAAyD;IACzD,MAAM,EAAE,KAAK,CAAC,YAAY,CAAC,CAAA;IAC3B,sEAAsE;IACtE,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACrC,yEAAyE;IACzE,MAAM,CAAC,EAAE,eAAe,GAAG,iBAAiB,GAAG,IAAI,GAAG,SAAS,CAAC;IAChE,wFAAwF;IACxF,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,2DAA2D;IAC3D,OAAO,EAAE,KAAK,CAAC,YAAY,CAAC,CAAC;CAC9B"}
|
{"version":3,"file":"result.d.ts","sourceRoot":"","sources":["../../src/result.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAC3C,OAAO,KAAK,EAAE,WAAW,EAAE,WAAW,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAE5F,oBAAY,GAAG,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;AACnD,oBAAY,KAAK,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;AAE9C;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,MAAM,WAAW,UAAU;IACzB,EAAE,EAAE,MAAM,CAAA;IACV,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,GAAG,EAAE,GAAG,CAAC;IACT,MAAM,EAAE,GAAG,CAAC;IACZ,IAAI,EAAE,KAAK,CAAC,KAAK,CAAC,CAAA;IAClB,OAAO,EAAE,KAAK,CAAC,KAAK,CAAC,CAAA;IACrB,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,KAAK,EAAE,CAAC,CAAC;IACrC,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,EAAE,KAAK,CAAC;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACpD,SAAS,CAAC,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;IAC1B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE;QACT,KAAK,EAAE;YAAE,IAAI,EAAE,MAAM,CAAC;YAAC,GAAG,EAAE,MAAM,CAAC;YAAC,KAAK,EAAE,MAAM,CAAA;SAAE,CAAC;QACpD,MAAM,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;QACjF,IAAI,EAAE;YAAE,OAAO,EAAE,MAAM,CAAC;YAAC,QAAQ,EAAE,MAAM,CAAA;SAAE,CAAC;KAC7C,CAAA;IACD,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,oBAAY,YAAY,GAAG;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,KAAK,CAAC;IAChB,WAAW,EAAE,KAAK,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;CACf,CAAA;AAED;;;;;;;;;;;;GAYG;AACH,MAAM,WAAW,UAAU;IACzB,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,GAAG,CAAC;IACT,MAAM,EAAE,GAAG,CAAC;IACZ,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC;IACvC,SAAS,EAAE,KAAK,CAAC,YAAY,CAAC,CAAA;CAC/B;AAED;;;;;;;;;;GAUG;AACH,MAAM,WAAW,UAAU;IACzB,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,GAAG,EAAE,GAAG,CAAC;IACT,MAAM,EAAE,GAAG,CAAC;IACZ,SAAS,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC;IACxB,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CACjB,OAAO,GAAG,QAAQ,GAAG,OAAO,GAAG,MAAM,GAAG,OAAO,GAAG,MAAM,EACxD,KAAK,CAAC,KAAK,CAAC,CACb,CAAC;IACF,SAAS,EAAE,MAAM,CACf,OAAO,GAAG,QAAQ,GAAG,OAAO,GAAG,MAAM,GAAG,OAAO,EAC/C;QAAE,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,CAAC;QAAC,SAAS,EAAE,YAAY,GAAG,cAAc,GAAG,gBAAgB,GAAG,iBAAiB,GAAG,iBAAiB,GAAG,gBAAgB,GAAG,mBAAmB,GAAG,kBAAkB,CAAA;KAAE,CACtM,CAAC;CACH;AAED;;;;;;;;;;;EAWE;AACF,MAAM,WAAW,YAAY;IAC3B,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,GAAG,CAAC;IACT,MAAM,EAAE,GAAG,CAAC;CACb;AAED;;;;;;;GAOG;AACH,oBAAY,aAAa,GACvB;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,WAAW,CAAA;CAAE,GACtC;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,WAAW,CAAA;CAAE,GACxC;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,WAAW,CAAA;CAAE,GACxC;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,WAAW,CAAA;CAAE,CAAA;AAE5C;;;;;;;;;;;EAWE;AACF,MAAM,WAAW,YAAY;IAC3B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,UAAU,CAAC;IACjB,IAAI,EAAE,UAAU,GAAG,IAAI,CAAC;IACxB,KAAK,EAAE;QAAE,IAAI,EAAE,UAAU,GAAG,IAAI,CAAC;QAAC,KAAK,EAAE,UAAU,GAAG,IAAI,CAAA;KAAE,CAAC;IAC7D,QAAQ,EAAE,KAAK,CAAC,aAAa,CAAC,CAAC;IAC/B,GAAG,EAAE,GAAG,CAAC;IACT,MAAM,CAAC,EAAE,GAAG,CAAC;CACd;AAED;;;;GAIG;AACH,MAAM,WAAW,MAAM;IACrB,uDAAuD;IACvD,IAAI,EAAE,KAAK,CAAC,UAAU,CAAC,CAAC;IACxB,uDAAuD;IACvD,IAAI,EAAE,KAAK,CAAC,UAAU,CAAC,CAAC;IACxB,uDAAuD;IACvD,IAAI,EAAE,KAAK,CAAC,UAAU,CAAC,CAAC;IACxB,0DAA0D;IAC1D,OAAO,EAAE,KAAK,CAAC,aAAa,CAAC,CAAC;IAC9B,yDAAyD;IACzD,MAAM,EAAE,KAAK,CAAC,YAAY,CAAC,CAAA;IAC3B,sEAAsE;IACtE,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACrC,yEAAyE;IACzE,MAAM,CAAC,EAAE,eAAe,GAAG,iBAAiB,GAAG,IAAI,GAAG,SAAS,CAAC;IAChE,wFAAwF;IACxF,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,2DAA2D;IAC3D,OAAO,EAAE,KAAK,CAAC,YAAY,CAAC,CAAC;CAC9B"}
|
Loading…
Reference in New Issue