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
|
||||
|
||||
### **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
|
||||
- release candidate
|
||||
- tweaked default values
|
||||
|
|
|
@ -31,6 +31,13 @@ import jsonView from './helpers/jsonview.js';
|
|||
let human;
|
||||
|
||||
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',
|
||||
backend: 'humangl',
|
||||
|
@ -108,7 +115,7 @@ const ui = {
|
|||
lastFrame: 0, // time of last frame processing
|
||||
viewportSet: false, // internal, has custom viewport been set
|
||||
background: null, // holds instance of segmentation background image
|
||||
exceptionHandler: true, // should capture all unhandled exceptions
|
||||
exceptionHandler: false, // should capture all unhandled exceptions
|
||||
|
||||
// webrtc
|
||||
useWebRTC: false, // use webrtc as camera source instead of local webcam
|
||||
|
|
|
@ -173,7 +173,7 @@ var config = {
|
|||
},
|
||||
maxDetected: -1,
|
||||
minConfidence: 0.2,
|
||||
skipFrames: 1
|
||||
skipFrames: 5
|
||||
},
|
||||
hand: {
|
||||
enabled: true,
|
||||
|
@ -1177,6 +1177,8 @@ function process2(input, config3) {
|
|||
tempCanvas.height = targetHeight;
|
||||
const tempCtx = tempCanvas.getContext("2d");
|
||||
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 {
|
||||
pixels = tfjs_esm_exports.browser && env2.browser ? tfjs_esm_exports.browser.fromPixels(tempCanvas) : null;
|
||||
} catch (err) {
|
||||
|
@ -8732,11 +8734,11 @@ var HandPipeline = class {
|
|||
const rawCoords = await keypointsReshaped.array();
|
||||
tfjs_esm_exports.dispose(keypoints3);
|
||||
tfjs_esm_exports.dispose(keypointsReshaped);
|
||||
const coords4 = this.transformRawCoords(rawCoords, newBox, angle, rotationMatrix);
|
||||
const nextBoundingBox = this.getBoxForHandLandmarks(coords4);
|
||||
const coords7 = this.transformRawCoords(rawCoords, newBox, angle, rotationMatrix);
|
||||
const nextBoundingBox = this.getBoxForHandLandmarks(coords7);
|
||||
this.storedBoxes[i] = { ...nextBoundingBox, confidence };
|
||||
const result = {
|
||||
landmarks: coords4,
|
||||
landmarks: coords7,
|
||||
confidence,
|
||||
boxConfidence: currentBox.confidence,
|
||||
fingerConfidence: confidence,
|
||||
|
@ -9163,10 +9165,10 @@ async function predict5(input, config3) {
|
|||
return [];
|
||||
const hands = [];
|
||||
for (let i = 0; i < predictions.length; i++) {
|
||||
const annotations3 = {};
|
||||
const annotations2 = {};
|
||||
if (predictions[i].landmarks) {
|
||||
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;
|
||||
|
@ -9210,7 +9212,7 @@ async function predict5(input, config3) {
|
|||
box: box4,
|
||||
boxRaw: boxRaw2,
|
||||
keypoints: keypoints3,
|
||||
annotations: annotations3,
|
||||
annotations: annotations2,
|
||||
landmarks
|
||||
});
|
||||
}
|
||||
|
@ -9249,9 +9251,9 @@ async function load7(config3) {
|
|||
}
|
||||
|
||||
// src/util/box.ts
|
||||
function scale(keypoints3, boxScaleFact2, outputSize3) {
|
||||
const coords4 = [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])];
|
||||
function scale(keypoints3, boxScaleFact2, outputSize2) {
|
||||
const coords7 = [keypoints3.map((pt) => pt[0]), keypoints3.map((pt) => pt[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 diff = Math.max(center[0] - maxmin[1], center[1] - maxmin[3], -center[0] + maxmin[0], -center[1] + maxmin[2]) * boxScaleFact2;
|
||||
const box4 = [
|
||||
|
@ -9261,10 +9263,10 @@ function scale(keypoints3, boxScaleFact2, outputSize3) {
|
|||
Math.trunc(2 * diff)
|
||||
];
|
||||
const boxRaw2 = [
|
||||
box4[0] / outputSize3[0],
|
||||
box4[1] / outputSize3[1],
|
||||
box4[2] / outputSize3[0],
|
||||
box4[3] / outputSize3[1]
|
||||
box4[0] / outputSize2[0],
|
||||
box4[1] / outputSize2[1],
|
||||
box4[2] / outputSize2[0],
|
||||
box4[3] / outputSize2[1]
|
||||
];
|
||||
const yxBox = [
|
||||
boxRaw2[1],
|
||||
|
@ -9452,8 +9454,17 @@ async function predict6(input, config3) {
|
|||
return hands;
|
||||
}
|
||||
|
||||
// src/body/annotations.ts
|
||||
var full = [
|
||||
// src/body/blazepose.ts
|
||||
import {
|
||||
dispose as dispose12,
|
||||
div as div8,
|
||||
image as image13,
|
||||
loadGraphModel as loadGraphModel9,
|
||||
pad
|
||||
} from "@tensorflow/tfjs";
|
||||
|
||||
// src/body/blazeposecoords.ts
|
||||
var kpt = [
|
||||
"nose",
|
||||
"leftEyeInside",
|
||||
"leftEye",
|
||||
|
@ -9487,58 +9498,38 @@ var full = [
|
|||
"rightHeel",
|
||||
"leftFoot",
|
||||
"rightFoot",
|
||||
"midHip",
|
||||
"forehead",
|
||||
"bodyCenter",
|
||||
"bodyTop",
|
||||
"leftThumb",
|
||||
"leftHand",
|
||||
"rightThumb",
|
||||
"rightHand"
|
||||
];
|
||||
var upper = [
|
||||
"nose",
|
||||
"leftEyeInside",
|
||||
"leftEye",
|
||||
"leftEyeOutside",
|
||||
"rightEyeInside",
|
||||
"rightEye",
|
||||
"rightEyeOutside",
|
||||
"leftEar",
|
||||
"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"
|
||||
];
|
||||
var 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: []
|
||||
};
|
||||
|
||||
// src/body/blazepose.ts
|
||||
var env3 = { initial: true };
|
||||
var models2 = [null, null];
|
||||
var outputNodes = ["ld_3d", "activation_segmentation", "activation_heatmap", "world_3d", "output_poseflag"];
|
||||
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) {
|
||||
var _a;
|
||||
if (env2.initial)
|
||||
var _a, _b;
|
||||
if (env3.initial)
|
||||
models2[0] = null;
|
||||
if (!models2[0]) {
|
||||
models2[0] = await tfjs_esm_exports.loadGraphModel(join(config3.modelBasePath, ((_a = config3.body.detector) == null ? void 0 : _a.modelPath) || ""));
|
||||
if (!models2[0] && ((_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"]);
|
||||
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;
|
||||
|
@ -9546,18 +9537,23 @@ async function loadDetect2(config3) {
|
|||
log("load model failed:", config3.object.modelPath);
|
||||
else if (config3.debug)
|
||||
log("load model:", models2[0]["modelUrl"]);
|
||||
} else if (config3.debug)
|
||||
} else if (config3.debug && models2[0])
|
||||
log("cached model:", models2[0]["modelUrl"]);
|
||||
return models2[0];
|
||||
}
|
||||
async function loadPose(config3) {
|
||||
if (env2.initial)
|
||||
var _a;
|
||||
if (env3.initial)
|
||||
models2[1] = null;
|
||||
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"]);
|
||||
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;
|
||||
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"])
|
||||
log("load model failed:", config3.object.modelPath);
|
||||
else if (config3.debug)
|
||||
|
@ -9566,63 +9562,125 @@ async function loadPose(config3) {
|
|||
log("cached model:", models2[1]["modelUrl"]);
|
||||
return models2[1];
|
||||
}
|
||||
async function detectParts(input, config3) {
|
||||
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
|
||||
});
|
||||
}
|
||||
}
|
||||
function calculateBoxes(keypoints3, outputSize2) {
|
||||
const x = keypoints3.map((a) => a.position[0]);
|
||||
const y = keypoints3.map((a) => a.position[1]);
|
||||
const box4 = [
|
||||
Math.min(...x),
|
||||
Math.min(...y),
|
||||
Math.max(...x) - Math.min(...x),
|
||||
Math.max(...y) - Math.min(...x)
|
||||
const keypointsBox = [Math.min(...x), Math.min(...y), Math.max(...x) - Math.min(...x), Math.max(...y) - Math.min(...y)];
|
||||
const keypointsBoxRaw = [keypointsBox[0] / outputSize2[0], keypointsBox[1] / outputSize2[1], keypointsBox[2] / outputSize2[0], keypointsBox[3] / outputSize2[1]];
|
||||
return { keypointsBox, keypointsBoxRaw };
|
||||
}
|
||||
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];
|
||||
const score2 = keypoints3.reduce((prev, curr) => curr.score > prev ? curr.score : prev, 0);
|
||||
Object.keys(t).forEach((tensor3) => tfjs_esm_exports.dispose(t[tensor3]));
|
||||
return { id: 0, score: score2, box: box4, boxRaw: boxRaw2, keypoints: keypoints3 };
|
||||
t.pad = pad(input, padding);
|
||||
t.resize = image13.resizeBilinear(t.pad, [inputSize5[1][0], inputSize5[1][1]]);
|
||||
const final = div8(t.resize, 255);
|
||||
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) {
|
||||
outputSize2 = [input.shape[2] || 0, input.shape[1] || 0];
|
||||
const bodies = [];
|
||||
const body4 = await detectParts(input, config3);
|
||||
bodies.push(body4);
|
||||
return bodies;
|
||||
const outputSize2 = [input.shape[2] || 0, input.shape[1] || 0];
|
||||
if (skipped5 < (config3.body.skipFrames || 0) && config3.skipFrame) {
|
||||
skipped5++;
|
||||
} else {
|
||||
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
|
||||
var model7;
|
||||
var keypoints = [];
|
||||
var box3 = [0, 0, 0, 0];
|
||||
var boxRaw = [0, 0, 0, 0];
|
||||
var score = 0;
|
||||
var skipped5 = Number.MAX_SAFE_INTEGER;
|
||||
var bodyParts = ["head", "neck", "rightShoulder", "rightElbow", "rightWrist", "chest", "leftShoulder", "leftElbow", "leftWrist", "pelvis", "rightHip", "rightKnee", "rightAnkle", "leftHip", "leftKnee", "leftAnkle"];
|
||||
var skipped6 = Number.MAX_SAFE_INTEGER;
|
||||
async function load8(config3) {
|
||||
if (env2.initial)
|
||||
model7 = null;
|
||||
|
@ -9643,9 +9701,9 @@ function max2d(inputs, minScore) {
|
|||
const reshaped = tfjs_esm_exports.reshape(inputs, [height * width]);
|
||||
const newScore = tfjs_esm_exports.max(reshaped, 0).dataSync()[0];
|
||||
if (newScore > minScore) {
|
||||
const coords4 = tfjs_esm_exports.argMax(reshaped, 0);
|
||||
const x = mod(coords4, width).dataSync()[0];
|
||||
const y = tfjs_esm_exports.div(coords4, tfjs_esm_exports.scalar(width, "int32")).dataSync()[0];
|
||||
const coordinates = tfjs_esm_exports.argMax(reshaped, 0);
|
||||
const x = mod(coordinates, width).dataSync()[0];
|
||||
const y = tfjs_esm_exports.div(coordinates, tfjs_esm_exports.scalar(width, "int32")).dataSync()[0];
|
||||
return [x, y, newScore];
|
||||
}
|
||||
return [0, 0, newScore];
|
||||
|
@ -9653,11 +9711,11 @@ function max2d(inputs, minScore) {
|
|||
}
|
||||
async function predict8(image24, config3) {
|
||||
var _a;
|
||||
if (skipped5 < (((_a = config3.body) == null ? void 0 : _a.skipFrames) || 0) && config3.skipFrame && Object.keys(keypoints).length > 0) {
|
||||
skipped5++;
|
||||
return [{ id: 0, score, box: box3, boxRaw, keypoints }];
|
||||
if (skipped6 < (((_a = config3.body) == null ? void 0 : _a.skipFrames) || 0) && config3.skipFrame && Object.keys(keypoints).length > 0) {
|
||||
skipped6++;
|
||||
return [{ id: 0, score, box: box3, boxRaw, keypoints, annotations: {} }];
|
||||
}
|
||||
skipped5 = 0;
|
||||
skipped6 = 0;
|
||||
return new Promise(async (resolve) => {
|
||||
var _a2;
|
||||
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)) {
|
||||
keypoints.push({
|
||||
score: Math.round(100 * partScore) / 100,
|
||||
part: bodyParts[id],
|
||||
part: kpt2[id],
|
||||
positionRaw: [
|
||||
x2 / model7.inputs[0].shape[2],
|
||||
y2 / model7.inputs[0].shape[1]
|
||||
|
@ -9714,17 +9772,56 @@ async function predict8(image24, config3) {
|
|||
Math.max(...xRaw) - Math.min(...xRaw),
|
||||
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
|
||||
var model8;
|
||||
var inputSize6 = 0;
|
||||
var cachedBoxes = [];
|
||||
var skipped6 = Number.MAX_SAFE_INTEGER;
|
||||
var skipped7 = Number.MAX_SAFE_INTEGER;
|
||||
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) {
|
||||
if (env2.initial)
|
||||
model8 = null;
|
||||
|
@ -9762,19 +9859,19 @@ function createBox2(points) {
|
|||
return [box4, boxRaw2];
|
||||
}
|
||||
async function parseSinglePose(res, config3, image24, inputBox) {
|
||||
const kpt = res[0][0];
|
||||
const kpt4 = res[0][0];
|
||||
keypoints2.length = 0;
|
||||
let score2 = 0;
|
||||
for (let id = 0; id < kpt.length; id++) {
|
||||
score2 = kpt[id][2];
|
||||
for (let id = 0; id < kpt4.length; id++) {
|
||||
score2 = kpt4[id][2];
|
||||
if (score2 > config3.body.minConfidence) {
|
||||
const positionRaw = [
|
||||
(inputBox[3] - inputBox[1]) * kpt[id][1] + inputBox[1],
|
||||
(inputBox[2] - inputBox[0]) * kpt[id][0] + inputBox[0]
|
||||
(inputBox[3] - inputBox[1]) * kpt4[id][1] + inputBox[1],
|
||||
(inputBox[2] - inputBox[0]) * kpt4[id][0] + inputBox[0]
|
||||
];
|
||||
keypoints2.push({
|
||||
score: Math.round(100 * score2) / 100,
|
||||
part: bodyParts2[id],
|
||||
part: kpt3[id],
|
||||
positionRaw,
|
||||
position: [
|
||||
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);
|
||||
const bodies = [];
|
||||
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;
|
||||
}
|
||||
async function parseMultiPose(res, config3, image24, inputBox) {
|
||||
const bodies = [];
|
||||
for (let id = 0; id < res[0].length; id++) {
|
||||
const kpt = res[0][id];
|
||||
const totalScore = Math.round(100 * kpt[51 + 4]) / 100;
|
||||
const kpt4 = res[0][id];
|
||||
const totalScore = Math.round(100 * kpt4[51 + 4]) / 100;
|
||||
if (totalScore > config3.body.minConfidence) {
|
||||
keypoints2.length = 0;
|
||||
for (let i = 0; i < 17; i++) {
|
||||
const score2 = kpt[3 * i + 2];
|
||||
const score2 = kpt4[3 * i + 2];
|
||||
if (score2 > config3.body.minConfidence) {
|
||||
const positionRaw = [
|
||||
(inputBox[3] - inputBox[1]) * kpt[3 * i + 1] + inputBox[1],
|
||||
(inputBox[2] - inputBox[0]) * kpt[3 * i + 0] + inputBox[0]
|
||||
(inputBox[3] - inputBox[1]) * kpt4[3 * i + 1] + inputBox[1],
|
||||
(inputBox[2] - inputBox[0]) * kpt4[3 * i + 0] + inputBox[0]
|
||||
];
|
||||
keypoints2.push({
|
||||
part: bodyParts2[i],
|
||||
part: kpt3[i],
|
||||
score: Math.round(100 * score2) / 100,
|
||||
positionRaw,
|
||||
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 = [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))];
|
||||
bodies.push({ id, score: totalScore, boxRaw: boxRaw2, box: box4, keypoints: [...keypoints2] });
|
||||
const [box4, boxRaw2] = createBox2(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, score: totalScore, boxRaw: boxRaw2, box: box4, keypoints: [...keypoints2], annotations: annotations2 });
|
||||
}
|
||||
}
|
||||
bodies.sort((a, b) => b.score - a.score);
|
||||
|
@ -9832,7 +9950,7 @@ async function predict9(input, config3) {
|
|||
let bodies = [];
|
||||
if (!config3.skipFrame)
|
||||
cachedBoxes.length = 0;
|
||||
skipped6++;
|
||||
skipped7++;
|
||||
for (let i = 0; i < cachedBoxes.length; i++) {
|
||||
t.crop = tfjs_esm_exports.image.cropAndResize(input, [cachedBoxes[i]], [0], [inputSize6, inputSize6], "bilinear");
|
||||
t.cast = tfjs_esm_exports.cast(t.crop, "int32");
|
||||
|
@ -9842,7 +9960,7 @@ async function predict9(input, config3) {
|
|||
bodies = bodies.concat(newBodies);
|
||||
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.cast = tfjs_esm_exports.cast(t.resized, "int32");
|
||||
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]);
|
||||
Object.keys(t).forEach((tensor3) => tfjs_esm_exports.dispose(t[tensor3]));
|
||||
cachedBoxes.length = 0;
|
||||
skipped6 = 0;
|
||||
skipped7 = 0;
|
||||
}
|
||||
if (config3.skipFrame) {
|
||||
cachedBoxes.length = 0;
|
||||
for (let i = 0; i < bodies.length; i++) {
|
||||
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]]);
|
||||
cachedBoxes.push([...newBox.yxBox]);
|
||||
}
|
||||
|
@ -9953,7 +10071,7 @@ var labels = [
|
|||
// src/object/nanodet.ts
|
||||
var model9;
|
||||
var last3 = [];
|
||||
var skipped7 = Number.MAX_SAFE_INTEGER;
|
||||
var skipped8 = Number.MAX_SAFE_INTEGER;
|
||||
var scaleBox = 2.5;
|
||||
async function load10(config3) {
|
||||
if (!model9 || env2.initial) {
|
||||
|
@ -10032,15 +10150,15 @@ async function process3(res, inputSize8, outputShape, config3) {
|
|||
return results;
|
||||
}
|
||||
async function predict10(image24, config3) {
|
||||
if (skipped7 < (config3.object.skipFrames || 0) && config3.skipFrame && last3.length > 0) {
|
||||
skipped7++;
|
||||
if (skipped8 < (config3.object.skipFrames || 0) && config3.skipFrame && last3.length > 0) {
|
||||
skipped8++;
|
||||
return last3;
|
||||
}
|
||||
skipped7 = 0;
|
||||
skipped8 = 0;
|
||||
if (!env2.kernels.includes("mod") || !env2.kernels.includes("sparsetodense"))
|
||||
return last3;
|
||||
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 norm = tfjs_esm_exports.div(resize, 255);
|
||||
const transpose = norm.transpose([0, 3, 1, 2]);
|
||||
|
@ -10050,7 +10168,7 @@ async function predict10(image24, config3) {
|
|||
if (config3.object.enabled)
|
||||
objectT = await model9.predict(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;
|
||||
resolve(obj);
|
||||
});
|
||||
|
@ -10060,7 +10178,7 @@ async function predict10(image24, config3) {
|
|||
var model10;
|
||||
var inputSize7 = 0;
|
||||
var last4 = [];
|
||||
var skipped8 = Number.MAX_SAFE_INTEGER;
|
||||
var skipped9 = Number.MAX_SAFE_INTEGER;
|
||||
async function load11(config3) {
|
||||
if (env2.initial)
|
||||
model10 = null;
|
||||
|
@ -10124,19 +10242,19 @@ async function process4(res, outputShape, config3) {
|
|||
return results;
|
||||
}
|
||||
async function predict11(input, config3) {
|
||||
if (skipped8 < (config3.object.skipFrames || 0) && config3.skipFrame && last4.length > 0) {
|
||||
skipped8++;
|
||||
if (skipped9 < (config3.object.skipFrames || 0) && config3.skipFrame && last4.length > 0) {
|
||||
skipped9++;
|
||||
return last4;
|
||||
}
|
||||
skipped8 = 0;
|
||||
skipped9 = 0;
|
||||
if (!env2.kernels.includes("mod") || !env2.kernels.includes("sparsetodense"))
|
||||
return last4;
|
||||
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 objectT = config3.object.enabled ? model10 == null ? void 0 : model10.execute(resize, ["tower_0/detections"]) : null;
|
||||
tfjs_esm_exports.dispose(resize);
|
||||
const obj = await process4(objectT, outputSize3, config3);
|
||||
const obj = await process4(objectT, outputSize2, config3);
|
||||
last4 = obj;
|
||||
resolve(obj);
|
||||
});
|
||||
|
@ -10227,7 +10345,7 @@ async function process5(input, background, config3) {
|
|||
|
||||
// src/gear/gear-agegenderrace.ts
|
||||
var model12;
|
||||
var skipped9 = Number.MAX_SAFE_INTEGER;
|
||||
var skipped10 = Number.MAX_SAFE_INTEGER;
|
||||
async function load13(config3) {
|
||||
if (env2.initial)
|
||||
model12 = null;
|
||||
|
@ -10407,7 +10525,6 @@ async function register(instance) {
|
|||
log("error: humangl:", e.type);
|
||||
log("possible browser memory leak using webgl");
|
||||
instance.emit("error");
|
||||
throw new Error("browser webgl error");
|
||||
});
|
||||
config2.canvas.addEventListener("webglcontextrestored", (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)}`);
|
||||
}
|
||||
}
|
||||
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("WEBGL_PACK_DEPTHWISECONV", false);
|
||||
tfjs_esm_exports.ENV.set("WEBGL_USE_SHAPES_UNIFORMS", true);
|
||||
}
|
||||
tfjs_esm_exports.enableProdMode();
|
||||
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]);
|
||||
}
|
||||
}
|
||||
if (localOptions.drawPoints) {
|
||||
if (localOptions.drawPoints && result[i].keypoints) {
|
||||
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;
|
||||
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;
|
||||
if (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.fillText(`${pt.part} ${Math.trunc(100 * pt.score)}%`, pt.position[0] + 4, pt.position[1] + 4);
|
||||
}
|
||||
}
|
||||
if (localOptions.drawPolygons && result[i].keypoints && result[i].annotations) {
|
||||
for (const part of Object.values(result[i].annotations)) {
|
||||
for (const connected4 of part)
|
||||
curves(ctx, connected4, localOptions);
|
||||
}
|
||||
if (localOptions.drawPolygons && result[i].keypoints) {
|
||||
let part;
|
||||
const points = [];
|
||||
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);
|
||||
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)
|
||||
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 annotations3 = {};
|
||||
const annotations2 = {};
|
||||
if (Object.keys(bufferedResult.hand[i].annotations).length !== Object.keys(newResult.hand[i].annotations).length)
|
||||
bufferedResult.hand[i].annotations = newResult.hand[i].annotations;
|
||||
if (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) {
|
||||
|
|
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,
|
||||
minConfidence: 0.2,
|
||||
skipFrames: 1
|
||||
skipFrames: 5
|
||||
},
|
||||
hand: {
|
||||
enabled: true,
|
||||
|
@ -1200,6 +1200,8 @@ function process2(input, config3) {
|
|||
tempCanvas.height = targetHeight;
|
||||
const tempCtx = tempCanvas.getContext("2d");
|
||||
tempCtx == null ? void 0 : tempCtx.drawImage(outCanvas, 0, 0);
|
||||
console.log("PIXELS", tempCanvas);
|
||||
pixels = tf2.browser && env2.browser ? tf2.browser.fromPixels(tempCanvas) : null;
|
||||
try {
|
||||
pixels = tf2.browser && env2.browser ? tf2.browser.fromPixels(tempCanvas) : null;
|
||||
} catch (err) {
|
||||
|
@ -8780,11 +8782,11 @@ var HandPipeline = class {
|
|||
const rawCoords = await keypointsReshaped.array();
|
||||
tf12.dispose(keypoints3);
|
||||
tf12.dispose(keypointsReshaped);
|
||||
const coords4 = this.transformRawCoords(rawCoords, newBox, angle, rotationMatrix);
|
||||
const nextBoundingBox = this.getBoxForHandLandmarks(coords4);
|
||||
const coords7 = this.transformRawCoords(rawCoords, newBox, angle, rotationMatrix);
|
||||
const nextBoundingBox = this.getBoxForHandLandmarks(coords7);
|
||||
this.storedBoxes[i] = { ...nextBoundingBox, confidence };
|
||||
const result = {
|
||||
landmarks: coords4,
|
||||
landmarks: coords7,
|
||||
confidence,
|
||||
boxConfidence: currentBox.confidence,
|
||||
fingerConfidence: confidence,
|
||||
|
@ -9211,10 +9213,10 @@ async function predict5(input, config3) {
|
|||
return [];
|
||||
const hands = [];
|
||||
for (let i = 0; i < predictions.length; i++) {
|
||||
const annotations3 = {};
|
||||
const annotations2 = {};
|
||||
if (predictions[i].landmarks) {
|
||||
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;
|
||||
|
@ -9258,7 +9260,7 @@ async function predict5(input, config3) {
|
|||
box: box4,
|
||||
boxRaw: boxRaw2,
|
||||
keypoints: keypoints3,
|
||||
annotations: annotations3,
|
||||
annotations: annotations2,
|
||||
landmarks
|
||||
});
|
||||
}
|
||||
|
@ -9297,9 +9299,9 @@ async function load7(config3) {
|
|||
}
|
||||
|
||||
// src/util/box.ts
|
||||
function scale(keypoints3, boxScaleFact2, outputSize3) {
|
||||
const coords4 = [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])];
|
||||
function scale(keypoints3, boxScaleFact2, outputSize2) {
|
||||
const coords7 = [keypoints3.map((pt) => pt[0]), keypoints3.map((pt) => pt[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 diff = Math.max(center[0] - maxmin[1], center[1] - maxmin[3], -center[0] + maxmin[0], -center[1] + maxmin[2]) * boxScaleFact2;
|
||||
const box4 = [
|
||||
|
@ -9309,10 +9311,10 @@ function scale(keypoints3, boxScaleFact2, outputSize3) {
|
|||
Math.trunc(2 * diff)
|
||||
];
|
||||
const boxRaw2 = [
|
||||
box4[0] / outputSize3[0],
|
||||
box4[1] / outputSize3[1],
|
||||
box4[2] / outputSize3[0],
|
||||
box4[3] / outputSize3[1]
|
||||
box4[0] / outputSize2[0],
|
||||
box4[1] / outputSize2[1],
|
||||
box4[2] / outputSize2[0],
|
||||
box4[3] / outputSize2[1]
|
||||
];
|
||||
const yxBox = [
|
||||
boxRaw2[1],
|
||||
|
@ -9502,10 +9504,10 @@ async function predict6(input, config3) {
|
|||
}
|
||||
|
||||
// src/body/blazepose.ts
|
||||
var tf15 = __toModule(require_tfjs_esm());
|
||||
var tf15 = __toModule(require("@tensorflow/tfjs"));
|
||||
|
||||
// src/body/annotations.ts
|
||||
var full = [
|
||||
// src/body/blazeposecoords.ts
|
||||
var kpt = [
|
||||
"nose",
|
||||
"leftEyeInside",
|
||||
"leftEye",
|
||||
|
@ -9539,58 +9541,38 @@ var full = [
|
|||
"rightHeel",
|
||||
"leftFoot",
|
||||
"rightFoot",
|
||||
"midHip",
|
||||
"forehead",
|
||||
"bodyCenter",
|
||||
"bodyTop",
|
||||
"leftThumb",
|
||||
"leftHand",
|
||||
"rightThumb",
|
||||
"rightHand"
|
||||
];
|
||||
var upper = [
|
||||
"nose",
|
||||
"leftEyeInside",
|
||||
"leftEye",
|
||||
"leftEyeOutside",
|
||||
"rightEyeInside",
|
||||
"rightEye",
|
||||
"rightEyeOutside",
|
||||
"leftEar",
|
||||
"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"
|
||||
];
|
||||
var 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: []
|
||||
};
|
||||
|
||||
// src/body/blazepose.ts
|
||||
var env3 = { initial: true };
|
||||
var models2 = [null, null];
|
||||
var outputNodes = ["ld_3d", "activation_segmentation", "activation_heatmap", "world_3d", "output_poseflag"];
|
||||
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) {
|
||||
var _a;
|
||||
if (env2.initial)
|
||||
var _a, _b;
|
||||
if (env3.initial)
|
||||
models2[0] = null;
|
||||
if (!models2[0]) {
|
||||
models2[0] = await tf15.loadGraphModel(join(config3.modelBasePath, ((_a = config3.body.detector) == null ? void 0 : _a.modelPath) || ""));
|
||||
if (!models2[0] && ((_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"]);
|
||||
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;
|
||||
|
@ -9598,18 +9580,23 @@ async function loadDetect2(config3) {
|
|||
log("load model failed:", config3.object.modelPath);
|
||||
else if (config3.debug)
|
||||
log("load model:", models2[0]["modelUrl"]);
|
||||
} else if (config3.debug)
|
||||
} else if (config3.debug && models2[0])
|
||||
log("cached model:", models2[0]["modelUrl"]);
|
||||
return models2[0];
|
||||
}
|
||||
async function loadPose(config3) {
|
||||
if (env2.initial)
|
||||
var _a;
|
||||
if (env3.initial)
|
||||
models2[1] = null;
|
||||
if (!models2[1]) {
|
||||
models2[1] = await tf15.loadGraphModel(join(config3.modelBasePath, config3.body.modelPath || ""));
|
||||
const inputs = Object.values(models2[1].modelSignature["inputs"]);
|
||||
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;
|
||||
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"])
|
||||
log("load model failed:", config3.object.modelPath);
|
||||
else if (config3.debug)
|
||||
|
@ -9618,64 +9605,128 @@ async function loadPose(config3) {
|
|||
log("cached model:", models2[1]["modelUrl"]);
|
||||
return models2[1];
|
||||
}
|
||||
async function detectParts(input, config3) {
|
||||
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
|
||||
});
|
||||
}
|
||||
}
|
||||
function calculateBoxes(keypoints3, outputSize2) {
|
||||
const x = keypoints3.map((a) => a.position[0]);
|
||||
const y = keypoints3.map((a) => a.position[1]);
|
||||
const box4 = [
|
||||
Math.min(...x),
|
||||
Math.min(...y),
|
||||
Math.max(...x) - Math.min(...x),
|
||||
Math.max(...y) - Math.min(...x)
|
||||
const keypointsBox = [Math.min(...x), Math.min(...y), Math.max(...x) - Math.min(...x), Math.max(...y) - Math.min(...y)];
|
||||
const keypointsBoxRaw = [keypointsBox[0] / outputSize2[0], keypointsBox[1] / outputSize2[1], keypointsBox[2] / outputSize2[0], keypointsBox[3] / outputSize2[1]];
|
||||
return { keypointsBox, keypointsBoxRaw };
|
||||
}
|
||||
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];
|
||||
const score2 = keypoints3.reduce((prev, curr) => curr.score > prev ? curr.score : prev, 0);
|
||||
t.pad = tf15.pad(input, padding);
|
||||
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]));
|
||||
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) {
|
||||
outputSize2 = [input.shape[2] || 0, input.shape[1] || 0];
|
||||
const bodies = [];
|
||||
const body4 = await detectParts(input, config3);
|
||||
bodies.push(body4);
|
||||
return bodies;
|
||||
const outputSize2 = [input.shape[2] || 0, input.shape[1] || 0];
|
||||
if (skipped5 < (config3.body.skipFrames || 0) && config3.skipFrame) {
|
||||
skipped5++;
|
||||
} else {
|
||||
cache2 = await detectParts(input, config3, outputSize2);
|
||||
skipped5 = 0;
|
||||
}
|
||||
if (cache2)
|
||||
return [cache2];
|
||||
return [];
|
||||
}
|
||||
|
||||
// src/body/efficientpose.ts
|
||||
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 keypoints = [];
|
||||
var box3 = [0, 0, 0, 0];
|
||||
var boxRaw = [0, 0, 0, 0];
|
||||
var score = 0;
|
||||
var skipped5 = Number.MAX_SAFE_INTEGER;
|
||||
var bodyParts = ["head", "neck", "rightShoulder", "rightElbow", "rightWrist", "chest", "leftShoulder", "leftElbow", "leftWrist", "pelvis", "rightHip", "rightKnee", "rightAnkle", "leftHip", "leftKnee", "leftAnkle"];
|
||||
var skipped6 = Number.MAX_SAFE_INTEGER;
|
||||
async function load8(config3) {
|
||||
if (env2.initial)
|
||||
model7 = null;
|
||||
|
@ -9696,9 +9747,9 @@ function max2d(inputs, minScore) {
|
|||
const reshaped = tf16.reshape(inputs, [height * width]);
|
||||
const newScore = tf16.max(reshaped, 0).dataSync()[0];
|
||||
if (newScore > minScore) {
|
||||
const coords4 = tf16.argMax(reshaped, 0);
|
||||
const x = mod(coords4, width).dataSync()[0];
|
||||
const y = tf16.div(coords4, tf16.scalar(width, "int32")).dataSync()[0];
|
||||
const coordinates = tf16.argMax(reshaped, 0);
|
||||
const x = mod(coordinates, width).dataSync()[0];
|
||||
const y = tf16.div(coordinates, tf16.scalar(width, "int32")).dataSync()[0];
|
||||
return [x, y, newScore];
|
||||
}
|
||||
return [0, 0, newScore];
|
||||
|
@ -9706,11 +9757,11 @@ function max2d(inputs, minScore) {
|
|||
}
|
||||
async function predict8(image24, config3) {
|
||||
var _a;
|
||||
if (skipped5 < (((_a = config3.body) == null ? void 0 : _a.skipFrames) || 0) && config3.skipFrame && Object.keys(keypoints).length > 0) {
|
||||
skipped5++;
|
||||
return [{ id: 0, score, box: box3, boxRaw, keypoints }];
|
||||
if (skipped6 < (((_a = config3.body) == null ? void 0 : _a.skipFrames) || 0) && config3.skipFrame && Object.keys(keypoints).length > 0) {
|
||||
skipped6++;
|
||||
return [{ id: 0, score, box: box3, boxRaw, keypoints, annotations: {} }];
|
||||
}
|
||||
skipped5 = 0;
|
||||
skipped6 = 0;
|
||||
return new Promise(async (resolve) => {
|
||||
var _a2;
|
||||
const tensor3 = tf16.tidy(() => {
|
||||
|
@ -9736,7 +9787,7 @@ async function predict8(image24, config3) {
|
|||
if (score > (((_a2 = config3.body) == null ? void 0 : _a2.minConfidence) || 0)) {
|
||||
keypoints.push({
|
||||
score: Math.round(100 * partScore) / 100,
|
||||
part: bodyParts[id],
|
||||
part: kpt2[id],
|
||||
positionRaw: [
|
||||
x2 / model7.inputs[0].shape[2],
|
||||
y2 / model7.inputs[0].shape[1]
|
||||
|
@ -9767,18 +9818,59 @@ async function predict8(image24, config3) {
|
|||
Math.max(...xRaw) - Math.min(...xRaw),
|
||||
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
|
||||
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 inputSize6 = 0;
|
||||
var cachedBoxes = [];
|
||||
var skipped6 = Number.MAX_SAFE_INTEGER;
|
||||
var skipped7 = Number.MAX_SAFE_INTEGER;
|
||||
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) {
|
||||
if (env2.initial)
|
||||
model8 = null;
|
||||
|
@ -9816,19 +9908,19 @@ function createBox2(points) {
|
|||
return [box4, boxRaw2];
|
||||
}
|
||||
async function parseSinglePose(res, config3, image24, inputBox) {
|
||||
const kpt = res[0][0];
|
||||
const kpt4 = res[0][0];
|
||||
keypoints2.length = 0;
|
||||
let score2 = 0;
|
||||
for (let id = 0; id < kpt.length; id++) {
|
||||
score2 = kpt[id][2];
|
||||
for (let id = 0; id < kpt4.length; id++) {
|
||||
score2 = kpt4[id][2];
|
||||
if (score2 > config3.body.minConfidence) {
|
||||
const positionRaw = [
|
||||
(inputBox[3] - inputBox[1]) * kpt[id][1] + inputBox[1],
|
||||
(inputBox[2] - inputBox[0]) * kpt[id][0] + inputBox[0]
|
||||
(inputBox[3] - inputBox[1]) * kpt4[id][1] + inputBox[1],
|
||||
(inputBox[2] - inputBox[0]) * kpt4[id][0] + inputBox[0]
|
||||
];
|
||||
keypoints2.push({
|
||||
score: Math.round(100 * score2) / 100,
|
||||
part: bodyParts2[id],
|
||||
part: kpt3[id],
|
||||
positionRaw,
|
||||
position: [
|
||||
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);
|
||||
const bodies = [];
|
||||
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;
|
||||
}
|
||||
async function parseMultiPose(res, config3, image24, inputBox) {
|
||||
const bodies = [];
|
||||
for (let id = 0; id < res[0].length; id++) {
|
||||
const kpt = res[0][id];
|
||||
const totalScore = Math.round(100 * kpt[51 + 4]) / 100;
|
||||
const kpt4 = res[0][id];
|
||||
const totalScore = Math.round(100 * kpt4[51 + 4]) / 100;
|
||||
if (totalScore > config3.body.minConfidence) {
|
||||
keypoints2.length = 0;
|
||||
for (let i = 0; i < 17; i++) {
|
||||
const score2 = kpt[3 * i + 2];
|
||||
const score2 = kpt4[3 * i + 2];
|
||||
if (score2 > config3.body.minConfidence) {
|
||||
const positionRaw = [
|
||||
(inputBox[3] - inputBox[1]) * kpt[3 * i + 1] + inputBox[1],
|
||||
(inputBox[2] - inputBox[0]) * kpt[3 * i + 0] + inputBox[0]
|
||||
(inputBox[3] - inputBox[1]) * kpt4[3 * i + 1] + inputBox[1],
|
||||
(inputBox[2] - inputBox[0]) * kpt4[3 * i + 0] + inputBox[0]
|
||||
];
|
||||
keypoints2.push({
|
||||
part: bodyParts2[i],
|
||||
part: kpt3[i],
|
||||
score: Math.round(100 * score2) / 100,
|
||||
positionRaw,
|
||||
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 = [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))];
|
||||
bodies.push({ id, score: totalScore, boxRaw: boxRaw2, box: box4, keypoints: [...keypoints2] });
|
||||
const [box4, boxRaw2] = createBox2(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, score: totalScore, boxRaw: boxRaw2, box: box4, keypoints: [...keypoints2], annotations: annotations2 });
|
||||
}
|
||||
}
|
||||
bodies.sort((a, b) => b.score - a.score);
|
||||
|
@ -9886,7 +9999,7 @@ async function predict9(input, config3) {
|
|||
let bodies = [];
|
||||
if (!config3.skipFrame)
|
||||
cachedBoxes.length = 0;
|
||||
skipped6++;
|
||||
skipped7++;
|
||||
for (let i = 0; i < cachedBoxes.length; i++) {
|
||||
t.crop = tf17.image.cropAndResize(input, [cachedBoxes[i]], [0], [inputSize6, inputSize6], "bilinear");
|
||||
t.cast = tf17.cast(t.crop, "int32");
|
||||
|
@ -9896,7 +10009,7 @@ async function predict9(input, config3) {
|
|||
bodies = bodies.concat(newBodies);
|
||||
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.cast = tf17.cast(t.resized, "int32");
|
||||
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]);
|
||||
Object.keys(t).forEach((tensor3) => tf17.dispose(t[tensor3]));
|
||||
cachedBoxes.length = 0;
|
||||
skipped6 = 0;
|
||||
skipped7 = 0;
|
||||
}
|
||||
if (config3.skipFrame) {
|
||||
cachedBoxes.length = 0;
|
||||
for (let i = 0; i < bodies.length; i++) {
|
||||
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]]);
|
||||
cachedBoxes.push([...newBox.yxBox]);
|
||||
}
|
||||
|
@ -10010,7 +10123,7 @@ var labels = [
|
|||
// src/object/nanodet.ts
|
||||
var model9;
|
||||
var last3 = [];
|
||||
var skipped7 = Number.MAX_SAFE_INTEGER;
|
||||
var skipped8 = Number.MAX_SAFE_INTEGER;
|
||||
var scaleBox = 2.5;
|
||||
async function load10(config3) {
|
||||
if (!model9 || env2.initial) {
|
||||
|
@ -10089,15 +10202,15 @@ async function process3(res, inputSize8, outputShape, config3) {
|
|||
return results;
|
||||
}
|
||||
async function predict10(image24, config3) {
|
||||
if (skipped7 < (config3.object.skipFrames || 0) && config3.skipFrame && last3.length > 0) {
|
||||
skipped7++;
|
||||
if (skipped8 < (config3.object.skipFrames || 0) && config3.skipFrame && last3.length > 0) {
|
||||
skipped8++;
|
||||
return last3;
|
||||
}
|
||||
skipped7 = 0;
|
||||
skipped8 = 0;
|
||||
if (!env2.kernels.includes("mod") || !env2.kernels.includes("sparsetodense"))
|
||||
return last3;
|
||||
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 norm = tf18.div(resize, 255);
|
||||
const transpose = norm.transpose([0, 3, 1, 2]);
|
||||
|
@ -10107,7 +10220,7 @@ async function predict10(image24, config3) {
|
|||
if (config3.object.enabled)
|
||||
objectT = await model9.predict(transpose);
|
||||
tf18.dispose(transpose);
|
||||
const obj = await process3(objectT, model9.inputSize, outputSize3, config3);
|
||||
const obj = await process3(objectT, model9.inputSize, outputSize2, config3);
|
||||
last3 = obj;
|
||||
resolve(obj);
|
||||
});
|
||||
|
@ -10118,7 +10231,7 @@ var tf19 = __toModule(require_tfjs_esm());
|
|||
var model10;
|
||||
var inputSize7 = 0;
|
||||
var last4 = [];
|
||||
var skipped8 = Number.MAX_SAFE_INTEGER;
|
||||
var skipped9 = Number.MAX_SAFE_INTEGER;
|
||||
async function load11(config3) {
|
||||
if (env2.initial)
|
||||
model10 = null;
|
||||
|
@ -10182,19 +10295,19 @@ async function process4(res, outputShape, config3) {
|
|||
return results;
|
||||
}
|
||||
async function predict11(input, config3) {
|
||||
if (skipped8 < (config3.object.skipFrames || 0) && config3.skipFrame && last4.length > 0) {
|
||||
skipped8++;
|
||||
if (skipped9 < (config3.object.skipFrames || 0) && config3.skipFrame && last4.length > 0) {
|
||||
skipped9++;
|
||||
return last4;
|
||||
}
|
||||
skipped8 = 0;
|
||||
skipped9 = 0;
|
||||
if (!env2.kernels.includes("mod") || !env2.kernels.includes("sparsetodense"))
|
||||
return last4;
|
||||
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 objectT = config3.object.enabled ? model10 == null ? void 0 : model10.execute(resize, ["tower_0/detections"]) : null;
|
||||
tf19.dispose(resize);
|
||||
const obj = await process4(objectT, outputSize3, config3);
|
||||
const obj = await process4(objectT, outputSize2, config3);
|
||||
last4 = obj;
|
||||
resolve(obj);
|
||||
});
|
||||
|
@ -10287,7 +10400,7 @@ async function process5(input, background, config3) {
|
|||
// src/gear/gear-agegenderrace.ts
|
||||
var tf21 = __toModule(require_tfjs_esm());
|
||||
var model12;
|
||||
var skipped9 = Number.MAX_SAFE_INTEGER;
|
||||
var skipped10 = Number.MAX_SAFE_INTEGER;
|
||||
async function load13(config3) {
|
||||
if (env2.initial)
|
||||
model12 = null;
|
||||
|
@ -10467,7 +10580,6 @@ async function register(instance) {
|
|||
log("error: humangl:", e.type);
|
||||
log("possible browser memory leak using webgl");
|
||||
instance.emit("error");
|
||||
throw new Error("browser webgl error");
|
||||
});
|
||||
config2.canvas.addEventListener("webglcontextrestored", (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)}`);
|
||||
}
|
||||
}
|
||||
if (tf23.getBackend() === "humangl") {
|
||||
if (tf23.getBackend() === "webgpu") {
|
||||
tf23.ENV.set("WEBGPU_USE_GLSL", true);
|
||||
tf23.ENV.set("WEBGL_PACK_DEPTHWISECONV", false);
|
||||
tf23.ENV.set("WEBGL_USE_SHAPES_UNIFORMS", true);
|
||||
}
|
||||
tf23.enableProdMode();
|
||||
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]);
|
||||
}
|
||||
}
|
||||
if (localOptions.drawPoints) {
|
||||
if (localOptions.drawPoints && result[i].keypoints) {
|
||||
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;
|
||||
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;
|
||||
if (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.fillText(`${pt.part} ${Math.trunc(100 * pt.score)}%`, pt.position[0] + 4, pt.position[1] + 4);
|
||||
}
|
||||
}
|
||||
if (localOptions.drawPolygons && result[i].keypoints && result[i].annotations) {
|
||||
for (const part of Object.values(result[i].annotations)) {
|
||||
for (const connected4 of part)
|
||||
curves(ctx, connected4, localOptions);
|
||||
}
|
||||
if (localOptions.drawPolygons && result[i].keypoints) {
|
||||
let part;
|
||||
const points = [];
|
||||
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);
|
||||
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)
|
||||
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 annotations3 = {};
|
||||
const annotations2 = {};
|
||||
if (Object.keys(bufferedResult.hand[i].annotations).length !== Object.keys(newResult.hand[i].annotations).length)
|
||||
bufferedResult.hand[i].annotations = newResult.hand[i].annotations;
|
||||
if (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) {
|
||||
|
|
|
@ -217,7 +217,7 @@ var config = {
|
|||
},
|
||||
maxDetected: -1,
|
||||
minConfidence: 0.2,
|
||||
skipFrames: 1
|
||||
skipFrames: 5
|
||||
},
|
||||
hand: {
|
||||
enabled: true,
|
||||
|
@ -1201,6 +1201,8 @@ function process2(input, config3) {
|
|||
tempCanvas.height = targetHeight;
|
||||
const tempCtx = tempCanvas.getContext("2d");
|
||||
tempCtx == null ? void 0 : tempCtx.drawImage(outCanvas, 0, 0);
|
||||
console.log("PIXELS", tempCanvas);
|
||||
pixels = tf2.browser && env2.browser ? tf2.browser.fromPixels(tempCanvas) : null;
|
||||
try {
|
||||
pixels = tf2.browser && env2.browser ? tf2.browser.fromPixels(tempCanvas) : null;
|
||||
} catch (err) {
|
||||
|
@ -8781,11 +8783,11 @@ var HandPipeline = class {
|
|||
const rawCoords = await keypointsReshaped.array();
|
||||
tf12.dispose(keypoints3);
|
||||
tf12.dispose(keypointsReshaped);
|
||||
const coords4 = this.transformRawCoords(rawCoords, newBox, angle, rotationMatrix);
|
||||
const nextBoundingBox = this.getBoxForHandLandmarks(coords4);
|
||||
const coords7 = this.transformRawCoords(rawCoords, newBox, angle, rotationMatrix);
|
||||
const nextBoundingBox = this.getBoxForHandLandmarks(coords7);
|
||||
this.storedBoxes[i] = { ...nextBoundingBox, confidence };
|
||||
const result = {
|
||||
landmarks: coords4,
|
||||
landmarks: coords7,
|
||||
confidence,
|
||||
boxConfidence: currentBox.confidence,
|
||||
fingerConfidence: confidence,
|
||||
|
@ -9212,10 +9214,10 @@ async function predict5(input, config3) {
|
|||
return [];
|
||||
const hands = [];
|
||||
for (let i = 0; i < predictions.length; i++) {
|
||||
const annotations3 = {};
|
||||
const annotations2 = {};
|
||||
if (predictions[i].landmarks) {
|
||||
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;
|
||||
|
@ -9259,7 +9261,7 @@ async function predict5(input, config3) {
|
|||
box: box4,
|
||||
boxRaw: boxRaw2,
|
||||
keypoints: keypoints3,
|
||||
annotations: annotations3,
|
||||
annotations: annotations2,
|
||||
landmarks
|
||||
});
|
||||
}
|
||||
|
@ -9298,9 +9300,9 @@ async function load7(config3) {
|
|||
}
|
||||
|
||||
// src/util/box.ts
|
||||
function scale(keypoints3, boxScaleFact2, outputSize3) {
|
||||
const coords4 = [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])];
|
||||
function scale(keypoints3, boxScaleFact2, outputSize2) {
|
||||
const coords7 = [keypoints3.map((pt) => pt[0]), keypoints3.map((pt) => pt[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 diff = Math.max(center[0] - maxmin[1], center[1] - maxmin[3], -center[0] + maxmin[0], -center[1] + maxmin[2]) * boxScaleFact2;
|
||||
const box4 = [
|
||||
|
@ -9310,10 +9312,10 @@ function scale(keypoints3, boxScaleFact2, outputSize3) {
|
|||
Math.trunc(2 * diff)
|
||||
];
|
||||
const boxRaw2 = [
|
||||
box4[0] / outputSize3[0],
|
||||
box4[1] / outputSize3[1],
|
||||
box4[2] / outputSize3[0],
|
||||
box4[3] / outputSize3[1]
|
||||
box4[0] / outputSize2[0],
|
||||
box4[1] / outputSize2[1],
|
||||
box4[2] / outputSize2[0],
|
||||
box4[3] / outputSize2[1]
|
||||
];
|
||||
const yxBox = [
|
||||
boxRaw2[1],
|
||||
|
@ -9503,10 +9505,10 @@ async function predict6(input, config3) {
|
|||
}
|
||||
|
||||
// src/body/blazepose.ts
|
||||
var tf15 = __toModule(require_tfjs_esm());
|
||||
var tf15 = __toModule(require("@tensorflow/tfjs"));
|
||||
|
||||
// src/body/annotations.ts
|
||||
var full = [
|
||||
// src/body/blazeposecoords.ts
|
||||
var kpt = [
|
||||
"nose",
|
||||
"leftEyeInside",
|
||||
"leftEye",
|
||||
|
@ -9540,58 +9542,38 @@ var full = [
|
|||
"rightHeel",
|
||||
"leftFoot",
|
||||
"rightFoot",
|
||||
"midHip",
|
||||
"forehead",
|
||||
"bodyCenter",
|
||||
"bodyTop",
|
||||
"leftThumb",
|
||||
"leftHand",
|
||||
"rightThumb",
|
||||
"rightHand"
|
||||
];
|
||||
var upper = [
|
||||
"nose",
|
||||
"leftEyeInside",
|
||||
"leftEye",
|
||||
"leftEyeOutside",
|
||||
"rightEyeInside",
|
||||
"rightEye",
|
||||
"rightEyeOutside",
|
||||
"leftEar",
|
||||
"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"
|
||||
];
|
||||
var 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: []
|
||||
};
|
||||
|
||||
// src/body/blazepose.ts
|
||||
var env3 = { initial: true };
|
||||
var models2 = [null, null];
|
||||
var outputNodes = ["ld_3d", "activation_segmentation", "activation_heatmap", "world_3d", "output_poseflag"];
|
||||
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) {
|
||||
var _a;
|
||||
if (env2.initial)
|
||||
var _a, _b;
|
||||
if (env3.initial)
|
||||
models2[0] = null;
|
||||
if (!models2[0]) {
|
||||
models2[0] = await tf15.loadGraphModel(join(config3.modelBasePath, ((_a = config3.body.detector) == null ? void 0 : _a.modelPath) || ""));
|
||||
if (!models2[0] && ((_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"]);
|
||||
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;
|
||||
|
@ -9599,18 +9581,23 @@ async function loadDetect2(config3) {
|
|||
log("load model failed:", config3.object.modelPath);
|
||||
else if (config3.debug)
|
||||
log("load model:", models2[0]["modelUrl"]);
|
||||
} else if (config3.debug)
|
||||
} else if (config3.debug && models2[0])
|
||||
log("cached model:", models2[0]["modelUrl"]);
|
||||
return models2[0];
|
||||
}
|
||||
async function loadPose(config3) {
|
||||
if (env2.initial)
|
||||
var _a;
|
||||
if (env3.initial)
|
||||
models2[1] = null;
|
||||
if (!models2[1]) {
|
||||
models2[1] = await tf15.loadGraphModel(join(config3.modelBasePath, config3.body.modelPath || ""));
|
||||
const inputs = Object.values(models2[1].modelSignature["inputs"]);
|
||||
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;
|
||||
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"])
|
||||
log("load model failed:", config3.object.modelPath);
|
||||
else if (config3.debug)
|
||||
|
@ -9619,64 +9606,128 @@ async function loadPose(config3) {
|
|||
log("cached model:", models2[1]["modelUrl"]);
|
||||
return models2[1];
|
||||
}
|
||||
async function detectParts(input, config3) {
|
||||
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
|
||||
});
|
||||
}
|
||||
}
|
||||
function calculateBoxes(keypoints3, outputSize2) {
|
||||
const x = keypoints3.map((a) => a.position[0]);
|
||||
const y = keypoints3.map((a) => a.position[1]);
|
||||
const box4 = [
|
||||
Math.min(...x),
|
||||
Math.min(...y),
|
||||
Math.max(...x) - Math.min(...x),
|
||||
Math.max(...y) - Math.min(...x)
|
||||
const keypointsBox = [Math.min(...x), Math.min(...y), Math.max(...x) - Math.min(...x), Math.max(...y) - Math.min(...y)];
|
||||
const keypointsBoxRaw = [keypointsBox[0] / outputSize2[0], keypointsBox[1] / outputSize2[1], keypointsBox[2] / outputSize2[0], keypointsBox[3] / outputSize2[1]];
|
||||
return { keypointsBox, keypointsBoxRaw };
|
||||
}
|
||||
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];
|
||||
const score2 = keypoints3.reduce((prev, curr) => curr.score > prev ? curr.score : prev, 0);
|
||||
t.pad = tf15.pad(input, padding);
|
||||
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]));
|
||||
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) {
|
||||
outputSize2 = [input.shape[2] || 0, input.shape[1] || 0];
|
||||
const bodies = [];
|
||||
const body4 = await detectParts(input, config3);
|
||||
bodies.push(body4);
|
||||
return bodies;
|
||||
const outputSize2 = [input.shape[2] || 0, input.shape[1] || 0];
|
||||
if (skipped5 < (config3.body.skipFrames || 0) && config3.skipFrame) {
|
||||
skipped5++;
|
||||
} else {
|
||||
cache2 = await detectParts(input, config3, outputSize2);
|
||||
skipped5 = 0;
|
||||
}
|
||||
if (cache2)
|
||||
return [cache2];
|
||||
return [];
|
||||
}
|
||||
|
||||
// src/body/efficientpose.ts
|
||||
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 keypoints = [];
|
||||
var box3 = [0, 0, 0, 0];
|
||||
var boxRaw = [0, 0, 0, 0];
|
||||
var score = 0;
|
||||
var skipped5 = Number.MAX_SAFE_INTEGER;
|
||||
var bodyParts = ["head", "neck", "rightShoulder", "rightElbow", "rightWrist", "chest", "leftShoulder", "leftElbow", "leftWrist", "pelvis", "rightHip", "rightKnee", "rightAnkle", "leftHip", "leftKnee", "leftAnkle"];
|
||||
var skipped6 = Number.MAX_SAFE_INTEGER;
|
||||
async function load8(config3) {
|
||||
if (env2.initial)
|
||||
model7 = null;
|
||||
|
@ -9697,9 +9748,9 @@ function max2d(inputs, minScore) {
|
|||
const reshaped = tf16.reshape(inputs, [height * width]);
|
||||
const newScore = tf16.max(reshaped, 0).dataSync()[0];
|
||||
if (newScore > minScore) {
|
||||
const coords4 = tf16.argMax(reshaped, 0);
|
||||
const x = mod(coords4, width).dataSync()[0];
|
||||
const y = tf16.div(coords4, tf16.scalar(width, "int32")).dataSync()[0];
|
||||
const coordinates = tf16.argMax(reshaped, 0);
|
||||
const x = mod(coordinates, width).dataSync()[0];
|
||||
const y = tf16.div(coordinates, tf16.scalar(width, "int32")).dataSync()[0];
|
||||
return [x, y, newScore];
|
||||
}
|
||||
return [0, 0, newScore];
|
||||
|
@ -9707,11 +9758,11 @@ function max2d(inputs, minScore) {
|
|||
}
|
||||
async function predict8(image24, config3) {
|
||||
var _a;
|
||||
if (skipped5 < (((_a = config3.body) == null ? void 0 : _a.skipFrames) || 0) && config3.skipFrame && Object.keys(keypoints).length > 0) {
|
||||
skipped5++;
|
||||
return [{ id: 0, score, box: box3, boxRaw, keypoints }];
|
||||
if (skipped6 < (((_a = config3.body) == null ? void 0 : _a.skipFrames) || 0) && config3.skipFrame && Object.keys(keypoints).length > 0) {
|
||||
skipped6++;
|
||||
return [{ id: 0, score, box: box3, boxRaw, keypoints, annotations: {} }];
|
||||
}
|
||||
skipped5 = 0;
|
||||
skipped6 = 0;
|
||||
return new Promise(async (resolve) => {
|
||||
var _a2;
|
||||
const tensor3 = tf16.tidy(() => {
|
||||
|
@ -9737,7 +9788,7 @@ async function predict8(image24, config3) {
|
|||
if (score > (((_a2 = config3.body) == null ? void 0 : _a2.minConfidence) || 0)) {
|
||||
keypoints.push({
|
||||
score: Math.round(100 * partScore) / 100,
|
||||
part: bodyParts[id],
|
||||
part: kpt2[id],
|
||||
positionRaw: [
|
||||
x2 / model7.inputs[0].shape[2],
|
||||
y2 / model7.inputs[0].shape[1]
|
||||
|
@ -9768,18 +9819,59 @@ async function predict8(image24, config3) {
|
|||
Math.max(...xRaw) - Math.min(...xRaw),
|
||||
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
|
||||
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 inputSize6 = 0;
|
||||
var cachedBoxes = [];
|
||||
var skipped6 = Number.MAX_SAFE_INTEGER;
|
||||
var skipped7 = Number.MAX_SAFE_INTEGER;
|
||||
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) {
|
||||
if (env2.initial)
|
||||
model8 = null;
|
||||
|
@ -9817,19 +9909,19 @@ function createBox2(points) {
|
|||
return [box4, boxRaw2];
|
||||
}
|
||||
async function parseSinglePose(res, config3, image24, inputBox) {
|
||||
const kpt = res[0][0];
|
||||
const kpt4 = res[0][0];
|
||||
keypoints2.length = 0;
|
||||
let score2 = 0;
|
||||
for (let id = 0; id < kpt.length; id++) {
|
||||
score2 = kpt[id][2];
|
||||
for (let id = 0; id < kpt4.length; id++) {
|
||||
score2 = kpt4[id][2];
|
||||
if (score2 > config3.body.minConfidence) {
|
||||
const positionRaw = [
|
||||
(inputBox[3] - inputBox[1]) * kpt[id][1] + inputBox[1],
|
||||
(inputBox[2] - inputBox[0]) * kpt[id][0] + inputBox[0]
|
||||
(inputBox[3] - inputBox[1]) * kpt4[id][1] + inputBox[1],
|
||||
(inputBox[2] - inputBox[0]) * kpt4[id][0] + inputBox[0]
|
||||
];
|
||||
keypoints2.push({
|
||||
score: Math.round(100 * score2) / 100,
|
||||
part: bodyParts2[id],
|
||||
part: kpt3[id],
|
||||
positionRaw,
|
||||
position: [
|
||||
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);
|
||||
const bodies = [];
|
||||
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;
|
||||
}
|
||||
async function parseMultiPose(res, config3, image24, inputBox) {
|
||||
const bodies = [];
|
||||
for (let id = 0; id < res[0].length; id++) {
|
||||
const kpt = res[0][id];
|
||||
const totalScore = Math.round(100 * kpt[51 + 4]) / 100;
|
||||
const kpt4 = res[0][id];
|
||||
const totalScore = Math.round(100 * kpt4[51 + 4]) / 100;
|
||||
if (totalScore > config3.body.minConfidence) {
|
||||
keypoints2.length = 0;
|
||||
for (let i = 0; i < 17; i++) {
|
||||
const score2 = kpt[3 * i + 2];
|
||||
const score2 = kpt4[3 * i + 2];
|
||||
if (score2 > config3.body.minConfidence) {
|
||||
const positionRaw = [
|
||||
(inputBox[3] - inputBox[1]) * kpt[3 * i + 1] + inputBox[1],
|
||||
(inputBox[2] - inputBox[0]) * kpt[3 * i + 0] + inputBox[0]
|
||||
(inputBox[3] - inputBox[1]) * kpt4[3 * i + 1] + inputBox[1],
|
||||
(inputBox[2] - inputBox[0]) * kpt4[3 * i + 0] + inputBox[0]
|
||||
];
|
||||
keypoints2.push({
|
||||
part: bodyParts2[i],
|
||||
part: kpt3[i],
|
||||
score: Math.round(100 * score2) / 100,
|
||||
positionRaw,
|
||||
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 = [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))];
|
||||
bodies.push({ id, score: totalScore, boxRaw: boxRaw2, box: box4, keypoints: [...keypoints2] });
|
||||
const [box4, boxRaw2] = createBox2(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, score: totalScore, boxRaw: boxRaw2, box: box4, keypoints: [...keypoints2], annotations: annotations2 });
|
||||
}
|
||||
}
|
||||
bodies.sort((a, b) => b.score - a.score);
|
||||
|
@ -9887,7 +10000,7 @@ async function predict9(input, config3) {
|
|||
let bodies = [];
|
||||
if (!config3.skipFrame)
|
||||
cachedBoxes.length = 0;
|
||||
skipped6++;
|
||||
skipped7++;
|
||||
for (let i = 0; i < cachedBoxes.length; i++) {
|
||||
t.crop = tf17.image.cropAndResize(input, [cachedBoxes[i]], [0], [inputSize6, inputSize6], "bilinear");
|
||||
t.cast = tf17.cast(t.crop, "int32");
|
||||
|
@ -9897,7 +10010,7 @@ async function predict9(input, config3) {
|
|||
bodies = bodies.concat(newBodies);
|
||||
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.cast = tf17.cast(t.resized, "int32");
|
||||
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]);
|
||||
Object.keys(t).forEach((tensor3) => tf17.dispose(t[tensor3]));
|
||||
cachedBoxes.length = 0;
|
||||
skipped6 = 0;
|
||||
skipped7 = 0;
|
||||
}
|
||||
if (config3.skipFrame) {
|
||||
cachedBoxes.length = 0;
|
||||
for (let i = 0; i < bodies.length; i++) {
|
||||
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]]);
|
||||
cachedBoxes.push([...newBox.yxBox]);
|
||||
}
|
||||
|
@ -10011,7 +10124,7 @@ var labels = [
|
|||
// src/object/nanodet.ts
|
||||
var model9;
|
||||
var last3 = [];
|
||||
var skipped7 = Number.MAX_SAFE_INTEGER;
|
||||
var skipped8 = Number.MAX_SAFE_INTEGER;
|
||||
var scaleBox = 2.5;
|
||||
async function load10(config3) {
|
||||
if (!model9 || env2.initial) {
|
||||
|
@ -10090,15 +10203,15 @@ async function process3(res, inputSize8, outputShape, config3) {
|
|||
return results;
|
||||
}
|
||||
async function predict10(image24, config3) {
|
||||
if (skipped7 < (config3.object.skipFrames || 0) && config3.skipFrame && last3.length > 0) {
|
||||
skipped7++;
|
||||
if (skipped8 < (config3.object.skipFrames || 0) && config3.skipFrame && last3.length > 0) {
|
||||
skipped8++;
|
||||
return last3;
|
||||
}
|
||||
skipped7 = 0;
|
||||
skipped8 = 0;
|
||||
if (!env2.kernels.includes("mod") || !env2.kernels.includes("sparsetodense"))
|
||||
return last3;
|
||||
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 norm = tf18.div(resize, 255);
|
||||
const transpose = norm.transpose([0, 3, 1, 2]);
|
||||
|
@ -10108,7 +10221,7 @@ async function predict10(image24, config3) {
|
|||
if (config3.object.enabled)
|
||||
objectT = await model9.predict(transpose);
|
||||
tf18.dispose(transpose);
|
||||
const obj = await process3(objectT, model9.inputSize, outputSize3, config3);
|
||||
const obj = await process3(objectT, model9.inputSize, outputSize2, config3);
|
||||
last3 = obj;
|
||||
resolve(obj);
|
||||
});
|
||||
|
@ -10119,7 +10232,7 @@ var tf19 = __toModule(require_tfjs_esm());
|
|||
var model10;
|
||||
var inputSize7 = 0;
|
||||
var last4 = [];
|
||||
var skipped8 = Number.MAX_SAFE_INTEGER;
|
||||
var skipped9 = Number.MAX_SAFE_INTEGER;
|
||||
async function load11(config3) {
|
||||
if (env2.initial)
|
||||
model10 = null;
|
||||
|
@ -10183,19 +10296,19 @@ async function process4(res, outputShape, config3) {
|
|||
return results;
|
||||
}
|
||||
async function predict11(input, config3) {
|
||||
if (skipped8 < (config3.object.skipFrames || 0) && config3.skipFrame && last4.length > 0) {
|
||||
skipped8++;
|
||||
if (skipped9 < (config3.object.skipFrames || 0) && config3.skipFrame && last4.length > 0) {
|
||||
skipped9++;
|
||||
return last4;
|
||||
}
|
||||
skipped8 = 0;
|
||||
skipped9 = 0;
|
||||
if (!env2.kernels.includes("mod") || !env2.kernels.includes("sparsetodense"))
|
||||
return last4;
|
||||
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 objectT = config3.object.enabled ? model10 == null ? void 0 : model10.execute(resize, ["tower_0/detections"]) : null;
|
||||
tf19.dispose(resize);
|
||||
const obj = await process4(objectT, outputSize3, config3);
|
||||
const obj = await process4(objectT, outputSize2, config3);
|
||||
last4 = obj;
|
||||
resolve(obj);
|
||||
});
|
||||
|
@ -10288,7 +10401,7 @@ async function process5(input, background, config3) {
|
|||
// src/gear/gear-agegenderrace.ts
|
||||
var tf21 = __toModule(require_tfjs_esm());
|
||||
var model12;
|
||||
var skipped9 = Number.MAX_SAFE_INTEGER;
|
||||
var skipped10 = Number.MAX_SAFE_INTEGER;
|
||||
async function load13(config3) {
|
||||
if (env2.initial)
|
||||
model12 = null;
|
||||
|
@ -10468,7 +10581,6 @@ async function register(instance) {
|
|||
log("error: humangl:", e.type);
|
||||
log("possible browser memory leak using webgl");
|
||||
instance.emit("error");
|
||||
throw new Error("browser webgl error");
|
||||
});
|
||||
config2.canvas.addEventListener("webglcontextrestored", (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)}`);
|
||||
}
|
||||
}
|
||||
if (tf23.getBackend() === "humangl") {
|
||||
if (tf23.getBackend() === "webgpu") {
|
||||
tf23.ENV.set("WEBGPU_USE_GLSL", true);
|
||||
tf23.ENV.set("WEBGL_PACK_DEPTHWISECONV", false);
|
||||
tf23.ENV.set("WEBGL_USE_SHAPES_UNIFORMS", true);
|
||||
}
|
||||
tf23.enableProdMode();
|
||||
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]);
|
||||
}
|
||||
}
|
||||
if (localOptions.drawPoints) {
|
||||
if (localOptions.drawPoints && result[i].keypoints) {
|
||||
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;
|
||||
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;
|
||||
if (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.fillText(`${pt.part} ${Math.trunc(100 * pt.score)}%`, pt.position[0] + 4, pt.position[1] + 4);
|
||||
}
|
||||
}
|
||||
if (localOptions.drawPolygons && result[i].keypoints && result[i].annotations) {
|
||||
for (const part of Object.values(result[i].annotations)) {
|
||||
for (const connected4 of part)
|
||||
curves(ctx, connected4, localOptions);
|
||||
}
|
||||
if (localOptions.drawPolygons && result[i].keypoints) {
|
||||
let part;
|
||||
const points = [];
|
||||
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);
|
||||
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)
|
||||
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 annotations3 = {};
|
||||
const annotations2 = {};
|
||||
if (Object.keys(bufferedResult.hand[i].annotations).length !== Object.keys(newResult.hand[i].annotations).length)
|
||||
bufferedResult.hand[i].annotations = newResult.hand[i].annotations;
|
||||
if (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) {
|
||||
|
|
|
@ -216,7 +216,7 @@ var config = {
|
|||
},
|
||||
maxDetected: -1,
|
||||
minConfidence: 0.2,
|
||||
skipFrames: 1
|
||||
skipFrames: 5
|
||||
},
|
||||
hand: {
|
||||
enabled: true,
|
||||
|
@ -1200,6 +1200,8 @@ function process2(input, config3) {
|
|||
tempCanvas.height = targetHeight;
|
||||
const tempCtx = tempCanvas.getContext("2d");
|
||||
tempCtx == null ? void 0 : tempCtx.drawImage(outCanvas, 0, 0);
|
||||
console.log("PIXELS", tempCanvas);
|
||||
pixels = tf2.browser && env2.browser ? tf2.browser.fromPixels(tempCanvas) : null;
|
||||
try {
|
||||
pixels = tf2.browser && env2.browser ? tf2.browser.fromPixels(tempCanvas) : null;
|
||||
} catch (err) {
|
||||
|
@ -8780,11 +8782,11 @@ var HandPipeline = class {
|
|||
const rawCoords = await keypointsReshaped.array();
|
||||
tf12.dispose(keypoints3);
|
||||
tf12.dispose(keypointsReshaped);
|
||||
const coords4 = this.transformRawCoords(rawCoords, newBox, angle, rotationMatrix);
|
||||
const nextBoundingBox = this.getBoxForHandLandmarks(coords4);
|
||||
const coords7 = this.transformRawCoords(rawCoords, newBox, angle, rotationMatrix);
|
||||
const nextBoundingBox = this.getBoxForHandLandmarks(coords7);
|
||||
this.storedBoxes[i] = { ...nextBoundingBox, confidence };
|
||||
const result = {
|
||||
landmarks: coords4,
|
||||
landmarks: coords7,
|
||||
confidence,
|
||||
boxConfidence: currentBox.confidence,
|
||||
fingerConfidence: confidence,
|
||||
|
@ -9211,10 +9213,10 @@ async function predict5(input, config3) {
|
|||
return [];
|
||||
const hands = [];
|
||||
for (let i = 0; i < predictions.length; i++) {
|
||||
const annotations3 = {};
|
||||
const annotations2 = {};
|
||||
if (predictions[i].landmarks) {
|
||||
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;
|
||||
|
@ -9258,7 +9260,7 @@ async function predict5(input, config3) {
|
|||
box: box4,
|
||||
boxRaw: boxRaw2,
|
||||
keypoints: keypoints3,
|
||||
annotations: annotations3,
|
||||
annotations: annotations2,
|
||||
landmarks
|
||||
});
|
||||
}
|
||||
|
@ -9297,9 +9299,9 @@ async function load7(config3) {
|
|||
}
|
||||
|
||||
// src/util/box.ts
|
||||
function scale(keypoints3, boxScaleFact2, outputSize3) {
|
||||
const coords4 = [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])];
|
||||
function scale(keypoints3, boxScaleFact2, outputSize2) {
|
||||
const coords7 = [keypoints3.map((pt) => pt[0]), keypoints3.map((pt) => pt[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 diff = Math.max(center[0] - maxmin[1], center[1] - maxmin[3], -center[0] + maxmin[0], -center[1] + maxmin[2]) * boxScaleFact2;
|
||||
const box4 = [
|
||||
|
@ -9309,10 +9311,10 @@ function scale(keypoints3, boxScaleFact2, outputSize3) {
|
|||
Math.trunc(2 * diff)
|
||||
];
|
||||
const boxRaw2 = [
|
||||
box4[0] / outputSize3[0],
|
||||
box4[1] / outputSize3[1],
|
||||
box4[2] / outputSize3[0],
|
||||
box4[3] / outputSize3[1]
|
||||
box4[0] / outputSize2[0],
|
||||
box4[1] / outputSize2[1],
|
||||
box4[2] / outputSize2[0],
|
||||
box4[3] / outputSize2[1]
|
||||
];
|
||||
const yxBox = [
|
||||
boxRaw2[1],
|
||||
|
@ -9502,10 +9504,10 @@ async function predict6(input, config3) {
|
|||
}
|
||||
|
||||
// src/body/blazepose.ts
|
||||
var tf15 = __toModule(require_tfjs_esm());
|
||||
var tf15 = __toModule(require("@tensorflow/tfjs"));
|
||||
|
||||
// src/body/annotations.ts
|
||||
var full = [
|
||||
// src/body/blazeposecoords.ts
|
||||
var kpt = [
|
||||
"nose",
|
||||
"leftEyeInside",
|
||||
"leftEye",
|
||||
|
@ -9539,58 +9541,38 @@ var full = [
|
|||
"rightHeel",
|
||||
"leftFoot",
|
||||
"rightFoot",
|
||||
"midHip",
|
||||
"forehead",
|
||||
"bodyCenter",
|
||||
"bodyTop",
|
||||
"leftThumb",
|
||||
"leftHand",
|
||||
"rightThumb",
|
||||
"rightHand"
|
||||
];
|
||||
var upper = [
|
||||
"nose",
|
||||
"leftEyeInside",
|
||||
"leftEye",
|
||||
"leftEyeOutside",
|
||||
"rightEyeInside",
|
||||
"rightEye",
|
||||
"rightEyeOutside",
|
||||
"leftEar",
|
||||
"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"
|
||||
];
|
||||
var 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: []
|
||||
};
|
||||
|
||||
// src/body/blazepose.ts
|
||||
var env3 = { initial: true };
|
||||
var models2 = [null, null];
|
||||
var outputNodes = ["ld_3d", "activation_segmentation", "activation_heatmap", "world_3d", "output_poseflag"];
|
||||
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) {
|
||||
var _a;
|
||||
if (env2.initial)
|
||||
var _a, _b;
|
||||
if (env3.initial)
|
||||
models2[0] = null;
|
||||
if (!models2[0]) {
|
||||
models2[0] = await tf15.loadGraphModel(join(config3.modelBasePath, ((_a = config3.body.detector) == null ? void 0 : _a.modelPath) || ""));
|
||||
if (!models2[0] && ((_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"]);
|
||||
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;
|
||||
|
@ -9598,18 +9580,23 @@ async function loadDetect2(config3) {
|
|||
log("load model failed:", config3.object.modelPath);
|
||||
else if (config3.debug)
|
||||
log("load model:", models2[0]["modelUrl"]);
|
||||
} else if (config3.debug)
|
||||
} else if (config3.debug && models2[0])
|
||||
log("cached model:", models2[0]["modelUrl"]);
|
||||
return models2[0];
|
||||
}
|
||||
async function loadPose(config3) {
|
||||
if (env2.initial)
|
||||
var _a;
|
||||
if (env3.initial)
|
||||
models2[1] = null;
|
||||
if (!models2[1]) {
|
||||
models2[1] = await tf15.loadGraphModel(join(config3.modelBasePath, config3.body.modelPath || ""));
|
||||
const inputs = Object.values(models2[1].modelSignature["inputs"]);
|
||||
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;
|
||||
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"])
|
||||
log("load model failed:", config3.object.modelPath);
|
||||
else if (config3.debug)
|
||||
|
@ -9618,64 +9605,128 @@ async function loadPose(config3) {
|
|||
log("cached model:", models2[1]["modelUrl"]);
|
||||
return models2[1];
|
||||
}
|
||||
async function detectParts(input, config3) {
|
||||
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
|
||||
});
|
||||
}
|
||||
}
|
||||
function calculateBoxes(keypoints3, outputSize2) {
|
||||
const x = keypoints3.map((a) => a.position[0]);
|
||||
const y = keypoints3.map((a) => a.position[1]);
|
||||
const box4 = [
|
||||
Math.min(...x),
|
||||
Math.min(...y),
|
||||
Math.max(...x) - Math.min(...x),
|
||||
Math.max(...y) - Math.min(...x)
|
||||
const keypointsBox = [Math.min(...x), Math.min(...y), Math.max(...x) - Math.min(...x), Math.max(...y) - Math.min(...y)];
|
||||
const keypointsBoxRaw = [keypointsBox[0] / outputSize2[0], keypointsBox[1] / outputSize2[1], keypointsBox[2] / outputSize2[0], keypointsBox[3] / outputSize2[1]];
|
||||
return { keypointsBox, keypointsBoxRaw };
|
||||
}
|
||||
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];
|
||||
const score2 = keypoints3.reduce((prev, curr) => curr.score > prev ? curr.score : prev, 0);
|
||||
t.pad = tf15.pad(input, padding);
|
||||
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]));
|
||||
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) {
|
||||
outputSize2 = [input.shape[2] || 0, input.shape[1] || 0];
|
||||
const bodies = [];
|
||||
const body4 = await detectParts(input, config3);
|
||||
bodies.push(body4);
|
||||
return bodies;
|
||||
const outputSize2 = [input.shape[2] || 0, input.shape[1] || 0];
|
||||
if (skipped5 < (config3.body.skipFrames || 0) && config3.skipFrame) {
|
||||
skipped5++;
|
||||
} else {
|
||||
cache2 = await detectParts(input, config3, outputSize2);
|
||||
skipped5 = 0;
|
||||
}
|
||||
if (cache2)
|
||||
return [cache2];
|
||||
return [];
|
||||
}
|
||||
|
||||
// src/body/efficientpose.ts
|
||||
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 keypoints = [];
|
||||
var box3 = [0, 0, 0, 0];
|
||||
var boxRaw = [0, 0, 0, 0];
|
||||
var score = 0;
|
||||
var skipped5 = Number.MAX_SAFE_INTEGER;
|
||||
var bodyParts = ["head", "neck", "rightShoulder", "rightElbow", "rightWrist", "chest", "leftShoulder", "leftElbow", "leftWrist", "pelvis", "rightHip", "rightKnee", "rightAnkle", "leftHip", "leftKnee", "leftAnkle"];
|
||||
var skipped6 = Number.MAX_SAFE_INTEGER;
|
||||
async function load8(config3) {
|
||||
if (env2.initial)
|
||||
model7 = null;
|
||||
|
@ -9696,9 +9747,9 @@ function max2d(inputs, minScore) {
|
|||
const reshaped = tf16.reshape(inputs, [height * width]);
|
||||
const newScore = tf16.max(reshaped, 0).dataSync()[0];
|
||||
if (newScore > minScore) {
|
||||
const coords4 = tf16.argMax(reshaped, 0);
|
||||
const x = mod(coords4, width).dataSync()[0];
|
||||
const y = tf16.div(coords4, tf16.scalar(width, "int32")).dataSync()[0];
|
||||
const coordinates = tf16.argMax(reshaped, 0);
|
||||
const x = mod(coordinates, width).dataSync()[0];
|
||||
const y = tf16.div(coordinates, tf16.scalar(width, "int32")).dataSync()[0];
|
||||
return [x, y, newScore];
|
||||
}
|
||||
return [0, 0, newScore];
|
||||
|
@ -9706,11 +9757,11 @@ function max2d(inputs, minScore) {
|
|||
}
|
||||
async function predict8(image24, config3) {
|
||||
var _a;
|
||||
if (skipped5 < (((_a = config3.body) == null ? void 0 : _a.skipFrames) || 0) && config3.skipFrame && Object.keys(keypoints).length > 0) {
|
||||
skipped5++;
|
||||
return [{ id: 0, score, box: box3, boxRaw, keypoints }];
|
||||
if (skipped6 < (((_a = config3.body) == null ? void 0 : _a.skipFrames) || 0) && config3.skipFrame && Object.keys(keypoints).length > 0) {
|
||||
skipped6++;
|
||||
return [{ id: 0, score, box: box3, boxRaw, keypoints, annotations: {} }];
|
||||
}
|
||||
skipped5 = 0;
|
||||
skipped6 = 0;
|
||||
return new Promise(async (resolve) => {
|
||||
var _a2;
|
||||
const tensor3 = tf16.tidy(() => {
|
||||
|
@ -9736,7 +9787,7 @@ async function predict8(image24, config3) {
|
|||
if (score > (((_a2 = config3.body) == null ? void 0 : _a2.minConfidence) || 0)) {
|
||||
keypoints.push({
|
||||
score: Math.round(100 * partScore) / 100,
|
||||
part: bodyParts[id],
|
||||
part: kpt2[id],
|
||||
positionRaw: [
|
||||
x2 / model7.inputs[0].shape[2],
|
||||
y2 / model7.inputs[0].shape[1]
|
||||
|
@ -9767,18 +9818,59 @@ async function predict8(image24, config3) {
|
|||
Math.max(...xRaw) - Math.min(...xRaw),
|
||||
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
|
||||
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 inputSize6 = 0;
|
||||
var cachedBoxes = [];
|
||||
var skipped6 = Number.MAX_SAFE_INTEGER;
|
||||
var skipped7 = Number.MAX_SAFE_INTEGER;
|
||||
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) {
|
||||
if (env2.initial)
|
||||
model8 = null;
|
||||
|
@ -9816,19 +9908,19 @@ function createBox2(points) {
|
|||
return [box4, boxRaw2];
|
||||
}
|
||||
async function parseSinglePose(res, config3, image24, inputBox) {
|
||||
const kpt = res[0][0];
|
||||
const kpt4 = res[0][0];
|
||||
keypoints2.length = 0;
|
||||
let score2 = 0;
|
||||
for (let id = 0; id < kpt.length; id++) {
|
||||
score2 = kpt[id][2];
|
||||
for (let id = 0; id < kpt4.length; id++) {
|
||||
score2 = kpt4[id][2];
|
||||
if (score2 > config3.body.minConfidence) {
|
||||
const positionRaw = [
|
||||
(inputBox[3] - inputBox[1]) * kpt[id][1] + inputBox[1],
|
||||
(inputBox[2] - inputBox[0]) * kpt[id][0] + inputBox[0]
|
||||
(inputBox[3] - inputBox[1]) * kpt4[id][1] + inputBox[1],
|
||||
(inputBox[2] - inputBox[0]) * kpt4[id][0] + inputBox[0]
|
||||
];
|
||||
keypoints2.push({
|
||||
score: Math.round(100 * score2) / 100,
|
||||
part: bodyParts2[id],
|
||||
part: kpt3[id],
|
||||
positionRaw,
|
||||
position: [
|
||||
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);
|
||||
const bodies = [];
|
||||
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;
|
||||
}
|
||||
async function parseMultiPose(res, config3, image24, inputBox) {
|
||||
const bodies = [];
|
||||
for (let id = 0; id < res[0].length; id++) {
|
||||
const kpt = res[0][id];
|
||||
const totalScore = Math.round(100 * kpt[51 + 4]) / 100;
|
||||
const kpt4 = res[0][id];
|
||||
const totalScore = Math.round(100 * kpt4[51 + 4]) / 100;
|
||||
if (totalScore > config3.body.minConfidence) {
|
||||
keypoints2.length = 0;
|
||||
for (let i = 0; i < 17; i++) {
|
||||
const score2 = kpt[3 * i + 2];
|
||||
const score2 = kpt4[3 * i + 2];
|
||||
if (score2 > config3.body.minConfidence) {
|
||||
const positionRaw = [
|
||||
(inputBox[3] - inputBox[1]) * kpt[3 * i + 1] + inputBox[1],
|
||||
(inputBox[2] - inputBox[0]) * kpt[3 * i + 0] + inputBox[0]
|
||||
(inputBox[3] - inputBox[1]) * kpt4[3 * i + 1] + inputBox[1],
|
||||
(inputBox[2] - inputBox[0]) * kpt4[3 * i + 0] + inputBox[0]
|
||||
];
|
||||
keypoints2.push({
|
||||
part: bodyParts2[i],
|
||||
part: kpt3[i],
|
||||
score: Math.round(100 * score2) / 100,
|
||||
positionRaw,
|
||||
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 = [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))];
|
||||
bodies.push({ id, score: totalScore, boxRaw: boxRaw2, box: box4, keypoints: [...keypoints2] });
|
||||
const [box4, boxRaw2] = createBox2(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, score: totalScore, boxRaw: boxRaw2, box: box4, keypoints: [...keypoints2], annotations: annotations2 });
|
||||
}
|
||||
}
|
||||
bodies.sort((a, b) => b.score - a.score);
|
||||
|
@ -9886,7 +9999,7 @@ async function predict9(input, config3) {
|
|||
let bodies = [];
|
||||
if (!config3.skipFrame)
|
||||
cachedBoxes.length = 0;
|
||||
skipped6++;
|
||||
skipped7++;
|
||||
for (let i = 0; i < cachedBoxes.length; i++) {
|
||||
t.crop = tf17.image.cropAndResize(input, [cachedBoxes[i]], [0], [inputSize6, inputSize6], "bilinear");
|
||||
t.cast = tf17.cast(t.crop, "int32");
|
||||
|
@ -9896,7 +10009,7 @@ async function predict9(input, config3) {
|
|||
bodies = bodies.concat(newBodies);
|
||||
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.cast = tf17.cast(t.resized, "int32");
|
||||
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]);
|
||||
Object.keys(t).forEach((tensor3) => tf17.dispose(t[tensor3]));
|
||||
cachedBoxes.length = 0;
|
||||
skipped6 = 0;
|
||||
skipped7 = 0;
|
||||
}
|
||||
if (config3.skipFrame) {
|
||||
cachedBoxes.length = 0;
|
||||
for (let i = 0; i < bodies.length; i++) {
|
||||
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]]);
|
||||
cachedBoxes.push([...newBox.yxBox]);
|
||||
}
|
||||
|
@ -10010,7 +10123,7 @@ var labels = [
|
|||
// src/object/nanodet.ts
|
||||
var model9;
|
||||
var last3 = [];
|
||||
var skipped7 = Number.MAX_SAFE_INTEGER;
|
||||
var skipped8 = Number.MAX_SAFE_INTEGER;
|
||||
var scaleBox = 2.5;
|
||||
async function load10(config3) {
|
||||
if (!model9 || env2.initial) {
|
||||
|
@ -10089,15 +10202,15 @@ async function process3(res, inputSize8, outputShape, config3) {
|
|||
return results;
|
||||
}
|
||||
async function predict10(image24, config3) {
|
||||
if (skipped7 < (config3.object.skipFrames || 0) && config3.skipFrame && last3.length > 0) {
|
||||
skipped7++;
|
||||
if (skipped8 < (config3.object.skipFrames || 0) && config3.skipFrame && last3.length > 0) {
|
||||
skipped8++;
|
||||
return last3;
|
||||
}
|
||||
skipped7 = 0;
|
||||
skipped8 = 0;
|
||||
if (!env2.kernels.includes("mod") || !env2.kernels.includes("sparsetodense"))
|
||||
return last3;
|
||||
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 norm = tf18.div(resize, 255);
|
||||
const transpose = norm.transpose([0, 3, 1, 2]);
|
||||
|
@ -10107,7 +10220,7 @@ async function predict10(image24, config3) {
|
|||
if (config3.object.enabled)
|
||||
objectT = await model9.predict(transpose);
|
||||
tf18.dispose(transpose);
|
||||
const obj = await process3(objectT, model9.inputSize, outputSize3, config3);
|
||||
const obj = await process3(objectT, model9.inputSize, outputSize2, config3);
|
||||
last3 = obj;
|
||||
resolve(obj);
|
||||
});
|
||||
|
@ -10118,7 +10231,7 @@ var tf19 = __toModule(require_tfjs_esm());
|
|||
var model10;
|
||||
var inputSize7 = 0;
|
||||
var last4 = [];
|
||||
var skipped8 = Number.MAX_SAFE_INTEGER;
|
||||
var skipped9 = Number.MAX_SAFE_INTEGER;
|
||||
async function load11(config3) {
|
||||
if (env2.initial)
|
||||
model10 = null;
|
||||
|
@ -10182,19 +10295,19 @@ async function process4(res, outputShape, config3) {
|
|||
return results;
|
||||
}
|
||||
async function predict11(input, config3) {
|
||||
if (skipped8 < (config3.object.skipFrames || 0) && config3.skipFrame && last4.length > 0) {
|
||||
skipped8++;
|
||||
if (skipped9 < (config3.object.skipFrames || 0) && config3.skipFrame && last4.length > 0) {
|
||||
skipped9++;
|
||||
return last4;
|
||||
}
|
||||
skipped8 = 0;
|
||||
skipped9 = 0;
|
||||
if (!env2.kernels.includes("mod") || !env2.kernels.includes("sparsetodense"))
|
||||
return last4;
|
||||
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 objectT = config3.object.enabled ? model10 == null ? void 0 : model10.execute(resize, ["tower_0/detections"]) : null;
|
||||
tf19.dispose(resize);
|
||||
const obj = await process4(objectT, outputSize3, config3);
|
||||
const obj = await process4(objectT, outputSize2, config3);
|
||||
last4 = obj;
|
||||
resolve(obj);
|
||||
});
|
||||
|
@ -10287,7 +10400,7 @@ async function process5(input, background, config3) {
|
|||
// src/gear/gear-agegenderrace.ts
|
||||
var tf21 = __toModule(require_tfjs_esm());
|
||||
var model12;
|
||||
var skipped9 = Number.MAX_SAFE_INTEGER;
|
||||
var skipped10 = Number.MAX_SAFE_INTEGER;
|
||||
async function load13(config3) {
|
||||
if (env2.initial)
|
||||
model12 = null;
|
||||
|
@ -10467,7 +10580,6 @@ async function register(instance) {
|
|||
log("error: humangl:", e.type);
|
||||
log("possible browser memory leak using webgl");
|
||||
instance.emit("error");
|
||||
throw new Error("browser webgl error");
|
||||
});
|
||||
config2.canvas.addEventListener("webglcontextrestored", (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)}`);
|
||||
}
|
||||
}
|
||||
if (tf23.getBackend() === "humangl") {
|
||||
if (tf23.getBackend() === "webgpu") {
|
||||
tf23.ENV.set("WEBGPU_USE_GLSL", true);
|
||||
tf23.ENV.set("WEBGL_PACK_DEPTHWISECONV", false);
|
||||
tf23.ENV.set("WEBGL_USE_SHAPES_UNIFORMS", true);
|
||||
}
|
||||
tf23.enableProdMode();
|
||||
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]);
|
||||
}
|
||||
}
|
||||
if (localOptions.drawPoints) {
|
||||
if (localOptions.drawPoints && result[i].keypoints) {
|
||||
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;
|
||||
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;
|
||||
if (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.fillText(`${pt.part} ${Math.trunc(100 * pt.score)}%`, pt.position[0] + 4, pt.position[1] + 4);
|
||||
}
|
||||
}
|
||||
if (localOptions.drawPolygons && result[i].keypoints && result[i].annotations) {
|
||||
for (const part of Object.values(result[i].annotations)) {
|
||||
for (const connected4 of part)
|
||||
curves(ctx, connected4, localOptions);
|
||||
}
|
||||
if (localOptions.drawPolygons && result[i].keypoints) {
|
||||
let part;
|
||||
const points = [];
|
||||
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);
|
||||
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)
|
||||
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 annotations3 = {};
|
||||
const annotations2 = {};
|
||||
if (Object.keys(bufferedResult.hand[i].annotations).length !== Object.keys(newResult.hand[i].annotations).length)
|
||||
bufferedResult.hand[i].annotations = newResult.hand[i].annotations;
|
||||
if (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) {
|
||||
|
|
|
@ -37,7 +37,7 @@ export const full = [
|
|||
'rightHeel',
|
||||
'leftFoot',
|
||||
'rightFoot',
|
||||
'midHip',
|
||||
'bodyCenter',
|
||||
'forehead',
|
||||
'leftThumb',
|
||||
'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
|
||||
*
|
||||
* 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 * as tf from '../../dist/tfjs.esm.js';
|
||||
import type { BodyResult, Box, Point } from '../result';
|
||||
import type { BodyKeypoint, BodyResult, Box, Point } from '../result';
|
||||
import type { GraphModel, Tensor } from '../tfjs/types';
|
||||
import type { Config } from '../config';
|
||||
import { env } from '../util/env';
|
||||
import * as annotations from './annotations';
|
||||
import * as coords from './blazeposecoords';
|
||||
|
||||
// const boxScaleFact = 1.5; // hand finger model prefers slighly larger box
|
||||
const env = { initial: true };
|
||||
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]];
|
||||
|
||||
// let skipped = 0;
|
||||
let outputSize: [number, number] = [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: [],
|
||||
};
|
||||
*/
|
||||
let skipped = Number.MAX_SAFE_INTEGER;
|
||||
let outputNodes: string[]; // different for lite/full/heavy
|
||||
let cache: BodyResult | null = null;
|
||||
let padding: [number, number][] = [[0, 0], [0, 0], [0, 0], [0, 0]];
|
||||
|
||||
export async function loadDetect(config: Config): Promise<GraphModel> {
|
||||
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;
|
||||
const inputs = Object.values(models[0].modelSignature['inputs']);
|
||||
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;
|
||||
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('cached model:', models[0]['modelUrl']);
|
||||
return models[0];
|
||||
} else if (config.debug && models[0]) log('cached model:', models[0]['modelUrl']);
|
||||
return models[0] as 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']);
|
||||
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;
|
||||
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);
|
||||
else if (config.debug) log('load 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;
|
||||
}
|
||||
|
||||
/*
|
||||
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,
|
||||
});
|
||||
}
|
||||
}
|
||||
function calculateBoxes(keypoints: Array<BodyKeypoint>, outputSize: [number, number]): { keypointsBox: Box, keypointsBoxRaw: Box } {
|
||||
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 keypointsBox: Box = [Math.min(...x), Math.min(...y), Math.max(...x) - Math.min(...x), Math.max(...y) - Math.min(...y)];
|
||||
const keypointsBoxRaw: Box = [keypointsBox[0] / outputSize[0], keypointsBox[1] / outputSize[1], keypointsBox[2] / outputSize[0], keypointsBox[3] / outputSize[1]];
|
||||
/*
|
||||
const leftShoulder = keypoints.find((kpt) => kpt.part === 'leftShoulder');
|
||||
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
|
||||
const score = keypoints.reduce((prev, curr) => (curr.score > prev ? curr.score : prev), 0);
|
||||
t.pad = tf.pad(input as tf.Tensor4D, padding);
|
||||
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]));
|
||||
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[]> {
|
||||
outputSize = [input.shape[2] || 0, input.shape[1] || 0];
|
||||
const bodies: Array<BodyResult> = [];
|
||||
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
|
||||
const outputSize: [number, number] = [input.shape[2] || 0, input.shape[1] || 0];
|
||||
if ((skipped < (config.body.skipFrames || 0)) && config.skipFrame) {
|
||||
skipped++;
|
||||
bodies = await Promise.all(cache.partBoxes.map((body) => detectParts(input, body, config))); // run from parts box cache
|
||||
} else { // calculate new boxes and run part detection
|
||||
} else {
|
||||
cache = await detectParts(input, config, outputSize);
|
||||
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
|
||||
*/
|
||||
return bodies as BodyResult[];
|
||||
if (cache) return [cache];
|
||||
return [];
|
||||
}
|
||||
|
|
|
@ -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 * 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 { Config } from '../config';
|
||||
import { env } from '../util/env';
|
||||
|
||||
let model: GraphModel | null;
|
||||
|
||||
type Keypoints = { score: number, part: string, position: Point, positionRaw: Point };
|
||||
|
||||
const keypoints: Array<Keypoints> = [];
|
||||
const keypoints: Array<BodyKeypoint> = [];
|
||||
let box: Box = [0, 0, 0, 0];
|
||||
let boxRaw: Box = [0, 0, 0, 0];
|
||||
let score = 0;
|
||||
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> {
|
||||
if (env.initial) model = null;
|
||||
if (!model) {
|
||||
|
@ -41,9 +38,9 @@ function max2d(inputs, minScore) {
|
|||
const reshaped = tf.reshape(inputs, [height * width]); // combine all data
|
||||
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
|
||||
const coords = tf.argMax(reshaped, 0);
|
||||
const x = mod(coords, width).dataSync()[0]; // inside tf.tidy
|
||||
const y = tf.div(coords, tf.scalar(width, 'int32')).dataSync()[0]; // inside tf.tidy
|
||||
const coordinates = tf.argMax(reshaped, 0);
|
||||
const x = mod(coordinates, width).dataSync()[0]; // inside tf.tidy
|
||||
const y = tf.div(coordinates, tf.scalar(width, 'int32')).dataSync()[0]; // inside tf.tidy
|
||||
return [x, y, newScore];
|
||||
}
|
||||
return [0, 0, newScore];
|
||||
|
@ -53,7 +50,7 @@ function max2d(inputs, minScore) {
|
|||
export async function predict(image: Tensor, config: Config): Promise<BodyResult[]> {
|
||||
if ((skipped < (config.body?.skipFrames || 0)) && config.skipFrame && Object.keys(keypoints).length > 0) {
|
||||
skipped++;
|
||||
return [{ id: 0, score, box, boxRaw, keypoints }];
|
||||
return [{ id: 0, score, box, boxRaw, keypoints, annotations: {} }];
|
||||
}
|
||||
skipped = 0;
|
||||
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)) {
|
||||
keypoints.push({
|
||||
score: Math.round(100 * partScore) / 100,
|
||||
part: bodyParts[id],
|
||||
part: coords.kpt[id],
|
||||
positionRaw: [ // normalized to 0..1
|
||||
// @ts-ignore model is not undefined here
|
||||
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(...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 { scale } from '../util/box';
|
||||
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 { Config } from '../config';
|
||||
import { fakeOps } from '../tfjs/backend';
|
||||
|
@ -17,13 +18,8 @@ let model: GraphModel | null;
|
|||
let inputSize = 0;
|
||||
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;
|
||||
const keypoints: Array<Keypoints> = [];
|
||||
|
||||
const bodyParts = ['nose', 'leftEye', 'rightEye', 'leftEar', 'rightEar', 'leftShoulder', 'rightShoulder', 'leftElbow', 'rightElbow', 'leftWrist', 'rightWrist', 'leftHip', 'rightHip', 'leftKnee', 'rightKnee', 'leftAnkle', 'rightAnkle'];
|
||||
const keypoints: Array<BodyKeypoint> = [];
|
||||
|
||||
export async function load(config: Config): Promise<GraphModel> {
|
||||
if (env.initial) model = null;
|
||||
|
@ -71,7 +67,7 @@ async function parseSinglePose(res, config, image, inputBox) {
|
|||
];
|
||||
keypoints.push({
|
||||
score: Math.round(100 * score) / 100,
|
||||
part: bodyParts[id],
|
||||
part: coords.kpt[id],
|
||||
positionRaw,
|
||||
position: [ // normalized to input image size
|
||||
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);
|
||||
const bodies: Array<Body> = [];
|
||||
const bodies: Array<BodyResult> = [];
|
||||
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;
|
||||
}
|
||||
|
||||
async function parseMultiPose(res, config, image, inputBox) {
|
||||
const bodies: Array<Body> = [];
|
||||
const bodies: Array<BodyResult> = [];
|
||||
for (let id = 0; id < res[0].length; id++) {
|
||||
const kpt = res[0][id];
|
||||
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],
|
||||
];
|
||||
keypoints.push({
|
||||
part: bodyParts[i],
|
||||
part: coords.kpt[i],
|
||||
score: Math.round(100 * score) / 100,
|
||||
positionRaw,
|
||||
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
|
||||
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))];
|
||||
bodies.push({ id, score: totalScore, boxRaw, box, keypoints: [...keypoints] });
|
||||
// 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 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);
|
||||
|
@ -129,7 +145,7 @@ export async function predict(input: Tensor, config: Config): Promise<BodyResult
|
|||
return new Promise(async (resolve) => {
|
||||
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
|
||||
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
|
||||
// set to -1 to autodetect based on number of detected faces
|
||||
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
|
||||
},
|
||||
|
||||
|
|
|
@ -8,7 +8,6 @@ import { defaults } from './config';
|
|||
import * as tf from '../dist/tfjs.esm.js';
|
||||
import * as app from '../package.json';
|
||||
import * as backend from './tfjs/backend';
|
||||
// import * as blazepose from './body/blazepose-v1';
|
||||
import * as blazepose from './body/blazepose';
|
||||
import * as centernet from './object/centernet';
|
||||
import * as draw from './util/draw';
|
||||
|
|
|
@ -183,6 +183,8 @@ export function process(input: Input, config: Config): { tensor: Tensor | null,
|
|||
tempCanvas.height = targetHeight;
|
||||
const tempCtx = tempCanvas.getContext('2d');
|
||||
tempCtx?.drawImage(outCanvas, 0, 0);
|
||||
console.log('PIXELS', tempCanvas);
|
||||
pixels = (tf.browser && env.browser) ? tf.browser.fromPixels(tempCanvas) : null;
|
||||
try {
|
||||
pixels = (tf.browser && env.browser) ? tf.browser.fromPixels(tempCanvas) : null;
|
||||
} catch (err) {
|
||||
|
|
|
@ -59,6 +59,13 @@ export interface FaceResult {
|
|||
tensor?: Tensor,
|
||||
}
|
||||
|
||||
export type BodyKeypoint = {
|
||||
part: string,
|
||||
position: Point,
|
||||
positionRaw: Point,
|
||||
score: number,
|
||||
}
|
||||
|
||||
/** Body results
|
||||
*
|
||||
* Each results has:
|
||||
|
@ -77,13 +84,8 @@ export interface BodyResult {
|
|||
score: number,
|
||||
box: Box,
|
||||
boxRaw: Box,
|
||||
keypoints: Array<{
|
||||
part: string,
|
||||
position: Point,
|
||||
positionRaw: Point,
|
||||
score: number,
|
||||
presence?: number,
|
||||
}>
|
||||
annotations: Record<string, Point[][]>,
|
||||
keypoints: Array<BodyKeypoint>
|
||||
}
|
||||
|
||||
/** Hand results
|
||||
|
|
|
@ -90,10 +90,8 @@ export async function check(instance, force = false) {
|
|||
}
|
||||
|
||||
// handle webgpu
|
||||
if (tf.getBackend() === 'humangl') {
|
||||
if (tf.getBackend() === 'webgpu') {
|
||||
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
|
||||
|
|
|
@ -67,7 +67,7 @@ export async function register(instance): Promise<void> {
|
|||
// log('gpu memory usage:', instance.tf.engine().backendInstance.numBytesInGPU);
|
||||
log('possible browser memory leak using webgl');
|
||||
instance.emit('error');
|
||||
throw new Error('browser webgl error');
|
||||
// throw new Error('browser webgl error');
|
||||
/*
|
||||
log('resetting humangl backend');
|
||||
env.initial = true;
|
||||
|
|
|
@ -4,7 +4,7 @@
|
|||
|
||||
import { TRI468 as triangulation } from '../face/facemeshcoords';
|
||||
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
|
||||
|
@ -102,7 +102,7 @@ function rect(ctx, x, y, width, height, localOptions) {
|
|||
ctx.stroke();
|
||||
}
|
||||
|
||||
function lines(ctx, points: [number, number, number?][] = [], localOptions) {
|
||||
function lines(ctx, points: Point[] = [], localOptions) {
|
||||
if (points === undefined || points.length === 0) return;
|
||||
ctx.beginPath();
|
||||
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 (!localOptions.useCurves || points.length <= 2) {
|
||||
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]);
|
||||
}
|
||||
}
|
||||
if (localOptions.drawPoints) {
|
||||
if (localOptions.drawPoints && result[i].keypoints) {
|
||||
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;
|
||||
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;
|
||||
if (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.fillText(`${pt.part} ${Math.trunc(100 * pt.score)}%`, pt.position[0] + 4, pt.position[1] + 4);
|
||||
}
|
||||
}
|
||||
if (localOptions.drawPolygons && result[i].keypoints && result[i].annotations) {
|
||||
for (const part of Object.values(result[i].annotations)) {
|
||||
for (const connected of part) curves(ctx, connected, localOptions);
|
||||
}
|
||||
if (localOptions.drawPolygons && result[i].keypoints) {
|
||||
let part;
|
||||
const points: [number, number, number?][] = [];
|
||||
// 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-03 08:08:21 [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-03 08:08:21 [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-03 08:08:21 [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-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-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-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-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-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-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-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-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-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-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-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-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-03 08:08:38 [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-03 08:09:11 [35mSTATE:[39m Lint: {"locations":["*.json","src/**/*.ts","test/**/*.js","demo/**/*.js"],"files":84,"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-03 08:09:12 [36mINFO: [39m Done...
|
||||
2021-10-04 15:47:15 [36mINFO: [39m @vladmandic/human version 2.3.0
|
||||
2021-10-04 15:47:16 [36mINFO: [39m User: vlado Platform: linux Arch: x64 Node: v16.10.0
|
||||
2021-10-04 15:47:16 [36mINFO: [39m Application: {"name":"@vladmandic/human","version":"2.3.0"}
|
||||
2021-10-04 15:47:16 [36mINFO: [39m Environment: {"profile":"production","config":"build.json","tsconfig":true,"eslintrc":true,"git":true}
|
||||
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-04 15:47:16 [36mINFO: [39m Build: {"profile":"production","steps":["clean","compile","typings","typedoc","lint","changelog"]}
|
||||
2021-10-04 15:47:16 [35mSTATE:[39m Clean: {"locations":["dist/*","types/*","typedoc/*"]}
|
||||
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-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-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-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-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-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-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-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-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-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-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-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-04 15:47:36 [35mSTATE:[39m Typings: {"input":"src/human.ts","output":"types","files":6}
|
||||
2021-10-04 15:47:42 [35mSTATE:[39m TypeDoc: {"input":"src/human.ts","output":"typedoc","objects":35,"generated":true}
|
||||
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-04 15:48:16 [35mSTATE:[39m ChangeLog: {"repository":"https://github.com/vladmandic/human","branch":"main","output":"CHANGELOG.md"}
|
||||
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>
|
||||
</div><dl class="tsd-comment-tags"><dt>param userConfig:</dt><dd><p><a href="../interfaces/Config.html">Config</a></p>
|
||||
</dd><dt>returns</dt><dd><p>instance</p>
|
||||
</dd></dl></div></section><section class="tsd-panel tsd-hierarchy"><h3>Hierarchy</h3><ul class="tsd-hierarchy"><li><span class="target">Human</span></li></ul></section><section class="tsd-panel-group tsd-index-group"><h2>Index</h2><section class="tsd-panel tsd-index-panel"><div class="tsd-index-content"><section class="tsd-index-section "><h3>Constructors</h3><ul class="tsd-index-list"><li class="tsd-kind-constructor tsd-parent-kind-class"><a href="Human.html#constructor" class="tsd-kind-icon">constructor</a></li></ul></section><section class="tsd-index-section "><h3>Properties</h3><ul class="tsd-index-list"><li class="tsd-kind-property tsd-parent-kind-class"><a href="Human.html#config" class="tsd-kind-icon">config</a></li><li class="tsd-kind-property tsd-parent-kind-class"><a href="Human.html#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>
|
||||
</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>
|
||||
<ul>
|
||||
<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>
|
||||
</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>
|
||||
<ul>
|
||||
<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>
|
||||
</ul>
|
||||
<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>
|
||||
<ul>
|
||||
<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>all: meta-function that performs: canvas, face, body, hand</li>
|
||||
</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>
|
||||
</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>
|
||||
</div><div><p>Possible events:</p>
|
||||
<ul>
|
||||
|
@ -51,13 +51,13 @@
|
|||
<li><code>warmup</code>: triggered when warmup is complete</li>
|
||||
<li><code>error</code>: triggered on some errors</li>
|
||||
</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>
|
||||
</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>
|
||||
</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>
|
||||
</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>
|
||||
</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>
|
||||
|
@ -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#similarity">similarity</a> calculated normalized <code>similarity</code> of given descriptor to the best match</li>
|
||||
</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>
|
||||
</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>
|
||||
</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>
|
||||
<ul>
|
||||
<li>Can be accessed anytime after initial detection</li>
|
||||
<li>Definition: <a href="../interfaces/Result.html">Result</a></li>
|
||||
</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>
|
||||
</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>
|
||||
<ul>
|
||||
<li>Can be polled to determine operations that are currently executed</li>
|
||||
<li>Progresses through: 'config', 'check', 'backend', 'load', 'run:<model>', 'idle'</li>
|
||||
</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>
|
||||
</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>
|
||||
<ul>
|
||||
<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>
|
||||
</ul>
|
||||
</div></div><h4 class="tsd-parameters-title">Parameters</h4><ul class="tsd-parameters"><li><h5>input: <a href="../index.html#Input" class="tsd-signature-type" data-tsd-kind="Type alias">Input</a></h5></li><li><h5><span class="tsd-flag ts-flagOptional">Optional</span> userConfig: <span class="tsd-signature-type">Partial</span><span class="tsd-signature-symbol"><</span><a href="../interfaces/Config.html" class="tsd-signature-type" data-tsd-kind="Interface">Config</a><span class="tsd-signature-symbol">></span></h5></li></ul><h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">Promise</span><span class="tsd-signature-symbol"><</span><a href="../index.html#Error" class="tsd-signature-type" data-tsd-kind="Type alias">Error</a><span class="tsd-signature-symbol"> | </span><a href="../interfaces/Result.html" class="tsd-signature-type" data-tsd-kind="Interface">Result</a><span class="tsd-signature-symbol">></span></h4><div><p>result: <a href="../interfaces/Result.html">Result</a></p>
|
||||
</div></li></ul></section><section class="tsd-panel tsd-member tsd-kind-method tsd-parent-kind-class"><a name="enhance" class="tsd-anchor"></a><h3>enhance</h3><ul class="tsd-signatures tsd-kind-method tsd-parent-kind-class"><li class="tsd-signature tsd-kind-icon">enhance<span class="tsd-signature-symbol">(</span>input<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">Tensor</span><span class="tsd-signature-symbol"><</span><span class="tsd-signature-type">Rank</span><span class="tsd-signature-symbol">></span><span class="tsd-signature-symbol">)</span><span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">null</span><span class="tsd-signature-symbol"> | </span><span class="tsd-signature-type">Tensor</span><span class="tsd-signature-symbol"><</span><span class="tsd-signature-type">Rank</span><span class="tsd-signature-symbol">></span></li></ul><ul class="tsd-descriptions"><li class="tsd-description"><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/vladmandic/human/blob/main/src/human.ts#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>
|
||||
</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>
|
||||
</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>
|
||||
<ul>
|
||||
<li>Normally done implicitly during initial load phase</li>
|
||||
|
@ -116,19 +116,19 @@
|
|||
<li>Use when changing backend during runtime</li>
|
||||
</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></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>
|
||||
<ul>
|
||||
<li>Not explicitly required as any required model is load implicitly on it's first run</li>
|
||||
</ul>
|
||||
</div></div><h4 class="tsd-parameters-title">Parameters</h4><ul class="tsd-parameters"><li><h5><span class="tsd-flag ts-flagOptional">Optional</span> userConfig: <span class="tsd-signature-type">Partial</span><span class="tsd-signature-symbol"><</span><a href="../interfaces/Config.html" class="tsd-signature-type" data-tsd-kind="Interface">Config</a><span class="tsd-signature-symbol">></span></h5></li></ul><h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">Promise</span><span class="tsd-signature-symbol"><</span><span class="tsd-signature-type">void</span><span class="tsd-signature-symbol">></span></h4><div><p>Promise<void></p>
|
||||
</div></li></ul></section><section class="tsd-panel tsd-member tsd-kind-method tsd-parent-kind-class"><a name="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
|
||||
Interpolation is based on time since last known result so can be called independently</p>
|
||||
</div></div><h4 class="tsd-parameters-title">Parameters</h4><ul class="tsd-parameters"><li><h5>result: <a href="../interfaces/Result.html" class="tsd-signature-type" data-tsd-kind="Interface">Result</a><span class="tsd-signature-symbol"> = ...</span></h5></li></ul><h4 class="tsd-returns-title">Returns <a href="../interfaces/Result.html" class="tsd-signature-type" data-tsd-kind="Interface">Result</a></h4><div><p>result: <a href="../interfaces/Result.html">Result</a></p>
|
||||
</div></li></ul></section><section class="tsd-panel tsd-member tsd-kind-method tsd-parent-kind-class"><a name="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>
|
||||
</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>
|
||||
<ul>
|
||||
<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>alpha</code> as grayscale canvas that represents segmentation alpha values</li>
|
||||
</ul>
|
||||
</div></div><h4 class="tsd-parameters-title">Parameters</h4><ul class="tsd-parameters"><li><h5>input: <a href="../index.html#Input" class="tsd-signature-type" data-tsd-kind="Type alias">Input</a></h5></li><li><h5><span class="tsd-flag ts-flagOptional">Optional</span> background: <a href="../index.html#Input" class="tsd-signature-type" data-tsd-kind="Type alias">Input</a></h5></li></ul><h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">Promise</span><span class="tsd-signature-symbol"><</span><span class="tsd-signature-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>
|
||||
</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>
|
||||
<ul>
|
||||
<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">
|
||||
<p>Result interface definition for <strong>Human</strong> library</p>
|
||||
</div><div><p>Contains all possible detection results</p>
|
||||
</div></div></section><section class="tsd-panel tsd-hierarchy"><h3>Hierarchy</h3><ul class="tsd-hierarchy"><li><span class="target">Result</span></li></ul></section><section class="tsd-panel-group tsd-index-group"><h2>Index</h2><section class="tsd-panel tsd-index-panel"><div class="tsd-index-content"><section class="tsd-index-section "><h3>Properties</h3><ul class="tsd-index-list"><li class="tsd-kind-property tsd-parent-kind-interface"><a href="Result.html#body" class="tsd-kind-icon">body</a></li><li class="tsd-kind-property tsd-parent-kind-interface"><a href="Result.html#canvas" class="tsd-kind-icon">canvas</a></li><li class="tsd-kind-property tsd-parent-kind-interface"><a href="Result.html#face" class="tsd-kind-icon">face</a></li><li class="tsd-kind-property tsd-parent-kind-interface"><a href="Result.html#gesture" class="tsd-kind-icon">gesture</a></li><li class="tsd-kind-property tsd-parent-kind-interface"><a href="Result.html#hand" class="tsd-kind-icon">hand</a></li><li class="tsd-kind-property tsd-parent-kind-interface"><a href="Result.html#object" class="tsd-kind-icon">object</a></li><li class="tsd-kind-property tsd-parent-kind-interface"><a href="Result.html#performance" class="tsd-kind-icon">performance</a></li><li class="tsd-kind-property tsd-parent-kind-interface"><a href="Result.html#persons" class="tsd-kind-icon">persons</a></li><li class="tsd-kind-property tsd-parent-kind-interface"><a href="Result.html#timestamp" class="tsd-kind-icon">timestamp</a></li></ul></section></div></section></section><section class="tsd-panel-group tsd-member-group "><h2>Properties</h2><section class="tsd-panel tsd-member tsd-kind-property tsd-parent-kind-interface"><a 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>
|
||||
</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>
|
||||
</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>
|
||||
</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>
|
||||
</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>
|
||||
</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>
|
||||
</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>
|
||||
</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>
|
||||
</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>
|
||||
</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
|
||||
*
|
||||
* Based on : [**BlazePose**](https://github.com/google/mediapipe/blob/master/mediapipe/modules/pose_detection)
|
||||
*/
|
||||
import type { BodyResult } from '../result';
|
||||
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;
|
||||
}
|
||||
export declare type BodyKeypoint = {
|
||||
part: string;
|
||||
position: Point;
|
||||
positionRaw: Point;
|
||||
score: number;
|
||||
};
|
||||
/** Body results
|
||||
*
|
||||
* Each results has:
|
||||
|
@ -83,13 +89,8 @@ export interface BodyResult {
|
|||
score: number;
|
||||
box: Box;
|
||||
boxRaw: Box;
|
||||
keypoints: Array<{
|
||||
part: string;
|
||||
position: Point;
|
||||
positionRaw: Point;
|
||||
score: number;
|
||||
presence?: number;
|
||||
}>;
|
||||
annotations: Record<string, Point[][]>;
|
||||
keypoints: Array<BodyKeypoint>;
|
||||
}
|
||||
/** 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