mirror of https://github.com/vladmandic/human
add ts demo
parent
90727ea057
commit
b3cd972ff5
15
.build.json
15
.build.json
|
@ -145,6 +145,7 @@
|
|||
{
|
||||
"name": "tfjs/browser/esm/custom",
|
||||
"platform": "browser",
|
||||
"target": "esnext",
|
||||
"format": "esm",
|
||||
"input": "tfjs/tf-custom.ts",
|
||||
"output": "dist/tfjs.esm.js",
|
||||
|
@ -154,6 +155,7 @@
|
|||
{
|
||||
"name": "human/browser/esm/custom",
|
||||
"platform": "browser",
|
||||
"target": "esnext",
|
||||
"format": "esm",
|
||||
"input": "src/human.ts",
|
||||
"output": "dist/human.custom.esm.js",
|
||||
|
@ -162,11 +164,22 @@
|
|||
"external": ["fs", "os", "buffer", "util"],
|
||||
"typings": "types",
|
||||
"typedoc": "typedoc"
|
||||
},
|
||||
{
|
||||
"name": "demo/browser",
|
||||
"platform": "browser",
|
||||
"target": "esnext",
|
||||
"format": "esm",
|
||||
"input": "demo/typescript/index.ts",
|
||||
"output": "demo/typescript/index.js",
|
||||
"sourcemap": true,
|
||||
"minify": false,
|
||||
"external": ["*/human.custom.esm.js"]
|
||||
}
|
||||
]
|
||||
},
|
||||
"watch": {
|
||||
"locations": [ "src/**/*", "tfjs/**/*" ]
|
||||
"locations": [ "src/**/*", "tfjs/**/*", "demo/**/*.ts" ]
|
||||
},
|
||||
"typescript": {
|
||||
"allowJs": false
|
||||
|
|
|
@ -27,7 +27,8 @@
|
|||
],
|
||||
"ignorePatterns": [
|
||||
"assets",
|
||||
"demo/helpers",
|
||||
"demo/helpers/*.js",
|
||||
"demo/typescript/*.js",
|
||||
"dist",
|
||||
"media",
|
||||
"models",
|
||||
|
|
|
@ -11,6 +11,7 @@
|
|||
|
||||
### **HEAD -> main** 2021/10/26 mandic00@live.com
|
||||
|
||||
- switch to custom tfjs for demos
|
||||
|
||||
### **release: 2.4.1** 2021/10/25 mandic00@live.com
|
||||
|
||||
|
|
|
@ -415,7 +415,7 @@ async function setupCamera() {
|
|||
}
|
||||
const track = stream.getVideoTracks()[0];
|
||||
const settings = track.getSettings();
|
||||
if (initialCameraAccess) log('selected video source:', track, settings); // log('selected camera:', track.label, 'id:', settings.deviceId);
|
||||
if (initialCameraAccess) log('selected video source:', track, settings);
|
||||
ui.camera = { name: track.label.toLowerCase(), width: settings.width, height: settings.height, facing: settings.facingMode === 'user' ? 'front' : 'back' };
|
||||
initialCameraAccess = false;
|
||||
|
||||
|
|
|
@ -14,7 +14,7 @@
|
|||
<link rel="apple-touch-icon" href="../../assets/icon.png">
|
||||
<script src="./index.js" type="module"></script>
|
||||
<style>
|
||||
@font-face { font-family: 'Lato'; font-display: swap; font-style: normal; font-weight: 100; src: local('Lato'), url('../assets/lato-light.woff2') }
|
||||
@font-face { font-family: 'Lato'; font-display: swap; font-style: normal; font-weight: 100; src: local('Lato'), url('../../assets/lato-light.woff2') }
|
||||
html { font-family: 'Lato', 'Segoe UI'; font-size: 16px; font-variant: small-caps; }
|
||||
body { margin: 0; background: black; color: white; overflow-x: hidden; width: 100vw; height: 100vh; text-align: center; }
|
||||
body::-webkit-scrollbar { display: none; }
|
||||
|
|
|
@ -0,0 +1,28 @@
|
|||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<title>Human</title>
|
||||
<meta name="viewport" content="width=device-width" id="viewport">
|
||||
<meta name="keywords" content="Human">
|
||||
<meta name="application-name" content="Human">
|
||||
<meta name="description" content="Human: 3D Face Detection, Body Pose, Hand & Finger Tracking, Iris Tracking, Age & Gender Prediction, Emotion Prediction & Gesture Recognition; Author: Vladimir Mandic <https://github.com/vladmandic>">
|
||||
<meta name="msapplication-tooltip" content="Human: 3D Face Detection, Body Pose, Hand & Finger Tracking, Iris Tracking, Age & Gender Prediction, Emotion Prediction & Gesture Recognition; Author: Vladimir Mandic <https://github.com/vladmandic>">
|
||||
<meta name="theme-color" content="#000000">
|
||||
<link rel="manifest" href="../manifest.webmanifest">
|
||||
<link rel="shortcut icon" href="../../favicon.ico" type="image/x-icon">
|
||||
<link rel="apple-touch-icon" href="../../assets/icon.png">
|
||||
<script src="./index.js" type="module"></script>
|
||||
<style>
|
||||
@font-face { font-family: 'Lato'; font-display: swap; font-style: normal; font-weight: 100; src: local('Lato'), url('../../assets/lato-light.woff2') }
|
||||
html { font-family: 'Lato', 'Segoe UI'; font-size: 16px; font-variant: small-caps; }
|
||||
body { margin: 0; background: black; color: white; overflow-x: hidden; width: 100vw; height: 100vh; text-align: center; }
|
||||
body::-webkit-scrollbar { display: none; }
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<canvas id="canvas" style="margin: 0 auto; width: 100%"></canvas>
|
||||
<video id="video" playsinline style="display: none"></video>
|
||||
<pre id="status" style="position: absolute; top: 20px; right: 20px; background-color: grey; padding: 8px; box-shadow: 2px 2px black"></pre>
|
||||
</body>
|
||||
</html>
|
|
@ -0,0 +1,77 @@
|
|||
/*
|
||||
Human
|
||||
homepage: <https://github.com/vladmandic/human>
|
||||
author: <https://github.com/vladmandic>'
|
||||
*/
|
||||
|
||||
// demo/typescript/index.ts
|
||||
import Human from "../../dist/human.custom.esm.js";
|
||||
var config = {
|
||||
modelBasePath: "../../models",
|
||||
backend: "humangl"
|
||||
};
|
||||
var human = new Human(config);
|
||||
var result;
|
||||
var video = document.getElementById("video");
|
||||
var canvas = document.getElementById("canvas");
|
||||
var fps = { detect: 0, draw: 0, element: document.getElementById("status") };
|
||||
var log = (...msg) => console.log(...msg);
|
||||
var status = (msg) => {
|
||||
if (fps.element)
|
||||
fps.element.innerText = msg;
|
||||
};
|
||||
async function webCam() {
|
||||
status("starting webcam...");
|
||||
const options = { audio: false, video: { facingMode: "user", resizeMode: "none", width: { ideal: document.body.clientWidth } } };
|
||||
const stream = await navigator.mediaDevices.getUserMedia(options);
|
||||
const ready = new Promise((resolve) => {
|
||||
video.onloadeddata = () => resolve(true);
|
||||
});
|
||||
video.srcObject = stream;
|
||||
video.play();
|
||||
await ready;
|
||||
canvas.width = video.videoWidth;
|
||||
canvas.height = video.videoHeight;
|
||||
const track = stream.getVideoTracks()[0];
|
||||
const capabilities = track.getCapabilities();
|
||||
const settings = track.getSettings();
|
||||
const constraints = track.getConstraints();
|
||||
log("video:", video.videoWidth, video.videoHeight, { stream, track, settings, constraints, capabilities });
|
||||
canvas.onclick = () => {
|
||||
if (video.paused)
|
||||
video.play();
|
||||
else
|
||||
video.pause();
|
||||
};
|
||||
}
|
||||
async function detectionLoop() {
|
||||
const t0 = human.now();
|
||||
if (!video.paused)
|
||||
result = await human.detect(video);
|
||||
const t1 = human.now();
|
||||
fps.detect = 1e3 / (t1 - t0);
|
||||
requestAnimationFrame(detectionLoop);
|
||||
}
|
||||
async function drawLoop() {
|
||||
const t0 = human.now();
|
||||
if (!video.paused) {
|
||||
const interpolated = await human.next(result);
|
||||
await human.draw.canvas(video, canvas);
|
||||
await human.draw.all(canvas, interpolated);
|
||||
}
|
||||
const t1 = human.now();
|
||||
fps.draw = 1e3 / (t1 - t0);
|
||||
status(video.paused ? "paused" : `fps: ${fps.detect.toFixed(1).padStart(5, " ")} detect / ${fps.draw.toFixed(1).padStart(5, " ")} draw`);
|
||||
requestAnimationFrame(drawLoop);
|
||||
}
|
||||
async function main() {
|
||||
status("loading...");
|
||||
await human.load();
|
||||
status("initializing...");
|
||||
await human.warmup();
|
||||
await webCam();
|
||||
await detectionLoop();
|
||||
await drawLoop();
|
||||
}
|
||||
window.onload = main;
|
||||
//# sourceMappingURL=index.js.map
|
|
@ -0,0 +1,7 @@
|
|||
{
|
||||
"version": 3,
|
||||
"sources": ["index.ts"],
|
||||
"sourcesContent": ["/**\n * Human demo for browsers\n * @description Simple Human demo for browsers using WebCam\n */\n\nimport Human from '../../dist/human.custom.esm.js'; // equivalent of @vladmandic/human\n\nconst config = {\n modelBasePath: '../../models',\n backend: 'humangl',\n};\n\nconst human = new Human(config);\nlet result;\n\nconst video = document.getElementById('video') as HTMLVideoElement;\nconst canvas = document.getElementById('canvas') as HTMLCanvasElement;\nconst fps = { detect: 0, draw: 0, element: document.getElementById('status') };\n\n// eslint-disable-next-line no-console\nconst log = (...msg) => console.log(...msg);\nconst status = (msg) => { if (fps.element) fps.element.innerText = msg; };\n\nasync function webCam() {\n status('starting webcam...');\n const options = { audio: false, video: { facingMode: 'user', resizeMode: 'none', width: { ideal: document.body.clientWidth } } };\n const stream: MediaStream = await navigator.mediaDevices.getUserMedia(options);\n const ready = new Promise((resolve) => { video.onloadeddata = () => resolve(true); });\n video.srcObject = stream;\n video.play();\n await ready;\n canvas.width = video.videoWidth;\n canvas.height = video.videoHeight;\n const track: MediaStreamTrack = stream.getVideoTracks()[0];\n const capabilities: MediaTrackCapabilities = track.getCapabilities();\n const settings: MediaTrackSettings = track.getSettings();\n const constraints: MediaTrackConstraints = track.getConstraints();\n log('video:', video.videoWidth, video.videoHeight, { stream, track, settings, constraints, capabilities });\n canvas.onclick = () => {\n if (video.paused) video.play();\n else video.pause();\n };\n}\n\nasync function detectionLoop() {\n const t0 = human.now();\n if (!video.paused) result = await human.detect(video);\n const t1 = human.now();\n fps.detect = 1000 / (t1 - t0);\n requestAnimationFrame(detectionLoop);\n}\n\nasync function drawLoop() {\n const t0 = human.now();\n if (!video.paused) {\n const interpolated = await human.next(result);\n await human.draw.canvas(video, canvas);\n await human.draw.all(canvas, interpolated);\n }\n const t1 = human.now();\n fps.draw = 1000 / (t1 - t0);\n status(video.paused ? 'paused' : `fps: ${fps.detect.toFixed(1).padStart(5, ' ')} detect / ${fps.draw.toFixed(1).padStart(5, ' ')} draw`);\n requestAnimationFrame(drawLoop);\n}\n\nasync function main() {\n status('loading...');\n await human.load();\n status('initializing...');\n await human.warmup();\n await webCam();\n await detectionLoop();\n await drawLoop();\n}\n\nwindow.onload = main;\n"],
|
||||
"mappings": ";;;;;;;AAKA;AAEA,IAAM,SAAS;AAAA,EACb,eAAe;AAAA,EACf,SAAS;AAAA;AAGX,IAAM,QAAQ,IAAI,MAAM;AACxB,IAAI;AAEJ,IAAM,QAAQ,SAAS,eAAe;AACtC,IAAM,SAAS,SAAS,eAAe;AACvC,IAAM,MAAM,EAAE,QAAQ,GAAG,MAAM,GAAG,SAAS,SAAS,eAAe;AAGnE,IAAM,MAAM,IAAI,QAAQ,QAAQ,IAAI,GAAG;AACvC,IAAM,SAAS,CAAC,QAAQ;AAAE,MAAI,IAAI;AAAS,QAAI,QAAQ,YAAY;AAAA;AAEnE,wBAAwB;AACtB,SAAO;AACP,QAAM,UAAU,EAAE,OAAO,OAAO,OAAO,EAAE,YAAY,QAAQ,YAAY,QAAQ,OAAO,EAAE,OAAO,SAAS,KAAK;AAC/G,QAAM,SAAsB,MAAM,UAAU,aAAa,aAAa;AACtE,QAAM,QAAQ,IAAI,QAAQ,CAAC,YAAY;AAAE,UAAM,eAAe,MAAM,QAAQ;AAAA;AAC5E,QAAM,YAAY;AAClB,QAAM;AACN,QAAM;AACN,SAAO,QAAQ,MAAM;AACrB,SAAO,SAAS,MAAM;AACtB,QAAM,QAA0B,OAAO,iBAAiB;AACxD,QAAM,eAAuC,MAAM;AACnD,QAAM,WAA+B,MAAM;AAC3C,QAAM,cAAqC,MAAM;AACjD,MAAI,UAAU,MAAM,YAAY,MAAM,aAAa,EAAE,QAAQ,OAAO,UAAU,aAAa;AAC3F,SAAO,UAAU,MAAM;AACrB,QAAI,MAAM;AAAQ,YAAM;AAAA;AACnB,YAAM;AAAA;AAAA;AAIf,+BAA+B;AAC7B,QAAM,KAAK,MAAM;AACjB,MAAI,CAAC,MAAM;AAAQ,aAAS,MAAM,MAAM,OAAO;AAC/C,QAAM,KAAK,MAAM;AACjB,MAAI,SAAS,MAAQ,MAAK;AAC1B,wBAAsB;AAAA;AAGxB,0BAA0B;AACxB,QAAM,KAAK,MAAM;AACjB,MAAI,CAAC,MAAM,QAAQ;AACjB,UAAM,eAAe,MAAM,MAAM,KAAK;AACtC,UAAM,MAAM,KAAK,OAAO,OAAO;AAC/B,UAAM,MAAM,KAAK,IAAI,QAAQ;AAAA;AAE/B,QAAM,KAAK,MAAM;AACjB,MAAI,OAAO,MAAQ,MAAK;AACxB,SAAO,MAAM,SAAS,WAAW,QAAQ,IAAI,OAAO,QAAQ,GAAG,SAAS,GAAG,iBAAiB,IAAI,KAAK,QAAQ,GAAG,SAAS,GAAG;AAC5H,wBAAsB;AAAA;AAGxB,sBAAsB;AACpB,SAAO;AACP,QAAM,MAAM;AACZ,SAAO;AACP,QAAM,MAAM;AACZ,QAAM;AACN,QAAM;AACN,QAAM;AAAA;AAGR,OAAO,SAAS;",
|
||||
"names": []
|
||||
}
|
|
@ -0,0 +1,76 @@
|
|||
/**
|
||||
* Human demo for browsers
|
||||
* @description Simple Human demo for browsers using WebCam
|
||||
*/
|
||||
|
||||
import Human from '../../dist/human.custom.esm.js'; // equivalent of @vladmandic/human
|
||||
|
||||
const config = {
|
||||
modelBasePath: '../../models',
|
||||
backend: 'humangl',
|
||||
};
|
||||
|
||||
const human = new Human(config);
|
||||
let result;
|
||||
|
||||
const video = document.getElementById('video') as HTMLVideoElement;
|
||||
const canvas = document.getElementById('canvas') as HTMLCanvasElement;
|
||||
const fps = { detect: 0, draw: 0, element: document.getElementById('status') };
|
||||
|
||||
// eslint-disable-next-line no-console
|
||||
const log = (...msg) => console.log(...msg);
|
||||
const status = (msg) => { if (fps.element) fps.element.innerText = msg; };
|
||||
|
||||
async function webCam() {
|
||||
status('starting webcam...');
|
||||
const options = { audio: false, video: { facingMode: 'user', resizeMode: 'none', width: { ideal: document.body.clientWidth } } };
|
||||
const stream: MediaStream = await navigator.mediaDevices.getUserMedia(options);
|
||||
const ready = new Promise((resolve) => { video.onloadeddata = () => resolve(true); });
|
||||
video.srcObject = stream;
|
||||
video.play();
|
||||
await ready;
|
||||
canvas.width = video.videoWidth;
|
||||
canvas.height = video.videoHeight;
|
||||
const track: MediaStreamTrack = stream.getVideoTracks()[0];
|
||||
const capabilities: MediaTrackCapabilities = track.getCapabilities();
|
||||
const settings: MediaTrackSettings = track.getSettings();
|
||||
const constraints: MediaTrackConstraints = track.getConstraints();
|
||||
log('video:', video.videoWidth, video.videoHeight, { stream, track, settings, constraints, capabilities });
|
||||
canvas.onclick = () => {
|
||||
if (video.paused) video.play();
|
||||
else video.pause();
|
||||
};
|
||||
}
|
||||
|
||||
async function detectionLoop() {
|
||||
const t0 = human.now();
|
||||
if (!video.paused) result = await human.detect(video);
|
||||
const t1 = human.now();
|
||||
fps.detect = 1000 / (t1 - t0);
|
||||
requestAnimationFrame(detectionLoop);
|
||||
}
|
||||
|
||||
async function drawLoop() {
|
||||
const t0 = human.now();
|
||||
if (!video.paused) {
|
||||
const interpolated = await human.next(result);
|
||||
await human.draw.canvas(video, canvas);
|
||||
await human.draw.all(canvas, interpolated);
|
||||
}
|
||||
const t1 = human.now();
|
||||
fps.draw = 1000 / (t1 - t0);
|
||||
status(video.paused ? 'paused' : `fps: ${fps.detect.toFixed(1).padStart(5, ' ')} detect / ${fps.draw.toFixed(1).padStart(5, ' ')} draw`);
|
||||
requestAnimationFrame(drawLoop);
|
||||
}
|
||||
|
||||
async function main() {
|
||||
status('loading...');
|
||||
await human.load();
|
||||
status('initializing...');
|
||||
await human.warmup();
|
||||
await webCam();
|
||||
await detectionLoop();
|
||||
await drawLoop();
|
||||
}
|
||||
|
||||
window.onload = main;
|
|
@ -5,7 +5,6 @@
|
|||
*/
|
||||
|
||||
var __defProp = Object.defineProperty;
|
||||
var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
|
||||
var __markAsModule = (target) => __defProp(target, "__esModule", { value: true });
|
||||
var __require = /* @__PURE__ */ ((x) => typeof require !== "undefined" ? require : typeof Proxy !== "undefined" ? new Proxy(x, {
|
||||
get: (a, b) => (typeof require !== "undefined" ? require : a)[b]
|
||||
|
@ -19,28 +18,6 @@ var __export = (target, all6) => {
|
|||
for (var name in all6)
|
||||
__defProp(target, name, { get: all6[name], enumerable: true });
|
||||
};
|
||||
var __publicField = (obj, key, value) => {
|
||||
__defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
|
||||
return value;
|
||||
};
|
||||
var __accessCheck = (obj, member, msg) => {
|
||||
if (!member.has(obj))
|
||||
throw TypeError("Cannot " + msg);
|
||||
};
|
||||
var __privateGet = (obj, member, getter) => {
|
||||
__accessCheck(obj, member, "read from private field");
|
||||
return getter ? getter.call(obj) : member.get(obj);
|
||||
};
|
||||
var __privateAdd = (obj, member, value) => {
|
||||
if (member.has(obj))
|
||||
throw TypeError("Cannot add the same private member more than once");
|
||||
member instanceof WeakSet ? member.add(obj) : member.set(obj, value);
|
||||
};
|
||||
var __privateSet = (obj, member, value, setter) => {
|
||||
__accessCheck(obj, member, "write to private field");
|
||||
setter ? setter.call(obj, value) : member.set(obj, value);
|
||||
return value;
|
||||
};
|
||||
|
||||
// src/util/util.ts
|
||||
function join(folder, file) {
|
||||
|
@ -70597,19 +70574,11 @@ var collect = (source, prefix, collection) => {
|
|||
});
|
||||
};
|
||||
var GLProgram = class {
|
||||
uniform = {};
|
||||
attribute = {};
|
||||
gl;
|
||||
id;
|
||||
constructor(gl, vertexSource, fragmentSource) {
|
||||
__publicField(this, "uniform", {});
|
||||
__publicField(this, "attribute", {});
|
||||
__publicField(this, "gl");
|
||||
__publicField(this, "id");
|
||||
__publicField(this, "compile", (source, type) => {
|
||||
const shader = this.gl.createShader(type);
|
||||
this.gl.shaderSource(shader, source);
|
||||
this.gl.compileShader(shader);
|
||||
if (!this.gl.getShaderParameter(shader, this.gl.COMPILE_STATUS))
|
||||
throw new Error(`filter: gl compile failed: ${this.gl.getShaderInfoLog(shader)}`);
|
||||
return shader;
|
||||
});
|
||||
this.gl = gl;
|
||||
const vertexShader = this.compile(vertexSource, this.gl.VERTEX_SHADER);
|
||||
const fragmentShader = this.compile(fragmentSource, this.gl.FRAGMENT_SHADER);
|
||||
|
@ -70628,6 +70597,14 @@ var GLProgram = class {
|
|||
for (const u in this.uniform)
|
||||
this.uniform[u] = this.gl.getUniformLocation(this.id, u);
|
||||
}
|
||||
compile = (source, type) => {
|
||||
const shader = this.gl.createShader(type);
|
||||
this.gl.shaderSource(shader, source);
|
||||
this.gl.compileShader(shader);
|
||||
if (!this.gl.getShaderParameter(shader, this.gl.COMPILE_STATUS))
|
||||
throw new Error(`filter: gl compile failed: ${this.gl.getShaderInfoLog(shader)}`);
|
||||
return shader;
|
||||
};
|
||||
};
|
||||
function GLImageFilter() {
|
||||
let drawCount = 0;
|
||||
|
@ -71399,43 +71376,43 @@ async function skip(config3, input2) {
|
|||
|
||||
// src/util/env.ts
|
||||
var Env = class {
|
||||
browser;
|
||||
node;
|
||||
worker;
|
||||
platform = "";
|
||||
agent = "";
|
||||
backends = [];
|
||||
initial;
|
||||
filter;
|
||||
tfjs;
|
||||
offscreen;
|
||||
perfadd = false;
|
||||
wasm = {
|
||||
supported: void 0,
|
||||
backend: void 0,
|
||||
simd: void 0,
|
||||
multithread: void 0
|
||||
};
|
||||
webgl = {
|
||||
supported: void 0,
|
||||
backend: void 0,
|
||||
version: void 0,
|
||||
renderer: void 0
|
||||
};
|
||||
webgpu = {
|
||||
supported: void 0,
|
||||
backend: void 0,
|
||||
adapter: void 0
|
||||
};
|
||||
cpu = {
|
||||
model: void 0,
|
||||
flags: []
|
||||
};
|
||||
kernels = [];
|
||||
Canvas;
|
||||
Image;
|
||||
ImageData;
|
||||
constructor() {
|
||||
__publicField(this, "browser");
|
||||
__publicField(this, "node");
|
||||
__publicField(this, "worker");
|
||||
__publicField(this, "platform", "");
|
||||
__publicField(this, "agent", "");
|
||||
__publicField(this, "backends", []);
|
||||
__publicField(this, "initial");
|
||||
__publicField(this, "filter");
|
||||
__publicField(this, "tfjs");
|
||||
__publicField(this, "offscreen");
|
||||
__publicField(this, "perfadd", false);
|
||||
__publicField(this, "wasm", {
|
||||
supported: void 0,
|
||||
backend: void 0,
|
||||
simd: void 0,
|
||||
multithread: void 0
|
||||
});
|
||||
__publicField(this, "webgl", {
|
||||
supported: void 0,
|
||||
backend: void 0,
|
||||
version: void 0,
|
||||
renderer: void 0
|
||||
});
|
||||
__publicField(this, "webgpu", {
|
||||
supported: void 0,
|
||||
backend: void 0,
|
||||
adapter: void 0
|
||||
});
|
||||
__publicField(this, "cpu", {
|
||||
model: void 0,
|
||||
flags: []
|
||||
});
|
||||
__publicField(this, "kernels", []);
|
||||
__publicField(this, "Canvas");
|
||||
__publicField(this, "Image");
|
||||
__publicField(this, "ImageData");
|
||||
this.browser = typeof navigator !== "undefined";
|
||||
this.node = typeof process !== "undefined";
|
||||
this.tfjs = { version: version_core };
|
||||
|
@ -79049,13 +79026,13 @@ var anchors2 = [
|
|||
|
||||
// src/hand/handposedetector.ts
|
||||
var HandDetector = class {
|
||||
model;
|
||||
anchors;
|
||||
anchorsTensor;
|
||||
inputSize;
|
||||
inputSizeTensor;
|
||||
doubleInputSizeTensor;
|
||||
constructor(model15) {
|
||||
__publicField(this, "model");
|
||||
__publicField(this, "anchors");
|
||||
__publicField(this, "anchorsTensor");
|
||||
__publicField(this, "inputSize");
|
||||
__publicField(this, "inputSizeTensor");
|
||||
__publicField(this, "doubleInputSizeTensor");
|
||||
this.model = model15;
|
||||
this.anchors = anchors2.map((anchor) => [anchor.x, anchor.y]);
|
||||
this.anchorsTensor = tensor2d(this.anchors);
|
||||
|
@ -79130,13 +79107,13 @@ var palmLandmarksPalmBase = 0;
|
|||
var palmLandmarksMiddleFingerBase = 2;
|
||||
var lastTime8 = 0;
|
||||
var HandPipeline = class {
|
||||
handDetector;
|
||||
handPoseModel;
|
||||
inputSize;
|
||||
storedBoxes;
|
||||
skipped;
|
||||
detectedHands;
|
||||
constructor(handDetector, handPoseModel2) {
|
||||
__publicField(this, "handDetector");
|
||||
__publicField(this, "handPoseModel");
|
||||
__publicField(this, "inputSize");
|
||||
__publicField(this, "storedBoxes");
|
||||
__publicField(this, "skipped");
|
||||
__publicField(this, "detectedHands");
|
||||
this.handDetector = handDetector;
|
||||
this.handPoseModel = handPoseModel2;
|
||||
this.inputSize = this.handPoseModel && this.handPoseModel.inputs[0].shape ? this.handPoseModel.inputs[0].shape[2] : 0;
|
||||
|
@ -79307,12 +79284,12 @@ var FingerDirection = {
|
|||
getName: (value) => FingerDirection.nameMapping[value]
|
||||
};
|
||||
var FingerGesture = class {
|
||||
name;
|
||||
curls;
|
||||
directions;
|
||||
weights;
|
||||
weightsRelative;
|
||||
constructor(name) {
|
||||
__publicField(this, "name");
|
||||
__publicField(this, "curls");
|
||||
__publicField(this, "directions");
|
||||
__publicField(this, "weights");
|
||||
__publicField(this, "weightsRelative");
|
||||
this.name = name;
|
||||
this.curls = {};
|
||||
this.directions = {};
|
||||
|
@ -80463,10 +80440,10 @@ function scalePoses(poses, [height, width], [inputResolutionHeight, inputResolut
|
|||
return scaledPoses;
|
||||
}
|
||||
var MaxHeap = class {
|
||||
priorityQueue;
|
||||
numberOfElements;
|
||||
getElementValue;
|
||||
constructor(maxSize2, getElementValue) {
|
||||
__publicField(this, "priorityQueue");
|
||||
__publicField(this, "numberOfElements");
|
||||
__publicField(this, "getElementValue");
|
||||
this.priorityQueue = new Array(maxSize2);
|
||||
this.numberOfElements = -1;
|
||||
this.getElementValue = getElementValue;
|
||||
|
@ -80795,29 +80772,27 @@ async function process5(input2, background, config3) {
|
|||
|
||||
// src/models.ts
|
||||
var Models = class {
|
||||
constructor() {
|
||||
__publicField(this, "age", null);
|
||||
__publicField(this, "agegenderrace", null);
|
||||
__publicField(this, "blazeposedetect", null);
|
||||
__publicField(this, "blazepose", null);
|
||||
__publicField(this, "centernet", null);
|
||||
__publicField(this, "efficientpose", null);
|
||||
__publicField(this, "embedding", null);
|
||||
__publicField(this, "emotion", null);
|
||||
__publicField(this, "facedetect", null);
|
||||
__publicField(this, "faceiris", null);
|
||||
__publicField(this, "facemesh", null);
|
||||
__publicField(this, "faceres", null);
|
||||
__publicField(this, "gender", null);
|
||||
__publicField(this, "handpose", null);
|
||||
__publicField(this, "handskeleton", null);
|
||||
__publicField(this, "handtrack", null);
|
||||
__publicField(this, "movenet", null);
|
||||
__publicField(this, "nanodet", null);
|
||||
__publicField(this, "posenet", null);
|
||||
__publicField(this, "segmentation", null);
|
||||
__publicField(this, "antispoof", null);
|
||||
}
|
||||
age = null;
|
||||
agegenderrace = null;
|
||||
blazeposedetect = null;
|
||||
blazepose = null;
|
||||
centernet = null;
|
||||
efficientpose = null;
|
||||
embedding = null;
|
||||
emotion = null;
|
||||
facedetect = null;
|
||||
faceiris = null;
|
||||
facemesh = null;
|
||||
faceres = null;
|
||||
gender = null;
|
||||
handpose = null;
|
||||
handskeleton = null;
|
||||
handtrack = null;
|
||||
movenet = null;
|
||||
nanodet = null;
|
||||
posenet = null;
|
||||
segmentation = null;
|
||||
antispoof = null;
|
||||
};
|
||||
function reset(instance) {
|
||||
for (const model15 of Object.keys(instance.models))
|
||||
|
@ -82926,57 +82901,25 @@ async function warmup(instance, userConfig) {
|
|||
}
|
||||
|
||||
// src/human.ts
|
||||
var _numTensors, _analyzeMemoryLeaks, _checkSanity, _sanity;
|
||||
var Human = class {
|
||||
version;
|
||||
config;
|
||||
result;
|
||||
state;
|
||||
process;
|
||||
tf;
|
||||
env;
|
||||
draw;
|
||||
models;
|
||||
events;
|
||||
faceTriangulation;
|
||||
faceUVMap;
|
||||
performance;
|
||||
#numTensors;
|
||||
#analyzeMemoryLeaks;
|
||||
#checkSanity;
|
||||
gl;
|
||||
constructor(userConfig) {
|
||||
__publicField(this, "version");
|
||||
__publicField(this, "config");
|
||||
__publicField(this, "result");
|
||||
__publicField(this, "state");
|
||||
__publicField(this, "process");
|
||||
__publicField(this, "tf");
|
||||
__publicField(this, "env");
|
||||
__publicField(this, "draw");
|
||||
__publicField(this, "models");
|
||||
__publicField(this, "events");
|
||||
__publicField(this, "faceTriangulation");
|
||||
__publicField(this, "faceUVMap");
|
||||
__publicField(this, "performance");
|
||||
__privateAdd(this, _numTensors, void 0);
|
||||
__privateAdd(this, _analyzeMemoryLeaks, void 0);
|
||||
__privateAdd(this, _checkSanity, void 0);
|
||||
__publicField(this, "gl");
|
||||
__publicField(this, "analyze", (...msg) => {
|
||||
if (!__privateGet(this, _analyzeMemoryLeaks))
|
||||
return;
|
||||
const currentTensors = this.tf.engine().state.numTensors;
|
||||
const previousTensors = __privateGet(this, _numTensors);
|
||||
__privateSet(this, _numTensors, currentTensors);
|
||||
const leaked = currentTensors - previousTensors;
|
||||
if (leaked !== 0)
|
||||
log(...msg, leaked);
|
||||
});
|
||||
__privateAdd(this, _sanity, (input2) => {
|
||||
if (!__privateGet(this, _checkSanity))
|
||||
return null;
|
||||
if (!input2)
|
||||
return "input is not defined";
|
||||
if (this.env.node && !(input2 instanceof Tensor))
|
||||
return "input must be a tensor";
|
||||
try {
|
||||
this.tf.getBackend();
|
||||
} catch {
|
||||
return "backend not loaded";
|
||||
}
|
||||
return null;
|
||||
});
|
||||
__publicField(this, "similarity", similarity);
|
||||
__publicField(this, "distance", distance);
|
||||
__publicField(this, "match", match2);
|
||||
__publicField(this, "emit", (event) => {
|
||||
if (this.events && this.events.dispatchEvent)
|
||||
this.events?.dispatchEvent(new Event(event));
|
||||
});
|
||||
this.env = env2;
|
||||
config.wasmPath = version_core.includes("-") ? "https://vladmandic.github.io/tfjs/dist/" : `https://cdn.jsdelivr.net/npm/@tensorflow/tfjs-backend-wasm@${version_core}/dist/`;
|
||||
config.modelBasePath = env2.browser ? "../models/" : "file://models/";
|
||||
|
@ -82989,9 +82932,9 @@ var Human = class {
|
|||
this.config = mergeDeep(this.config, userConfig);
|
||||
this.tf = tfjs_esm_exports;
|
||||
this.state = "idle";
|
||||
__privateSet(this, _numTensors, 0);
|
||||
__privateSet(this, _analyzeMemoryLeaks, false);
|
||||
__privateSet(this, _checkSanity, false);
|
||||
this.#numTensors = 0;
|
||||
this.#analyzeMemoryLeaks = false;
|
||||
this.#checkSanity = false;
|
||||
this.performance = { backend: 0, load: 0, image: 0, frames: 0, cached: 0, changed: 0, total: 0, draw: 0 };
|
||||
this.events = typeof EventTarget !== "undefined" ? new EventTarget() : void 0;
|
||||
this.models = new Models();
|
||||
|
@ -83013,6 +82956,30 @@ var Human = class {
|
|||
this.gl = config2;
|
||||
this.emit("create");
|
||||
}
|
||||
analyze = (...msg) => {
|
||||
if (!this.#analyzeMemoryLeaks)
|
||||
return;
|
||||
const currentTensors = this.tf.engine().state.numTensors;
|
||||
const previousTensors = this.#numTensors;
|
||||
this.#numTensors = currentTensors;
|
||||
const leaked = currentTensors - previousTensors;
|
||||
if (leaked !== 0)
|
||||
log(...msg, leaked);
|
||||
};
|
||||
#sanity = (input2) => {
|
||||
if (!this.#checkSanity)
|
||||
return null;
|
||||
if (!input2)
|
||||
return "input is not defined";
|
||||
if (this.env.node && !(input2 instanceof Tensor))
|
||||
return "input must be a tensor";
|
||||
try {
|
||||
this.tf.getBackend();
|
||||
} catch {
|
||||
return "backend not loaded";
|
||||
}
|
||||
return null;
|
||||
};
|
||||
reset() {
|
||||
const currentBackend = this.config.backend;
|
||||
this.config = JSON.parse(JSON.stringify(config));
|
||||
|
@ -83021,6 +82988,9 @@ var Human = class {
|
|||
validate(userConfig) {
|
||||
return validate(config, userConfig || this.config);
|
||||
}
|
||||
similarity = similarity;
|
||||
distance = distance;
|
||||
match = match2;
|
||||
now() {
|
||||
return now();
|
||||
}
|
||||
|
@ -83054,6 +83024,8 @@ var Human = class {
|
|||
if (this.env.browser) {
|
||||
if (this.config.debug)
|
||||
log("configuration:", this.config);
|
||||
if (this.config.debug)
|
||||
log("environment:", this.env);
|
||||
if (this.config.debug)
|
||||
log("tf flags:", this.tf.ENV["flags"]);
|
||||
}
|
||||
|
@ -83071,6 +83043,10 @@ var Human = class {
|
|||
if (current > (this.performance.load || 0))
|
||||
this.performance.load = this.env.perfadd ? (this.performance.load || 0) + current : current;
|
||||
}
|
||||
emit = (event) => {
|
||||
if (this.events && this.events.dispatchEvent)
|
||||
this.events?.dispatchEvent(new Event(event));
|
||||
};
|
||||
next(result = this.result) {
|
||||
return calc2(result, this.config);
|
||||
}
|
||||
|
@ -83084,7 +83060,7 @@ var Human = class {
|
|||
let timeStamp;
|
||||
this.config = mergeDeep(this.config, userConfig);
|
||||
this.state = "check";
|
||||
const error = __privateGet(this, _sanity).call(this, input2);
|
||||
const error = this.#sanity(input2);
|
||||
if (error) {
|
||||
log(error, input2);
|
||||
resolve({ error });
|
||||
|
@ -83231,10 +83207,6 @@ var Human = class {
|
|||
});
|
||||
}
|
||||
};
|
||||
_numTensors = new WeakMap();
|
||||
_analyzeMemoryLeaks = new WeakMap();
|
||||
_checkSanity = new WeakMap();
|
||||
_sanity = new WeakMap();
|
||||
export {
|
||||
Human,
|
||||
Human as default,
|
||||
|
|
File diff suppressed because one or more lines are too long
|
@ -12824,6 +12824,8 @@ var Human = class {
|
|||
if (this.env.browser) {
|
||||
if (this.config.debug)
|
||||
log("configuration:", this.config);
|
||||
if (this.config.debug)
|
||||
log("environment:", this.env);
|
||||
if (this.config.debug)
|
||||
log("tf flags:", this.tf.ENV["flags"]);
|
||||
}
|
||||
|
|
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
|
@ -12883,6 +12883,8 @@ var Human = class {
|
|||
if (this.env.browser) {
|
||||
if (this.config.debug)
|
||||
log("configuration:", this.config);
|
||||
if (this.config.debug)
|
||||
log("environment:", this.env);
|
||||
if (this.config.debug)
|
||||
log("tf flags:", this.tf.ENV["flags"]);
|
||||
}
|
||||
|
|
|
@ -12884,6 +12884,8 @@ var Human = class {
|
|||
if (this.env.browser) {
|
||||
if (this.config.debug)
|
||||
log("configuration:", this.config);
|
||||
if (this.config.debug)
|
||||
log("environment:", this.env);
|
||||
if (this.config.debug)
|
||||
log("tf flags:", this.tf.ENV["flags"]);
|
||||
}
|
||||
|
|
|
@ -12883,6 +12883,8 @@ var Human = class {
|
|||
if (this.env.browser) {
|
||||
if (this.config.debug)
|
||||
log("configuration:", this.config);
|
||||
if (this.config.debug)
|
||||
log("environment:", this.env);
|
||||
if (this.config.debug)
|
||||
log("tf flags:", this.tf.ENV["flags"]);
|
||||
}
|
||||
|
|
|
@ -294,6 +294,7 @@ export class Human {
|
|||
await tf.ready();
|
||||
if (this.env.browser) {
|
||||
if (this.config.debug) log('configuration:', this.config);
|
||||
if (this.config.debug) log('environment:', this.env);
|
||||
if (this.config.debug) log('tf flags:', this.tf.ENV['flags']);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,26 +1,27 @@
|
|||
2021-10-26 19:33:37 [36mINFO: [39m @vladmandic/human version 2.4.1
|
||||
2021-10-26 19:33:37 [36mINFO: [39m User: vlado Platform: linux Arch: x64 Node: v17.0.1
|
||||
2021-10-26 19:33:37 [36mINFO: [39m Application: {"name":"@vladmandic/human","version":"2.4.1"}
|
||||
2021-10-26 19:33:37 [36mINFO: [39m Environment: {"profile":"production","config":".build.json","package":"package.json","tsconfig":true,"eslintrc":true,"git":true}
|
||||
2021-10-26 19:33:37 [36mINFO: [39m Toolchain: {"build":"0.6.3","esbuild":"0.13.9","typescript":"4.4.4","typedoc":"0.22.7","eslint":"8.1.0"}
|
||||
2021-10-26 19:33:37 [36mINFO: [39m Build: {"profile":"production","steps":["clean","compile","typings","typedoc","lint","changelog"]}
|
||||
2021-10-26 19:33:38 [35mSTATE:[39m Clean: {"locations":["dist/*","types/*","typedoc/*"]}
|
||||
2021-10-26 19:33:38 [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-26 19:33:38 [35mSTATE:[39m Compile: {"name":"human/nodejs/cpu","format":"cjs","platform":"node","input":"src/human.ts","output":"dist/human.node.js","files":55,"inputBytes":525049,"outputBytes":431975}
|
||||
2021-10-26 19:33:38 [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-26 19:33:38 [35mSTATE:[39m Compile: {"name":"human/nodejs/gpu","format":"cjs","platform":"node","input":"src/human.ts","output":"dist/human.node-gpu.js","files":55,"inputBytes":525057,"outputBytes":431979}
|
||||
2021-10-26 19:33:38 [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-26 19:33:38 [35mSTATE:[39m Compile: {"name":"human/nodejs/wasm","format":"cjs","platform":"node","input":"src/human.ts","output":"dist/human.node-wasm.js","files":55,"inputBytes":525124,"outputBytes":432051}
|
||||
2021-10-26 19:33:38 [35mSTATE:[39m Compile: {"name":"tfjs/browser/version","format":"esm","platform":"browser","input":"tfjs/tf-version.ts","output":"dist/tfjs.version.js","files":1,"inputBytes":1063,"outputBytes":1652}
|
||||
2021-10-26 19:33:38 [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":2323,"outputBytes":973}
|
||||
2021-10-26 19:33:38 [35mSTATE:[39m Compile: {"name":"human/browser/esm/nobundle","format":"esm","platform":"browser","input":"src/human.ts","output":"dist/human.esm-nobundle.js","files":55,"inputBytes":524747,"outputBytes":433906}
|
||||
2021-10-26 19:33: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":2323,"outputBytes":2411208}
|
||||
2021-10-26 19:33:39 [35mSTATE:[39m Compile: {"name":"human/browser/iife/bundle","format":"iife","platform":"browser","input":"src/human.ts","output":"dist/human.js","files":55,"inputBytes":2934982,"outputBytes":1428282}
|
||||
2021-10-26 19:33:39 [35mSTATE:[39m Compile: {"name":"human/browser/esm/bundle","format":"esm","platform":"browser","input":"src/human.ts","output":"dist/human.esm.js","files":55,"inputBytes":2934982,"outputBytes":1428272}
|
||||
2021-10-26 19:33:40 [35mSTATE:[39m Compile: {"name":"tfjs/browser/esm/custom","format":"esm","platform":"browser","input":"tfjs/tf-custom.ts","output":"dist/tfjs.esm.js","files":2,"inputBytes":2561313,"outputBytes":2496319}
|
||||
2021-10-26 19:33:40 [35mSTATE:[39m Compile: {"name":"human/browser/esm/custom","format":"esm","platform":"browser","input":"src/human.ts","output":"dist/human.custom.esm.js","files":55,"inputBytes":3020093,"outputBytes":2935862}
|
||||
2021-10-26 19:33:57 [35mSTATE:[39m Typings: {"input":"src/human.ts","output":"types","files":96}
|
||||
2021-10-26 19:34:03 [35mSTATE:[39m TypeDoc: {"input":"src/human.ts","output":"typedoc","objects":48,"generated":true}
|
||||
2021-10-26 19:34:39 [35mSTATE:[39m Lint: {"locations":["*.json","src/**/*.ts","test/**/*.js","demo/**/*.js"],"files":91,"errors":0,"warnings":0}
|
||||
2021-10-26 19:34:40 [35mSTATE:[39m ChangeLog: {"repository":"https://github.com/vladmandic/human","branch":"main","output":"CHANGELOG.md"}
|
||||
2021-10-26 19:34:40 [36mINFO: [39m Done...
|
||||
2021-10-27 08:14:41 [36mINFO: [39m @vladmandic/human version 2.4.1
|
||||
2021-10-27 08:14:41 [36mINFO: [39m User: vlado Platform: linux Arch: x64 Node: v17.0.1
|
||||
2021-10-27 08:14:41 [36mINFO: [39m Application: {"name":"@vladmandic/human","version":"2.4.1"}
|
||||
2021-10-27 08:14:41 [36mINFO: [39m Environment: {"profile":"production","config":".build.json","package":"package.json","tsconfig":true,"eslintrc":true,"git":true}
|
||||
2021-10-27 08:14:41 [36mINFO: [39m Toolchain: {"build":"0.6.3","esbuild":"0.13.9","typescript":"4.4.4","typedoc":"0.22.7","eslint":"8.1.0"}
|
||||
2021-10-27 08:14:41 [36mINFO: [39m Build: {"profile":"production","steps":["clean","compile","typings","typedoc","lint","changelog"]}
|
||||
2021-10-27 08:14:41 [35mSTATE:[39m Clean: {"locations":["dist/*","types/*","typedoc/*"]}
|
||||
2021-10-27 08:14:41 [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-27 08:14:41 [35mSTATE:[39m Compile: {"name":"human/nodejs/cpu","format":"cjs","platform":"node","input":"src/human.ts","output":"dist/human.node.js","files":55,"inputBytes":525111,"outputBytes":432047}
|
||||
2021-10-27 08:14:41 [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-27 08:14:42 [35mSTATE:[39m Compile: {"name":"human/nodejs/gpu","format":"cjs","platform":"node","input":"src/human.ts","output":"dist/human.node-gpu.js","files":55,"inputBytes":525119,"outputBytes":432051}
|
||||
2021-10-27 08:14:42 [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-27 08:14:42 [35mSTATE:[39m Compile: {"name":"human/nodejs/wasm","format":"cjs","platform":"node","input":"src/human.ts","output":"dist/human.node-wasm.js","files":55,"inputBytes":525186,"outputBytes":432123}
|
||||
2021-10-27 08:14:42 [35mSTATE:[39m Compile: {"name":"tfjs/browser/version","format":"esm","platform":"browser","input":"tfjs/tf-version.ts","output":"dist/tfjs.version.js","files":1,"inputBytes":1063,"outputBytes":1652}
|
||||
2021-10-27 08:14:42 [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":2323,"outputBytes":973}
|
||||
2021-10-27 08:14:42 [35mSTATE:[39m Compile: {"name":"human/browser/esm/nobundle","format":"esm","platform":"browser","input":"src/human.ts","output":"dist/human.esm-nobundle.js","files":55,"inputBytes":524809,"outputBytes":433978}
|
||||
2021-10-27 08:14:42 [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":2323,"outputBytes":2411208}
|
||||
2021-10-27 08:14:43 [35mSTATE:[39m Compile: {"name":"human/browser/iife/bundle","format":"iife","platform":"browser","input":"src/human.ts","output":"dist/human.js","files":55,"inputBytes":2935044,"outputBytes":1428329}
|
||||
2021-10-27 08:14:43 [35mSTATE:[39m Compile: {"name":"human/browser/esm/bundle","format":"esm","platform":"browser","input":"src/human.ts","output":"dist/human.esm.js","files":55,"inputBytes":2935044,"outputBytes":1428319}
|
||||
2021-10-27 08:14:44 [35mSTATE:[39m Compile: {"name":"tfjs/browser/esm/custom","format":"esm","platform":"browser","input":"tfjs/tf-custom.ts","output":"dist/tfjs.esm.js","files":2,"inputBytes":2561313,"outputBytes":2496319}
|
||||
2021-10-27 08:14:44 [35mSTATE:[39m Compile: {"name":"human/browser/esm/custom","format":"esm","platform":"browser","input":"src/human.ts","output":"dist/human.custom.esm.js","files":55,"inputBytes":3020155,"outputBytes":2932361}
|
||||
2021-10-27 08:15:02 [35mSTATE:[39m Typings: {"input":"src/human.ts","output":"types","files":96}
|
||||
2021-10-27 08:15:08 [35mSTATE:[39m TypeDoc: {"input":"src/human.ts","output":"typedoc","objects":48,"generated":true}
|
||||
2021-10-27 08:15:08 [35mSTATE:[39m Compile: {"name":"demo/browser","format":"esm","platform":"browser","input":"demo/typescript/index.ts","output":"demo/typescript/index.js","files":1,"inputBytes":2534,"outputBytes":2397}
|
||||
2021-10-27 08:15:45 [35mSTATE:[39m Lint: {"locations":["*.json","src/**/*.ts","test/**/*.js","demo/**/*.js"],"files":91,"errors":0,"warnings":0}
|
||||
2021-10-27 08:15:46 [35mSTATE:[39m ChangeLog: {"repository":"https://github.com/vladmandic/human","branch":"main","output":"CHANGELOG.md"}
|
||||
2021-10-27 08:15:46 [36mINFO: [39m Done...
|
||||
|
|
|
@ -87,7 +87,7 @@ Possible events:</p>
|
|||
</ul>
|
||||
</div></div></section><section class="tsd-panel tsd-member tsd-kind-property tsd-parent-kind-class"><a id="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#L64">src/human.ts:64</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 id="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#L351">src/human.ts:351</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 id="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#L352">src/human.ts:352</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>
|
||||
|
@ -114,7 +114,7 @@ Possible events:</p>
|
|||
<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 id="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#L327">src/human.ts:327</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 id="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#L328">src/human.ts:328</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>
|
||||
|
@ -135,7 +135,7 @@ Interpolation is based on time since last known result so can be called independ
|
|||
</ul>
|
||||
</div></li></ul></section><section class="tsd-panel tsd-member tsd-kind-method tsd-parent-kind-class"><a id="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#L215">src/human.ts:215</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 id="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#L337">src/human.ts:337</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 id="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#L338">src/human.ts:338</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>
|
||||
|
|
|
@ -1 +1 @@
|
|||
{"version":3,"file":"human.d.ts","sourceRoot":"","sources":["../../src/human.ts"],"names":[],"mappings":"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"}
|
||||
{"version":3,"file":"human.d.ts","sourceRoot":"","sources":["../../src/human.ts"],"names":[],"mappings":"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"}
|
2
wiki
2
wiki
|
@ -1 +1 @@
|
|||
Subproject commit 20389b9779834324acbbcf2b25041a489a688d18
|
||||
Subproject commit 5e874c076123f1c2b2821b1c37f6005e775465aa
|
Loading…
Reference in New Issue