type definitions

pull/91/head
Vladimir Mandic 2021-03-17 18:23:19 -04:00
parent 04defdf52b
commit 2265e12d69
70 changed files with 2008 additions and 1242 deletions

View File

@ -1,6 +1,6 @@
# @vladmandic/human
Version: **1.1.8**
Version: **1.1.9**
Description: **Human: AI-powered 3D Face Detection, Face Embedding & Recognition, Body Pose Tracking, Hand & Finger Tracking, Iris Analysis, Age & Gender & Emotion Prediction & Gesture Recognition**
Author: **Vladimir Mandic <mandic00@live.com>**
@ -11,6 +11,10 @@ Repository: **<git+https://github.com/vladmandic/human.git>**
### **HEAD -> main** 2021/03/17 mandic00@live.com
### **1.1.9** 2021/03/17 mandic00@live.com
- fix box clamping and raw output
- hierarchical readme notes
### **1.1.8** 2021/03/17 mandic00@live.com

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

6
dist/human.esm.js vendored

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

6
dist/human.js vendored

File diff suppressed because one or more lines are too long

6
dist/human.js.map vendored

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

16
dist/human.node.js vendored

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -6,7 +6,7 @@
"main": "dist/human.node.js",
"module": "dist/human.esm.js",
"browser": "dist/human.esm.js",
"types": "types/src/human.d.ts",
"types": "types/human.d.ts",
"author": "Vladimir Mandic <mandic00@live.com>",
"bugs": {
"url": "https://github.com/vladmandic/human/issues"

View File

@ -175,7 +175,7 @@ async function getStats(json) {
// rebuild typings
async function compile(entryPoint, options) {
log.info('Compile typings:', entryPoint);
log.info('Generate types:', entryPoint);
const program = ts.createProgram(entryPoint, options);
const emit = program.emit();
const diag = ts

View File

@ -1,7 +1,121 @@
/* eslint-disable indent */
/* eslint-disable no-multi-spaces */
export default {
/**
* Configuration interface definition for **Human** library
*
* Contains all configurable parameters
*/
export interface Config {
backend: String,
wasmPath: String,
debug: Boolean,
async: Boolean,
profile: Boolean,
deallocate: Boolean,
scoped: Boolean,
videoOptimized: Boolean,
warmup: String,
filter: {
enabled: Boolean,
width: Number,
height: Number,
return: Boolean,
brightness: Number,
contrast: Number,
sharpness: Number,
blur: Number
saturation: Number,
hue: Number,
negative: Boolean,
sepia: Boolean,
vintage: Boolean,
kodachrome: Boolean,
technicolor: Boolean,
polaroid: Boolean,
pixelate: Number,
},
gesture: {
enabled: Boolean,
},
face: {
enabled: Boolean,
detector: {
modelPath: String,
rotation: Boolean,
maxFaces: Number,
skipFrames: Number,
skipInitial: Boolean,
minConfidence: Number,
iouThreshold: Number,
scoreThreshold: Number,
return: Boolean,
},
mesh: {
enabled: Boolean,
modelPath: String,
},
iris: {
enabled: Boolean,
modelPath: String,
},
age: {
enabled: Boolean,
modelPath: String,
skipFrames: Number,
},
gender: {
enabled: Boolean,
minConfidence: Number,
modelPath: String,
skipFrames: Number,
},
emotion: {
enabled: Boolean,
minConfidence: Number,
skipFrames: Number,
modelPath: String,
},
embedding: {
enabled: Boolean,
modelPath: String,
},
},
body: {
enabled: Boolean,
modelPath: String,
maxDetections: Number,
scoreThreshold: Number,
nmsRadius: Number,
},
hand: {
enabled: Boolean,
rotation: Boolean,
skipFrames: Number,
skipInitial: Boolean,
minConfidence: Number,
iouThreshold: Number,
scoreThreshold: Number,
maxHands: Number,
landmarks: Boolean,
detector: {
modelPath: String,
},
skeleton: {
modelPath: String,
},
},
object: {
enabled: Boolean,
modelPath: String,
minConfidence: Number,
iouThreshold: Number,
maxResults: Number,
skipFrames: Number,
},
}
const config: Config = {
backend: 'webgl', // select tfjs backend to use
// can be 'webgl', 'wasm', 'cpu', or 'humangl' which is a custom version of webgl
// leave as empty string to continue using default backend
@ -177,3 +291,4 @@ export default {
skipFrames: 13, // how many frames to go without re-running the detector
},
};
export { config as defaults };

View File

@ -1,5 +1,5 @@
import config from '../config';
import { TRI468 as triangulation } from './blazeface/coords';
import { defaults } from '../config';
import { TRI468 as triangulation } from '../blazeface/coords';
export const drawOptions = {
color: <string>'rgba(173, 216, 230, 0.3)', // 'lightblue' with light alpha channel
@ -86,7 +86,7 @@ function curves(ctx, points: number[] = []) {
}
}
export async function gesture(inCanvas, result) {
export async function gesture(inCanvas: HTMLCanvasElement, result: Array<any>) {
if (!result || !inCanvas) return;
if (!(inCanvas instanceof HTMLCanvasElement)) return;
const ctx = inCanvas.getContext('2d');
@ -112,7 +112,7 @@ export async function gesture(inCanvas, result) {
}
}
export async function face(inCanvas, result) {
export async function face(inCanvas: HTMLCanvasElement, result: Array<any>) {
if (!result || !inCanvas) return;
if (!(inCanvas instanceof HTMLCanvasElement)) return;
const ctx = inCanvas.getContext('2d');
@ -196,7 +196,7 @@ export async function face(inCanvas, result) {
}
const lastDrawnPose:any[] = [];
export async function body(inCanvas, result) {
export async function body(inCanvas: HTMLCanvasElement, result: Array<any>) {
if (!result || !inCanvas) return;
if (!(inCanvas instanceof HTMLCanvasElement)) return;
const ctx = inCanvas.getContext('2d');
@ -232,70 +232,70 @@ export async function body(inCanvas, result) {
// torso
points.length = 0;
part = result[i].keypoints.find((a) => a.part === 'leftShoulder');
if (part && part.score > config.body.scoreThreshold) points.push([part.position.x, part.position.y]);
if (part && part.score > defaults.body.scoreThreshold) points.push([part.position.x, part.position.y]);
part = result[i].keypoints.find((a) => a.part === 'rightShoulder');
if (part && part.score > config.body.scoreThreshold) points.push([part.position.x, part.position.y]);
if (part && part.score > defaults.body.scoreThreshold) points.push([part.position.x, part.position.y]);
part = result[i].keypoints.find((a) => a.part === 'rightHip');
if (part && part.score > config.body.scoreThreshold) points.push([part.position.x, part.position.y]);
if (part && part.score > defaults.body.scoreThreshold) points.push([part.position.x, part.position.y]);
part = result[i].keypoints.find((a) => a.part === 'leftHip');
if (part && part.score > config.body.scoreThreshold) points.push([part.position.x, part.position.y]);
if (part && part.score > defaults.body.scoreThreshold) points.push([part.position.x, part.position.y]);
part = result[i].keypoints.find((a) => a.part === 'leftShoulder');
if (part && part.score > config.body.scoreThreshold) points.push([part.position.x, part.position.y]);
if (part && part.score > defaults.body.scoreThreshold) points.push([part.position.x, part.position.y]);
if (points.length === 5) lines(ctx, points); // only draw if we have complete torso
// leg left
points.length = 0;
part = result[i].keypoints.find((a) => a.part === 'leftHip');
if (part && part.score > config.body.scoreThreshold) points.push([part.position.x, part.position.y]);
if (part && part.score > defaults.body.scoreThreshold) points.push([part.position.x, part.position.y]);
part = result[i].keypoints.find((a) => a.part === 'leftKnee');
if (part && part.score > config.body.scoreThreshold) points.push([part.position.x, part.position.y]);
if (part && part.score > defaults.body.scoreThreshold) points.push([part.position.x, part.position.y]);
part = result[i].keypoints.find((a) => a.part === 'leftAnkle');
if (part && part.score > config.body.scoreThreshold) points.push([part.position.x, part.position.y]);
if (part && part.score > defaults.body.scoreThreshold) points.push([part.position.x, part.position.y]);
part = result[i].keypoints.find((a) => a.part === 'leftHeel');
if (part && part.score > config.body.scoreThreshold) points.push([part.position.x, part.position.y]);
if (part && part.score > defaults.body.scoreThreshold) points.push([part.position.x, part.position.y]);
part = result[i].keypoints.find((a) => a.part === 'leftFoot');
if (part && part.score > config.body.scoreThreshold) points.push([part.position.x, part.position.y]);
if (part && part.score > defaults.body.scoreThreshold) points.push([part.position.x, part.position.y]);
curves(ctx, points);
// leg right
points.length = 0;
part = result[i].keypoints.find((a) => a.part === 'rightHip');
if (part && part.score > config.body.scoreThreshold) points.push([part.position.x, part.position.y]);
if (part && part.score > defaults.body.scoreThreshold) points.push([part.position.x, part.position.y]);
part = result[i].keypoints.find((a) => a.part === 'rightKnee');
if (part && part.score > config.body.scoreThreshold) points.push([part.position.x, part.position.y]);
if (part && part.score > defaults.body.scoreThreshold) points.push([part.position.x, part.position.y]);
part = result[i].keypoints.find((a) => a.part === 'rightAnkle');
if (part && part.score > config.body.scoreThreshold) points.push([part.position.x, part.position.y]);
if (part && part.score > defaults.body.scoreThreshold) points.push([part.position.x, part.position.y]);
part = result[i].keypoints.find((a) => a.part === 'rightHeel');
if (part && part.score > config.body.scoreThreshold) points.push([part.position.x, part.position.y]);
if (part && part.score > defaults.body.scoreThreshold) points.push([part.position.x, part.position.y]);
part = result[i].keypoints.find((a) => a.part === 'rightFoot');
if (part && part.score > config.body.scoreThreshold) points.push([part.position.x, part.position.y]);
if (part && part.score > defaults.body.scoreThreshold) points.push([part.position.x, part.position.y]);
curves(ctx, points);
// arm left
points.length = 0;
part = result[i].keypoints.find((a) => a.part === 'leftShoulder');
if (part && part.score > config.body.scoreThreshold) points.push([part.position.x, part.position.y]);
if (part && part.score > defaults.body.scoreThreshold) points.push([part.position.x, part.position.y]);
part = result[i].keypoints.find((a) => a.part === 'leftElbow');
if (part && part.score > config.body.scoreThreshold) points.push([part.position.x, part.position.y]);
if (part && part.score > defaults.body.scoreThreshold) points.push([part.position.x, part.position.y]);
part = result[i].keypoints.find((a) => a.part === 'leftWrist');
if (part && part.score > config.body.scoreThreshold) points.push([part.position.x, part.position.y]);
if (part && part.score > defaults.body.scoreThreshold) points.push([part.position.x, part.position.y]);
part = result[i].keypoints.find((a) => a.part === 'leftPalm');
if (part && part.score > config.body.scoreThreshold) points.push([part.position.x, part.position.y]);
if (part && part.score > defaults.body.scoreThreshold) points.push([part.position.x, part.position.y]);
curves(ctx, points);
// arm right
points.length = 0;
part = result[i].keypoints.find((a) => a.part === 'rightShoulder');
if (part && part.score > config.body.scoreThreshold) points.push([part.position.x, part.position.y]);
if (part && part.score > defaults.body.scoreThreshold) points.push([part.position.x, part.position.y]);
part = result[i].keypoints.find((a) => a.part === 'rightElbow');
if (part && part.score > config.body.scoreThreshold) points.push([part.position.x, part.position.y]);
if (part && part.score > defaults.body.scoreThreshold) points.push([part.position.x, part.position.y]);
part = result[i].keypoints.find((a) => a.part === 'rightWrist');
if (part && part.score > config.body.scoreThreshold) points.push([part.position.x, part.position.y]);
if (part && part.score > defaults.body.scoreThreshold) points.push([part.position.x, part.position.y]);
part = result[i].keypoints.find((a) => a.part === 'rightPalm');
if (part && part.score > config.body.scoreThreshold) points.push([part.position.x, part.position.y]);
if (part && part.score > defaults.body.scoreThreshold) points.push([part.position.x, part.position.y]);
curves(ctx, points);
// draw all
}
}
}
export async function hand(inCanvas, result) {
export async function hand(inCanvas: HTMLCanvasElement, result: Array<any>) {
if (!result || !inCanvas) return;
if (!(inCanvas instanceof HTMLCanvasElement)) return;
const ctx = inCanvas.getContext('2d');
@ -348,7 +348,7 @@ export async function hand(inCanvas, result) {
}
}
export async function object(inCanvas, result) {
export async function object(inCanvas: HTMLCanvasElement, result: Array<any>) {
if (!result || !inCanvas) return;
if (!(inCanvas instanceof HTMLCanvasElement)) return;
const ctx = inCanvas.getContext('2d');
@ -375,14 +375,14 @@ export async function object(inCanvas, result) {
}
}
export async function canvas(inCanvas, outCanvas) {
export async function canvas(inCanvas: HTMLCanvasElement, outCanvas: HTMLCanvasElement) {
if (!inCanvas || !outCanvas) return;
if (!(inCanvas instanceof HTMLCanvasElement) || !(outCanvas instanceof HTMLCanvasElement)) return;
const outCtx = inCanvas.getContext('2d');
outCtx?.drawImage(inCanvas, 0, 0);
}
export async function all(inCanvas, result) {
export async function all(inCanvas: HTMLCanvasElement, result:any) {
if (!result || !inCanvas) return;
if (!(inCanvas instanceof HTMLCanvasElement)) return;
face(inCanvas, result.face);

View File

@ -12,12 +12,25 @@ import * as handpose from './handpose/handpose';
import * as blazepose from './blazepose/blazepose';
import * as nanodet from './nanodet/nanodet';
import * as gesture from './gesture/gesture';
import * as image from './image';
import * as image from './image/image';
import * as draw from './draw/draw';
import * as profile from './profile';
import * as config from '../config';
import { Config, defaults } from './config';
import { Result } from './result';
import * as sample from './sample';
import * as app from '../package.json';
import * as draw from './draw';
type Tensor = {};
type Model = {};
export type { Config } from './config';
export type { Result } from './result';
/** Defines all possible input types for **Human** detection */
export type Input = Tensor | ImageData | ImageBitmap | HTMLVideoElement | HTMLCanvasElement | OffscreenCanvas;
/** Error message */
export type Error = { error: String };
export type TensorFlow = typeof tf;
// helper function: gets elapsed time on both browser and nodejs
const now = () => {
@ -25,50 +38,6 @@ const now = () => {
return parseInt((Number(process.hrtime.bigint()) / 1000 / 1000).toString());
};
type Tensor = {};
type Model = {};
export type Result = {
face: Array<{
confidence: Number,
boxConfidence: Number,
faceConfidence: Number,
box: [Number, Number, Number, Number],
mesh: Array<[Number, Number, Number]>
meshRaw: Array<[Number, Number, Number]>
boxRaw: [Number, Number, Number, Number],
annotations: Array<{ part: String, points: Array<[Number, Number, Number]>[] }>,
age: Number,
gender: String,
genderConfidence: Number,
emotion: Array<{ score: Number, emotion: String }>,
embedding: Array<Number>,
iris: Number,
angle: { roll: Number, yaw: Number, pitch: Number },
}>,
body: Array<{
id: Number,
part: String,
position: { x: Number, y: Number, z: Number },
score: Number,
presence: Number }>,
hand: Array<{
confidence: Number,
box: [Number, Number, Number, Number],
boxRaw: [Number, Number, Number, Number],
landmarks: Array<[Number, Number, Number]>,
annotations: Array<{ part: String, points: Array<[Number, Number, Number]>[] }>,
}>,
gesture: Array<{
part: String,
gesture: String,
}>,
object: Array<{ score: Number, strideSize: Number, class: Number, label: String, center: Number[], centerRaw: Number[], box: Number[], boxRaw: Number[] }>,
performance: { any },
canvas: OffscreenCanvas | HTMLCanvasElement,
}
export type { default as Config } from '../config';
// helper function: perform deep merge of multiple objects so it allows full inheriance with overrides
function mergeDeep(...objects) {
const isObject = (obj) => obj && typeof obj === 'object';
@ -83,15 +52,31 @@ function mergeDeep(...objects) {
return prev;
}, {});
}
/**
* Main Class for `Human` library
*
* All methods and properties are available only as members of Human class
*
* Configuration object definition: @link Config
* Results object definition: @link Result
* Possible inputs: @link Input
*/
export class Human {
version: String;
config: typeof config.default;
config: Config;
state: String;
image: { tensor: Tensor, canvas: OffscreenCanvas | HTMLCanvasElement };
// classes
tf: typeof tf;
draw: { drawOptions?: typeof draw.drawOptions, gesture: Function, face: Function, body: Function, hand: Function, canvas: Function, all: Function };
tf: TensorFlow;
draw: {
drawOptions?: typeof draw.drawOptions,
gesture: typeof draw.gesture,
face: typeof draw.face,
body: typeof draw.body,
hand: typeof draw.hand,
canvas: typeof draw.canvas,
all: typeof draw.all,
};
// models
models: {
face: facemesh.MediaPipeFaceMesh | null,
@ -123,12 +108,12 @@ export class Human {
#firstRun: Boolean;
// definition end
constructor(userConfig = {}) {
constructor(userConfig: Config | Object = {}) {
this.tf = tf;
this.draw = draw;
this.#package = app;
this.version = app.version;
this.config = mergeDeep(config.default, userConfig);
this.config = mergeDeep(defaults, userConfig);
this.state = 'idle';
this.#numTensors = 0;
this.#analyzeMemoryLeaks = false;
@ -150,7 +135,7 @@ export class Human {
};
// export access to image processing
// @ts-ignore
this.image = (input: Tensor | ImageData | HTMLCanvasElement | HTMLVideoElement | OffscreenCanvas) => image.process(input, this.config);
this.image = (input: Input) => image.process(input, this.config);
// export raw access to underlying models
this.classes = {
facemesh,
@ -211,7 +196,7 @@ export class Human {
}
// preload models, not explicitly required as it's done automatically on first use
async load(userConfig: Object = {}) {
async load(userConfig: Config | Object = {}) {
this.state = 'load';
const timeStamp = now();
if (userConfig) this.config = mergeDeep(this.config, userConfig);
@ -480,7 +465,7 @@ export class Human {
}
// main detect function
async detect(input: Tensor | ImageData | HTMLCanvasElement | HTMLVideoElement | OffscreenCanvas, userConfig: Object = {}): Promise<Result | { error: String }> {
async detect(input: Input, userConfig: Config | Object = {}): Promise<Result | Error> {
// detection happens inside a promise
return new Promise(async (resolve) => {
this.state = 'config';
@ -675,7 +660,7 @@ export class Human {
return res;
}
async warmup(userConfig: Object = {}): Promise<Result | { error }> {
async warmup(userConfig: Config | Object = {}): Promise<Result | { error }> {
const t0 = now();
if (userConfig) this.config = mergeDeep(this.config, userConfig);
const save = this.config.videoOptimized;
@ -691,4 +676,7 @@ export class Human {
}
}
/**
* Class Human is also available as default export
*/
export { Human as default };

View File

@ -1,7 +1,7 @@
// @ts-nocheck
import { log } from './log';
import * as tf from '../dist/tfjs.esm.js';
import { log } from '../log';
import * as tf from '../../dist/tfjs.esm.js';
import * as fxImage from './imagefx';
const maxSize = 2048;

112
src/result.ts Normal file
View File

@ -0,0 +1,112 @@
/**
* Result interface definition for **Human** library
*
* Contains all possible detection results
*/
export interface Result {
/** Face results
* Combined results of face detector, face mesh, age, gender, emotion, embedding, iris models
* Some values may be null if specific model is not enabled
*
* Array of individual results with one object per detected face
* Each result has:
* - overal detection confidence value
* - box detection confidence value
* - mesh detection confidence value
* - box as array of [x, y, width, height], normalized to image resolution
* - boxRaw as array of [x, y, width, height], normalized to range 0..1
* - mesh as array of [x, y, z] points of face mesh, normalized to image resolution
* - meshRaw as array of [x, y, z] points of face mesh, normalized to range 0..1
* - annotations as array of annotated face mesh points
* - age as value
* - gender as value
* - genderConfidence as value
* - emotion as array of possible emotions with their individual scores
* - iris as distance value
* - angle as object with values for roll, yaw and pitch angles
*/
face: Array<{
confidence: Number,
boxConfidence: Number,
faceConfidence: Number,
box: [Number, Number, Number, Number],
boxRaw: [Number, Number, Number, Number],
mesh: Array<[Number, Number, Number]>
meshRaw: Array<[Number, Number, Number]>
annotations: Array<{ part: String, points: Array<[Number, Number, Number]>[] }>,
age: Number,
gender: String,
genderConfidence: Number,
emotion: Array<{ score: Number, emotion: String }>,
embedding: Array<Number>,
iris: Number,
angle: { roll: Number, yaw: Number, pitch: Number },
}>,
/** Body results
*
* Array of individual results with one object per detected body
* Each results has:
* - body id number
* - body part name
* - part position with x,y,z coordinates
* - body part score value
* - body part presence value
*/
body: Array<{
id: Number,
part: String,
position: { x: Number, y: Number, z: Number },
score: Number,
presence: Number }>,
/** Hand results
*
* Array of individual results with one object per detected hand
* Each result has:
* - confidence as value
* - box as array of [x, y, width, height], normalized to image resolution
* - boxRaw as array of [x, y, width, height], normalized to range 0..1
* - landmarks as array of [x, y, z] points of hand, normalized to image resolution
* - annotations as array of annotated face landmark points
*/
hand: Array<{
confidence: Number,
box: [Number, Number, Number, Number],
boxRaw: [Number, Number, Number, Number],
landmarks: Array<[Number, Number, Number]>,
annotations: Array<{ part: String, points: Array<[Number, Number, Number]>[] }>,
}>,
/** Gesture results
*
* Array of individual results with one object per detected gesture
* Each result has:
* - part where gesture was detected
* - gesture detected
*/
gesture: Array<{
part: String,
gesture: String,
}>,
/** Object results
*
* Array of individual results with one object per detected gesture
* Each result has:
* - score as value
* - label as detected class name
* - center as array of [x, y], normalized to image resolution
* - centerRaw as array of [x, y], normalized to range 0..1
* - box as array of [x, y, width, height], normalized to image resolution
* - boxRaw as array of [x, y, width, height], normalized to range 0..1
*/
object: Array<{
score: Number,
strideSize: Number,
class: Number,
label: String,
center: Number[],
centerRaw: Number[],
box: Number[],
boxRaw: Number[],
}>,
performance: { any },
canvas: OffscreenCanvas | HTMLCanvasElement,
}

View File

@ -12,8 +12,8 @@
--color-comment-tag: #707070;
--color-comment-tag-text: #fff;
--color-code-background: rgba(#000, 0.04);
--color-ts: lightcoral;
--color-ts-interface: #647f1b;
--color-ts: lightyellow;
--color-ts-interface: lightgreen;
--color-ts-enum: #937210;
--color-ts-class: lightskyblue;
--color-ts-private: #707070;

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

View File

@ -0,0 +1,599 @@
<!doctype html>
<html class="default no-js">
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<title>Config | @vladmandic/human</title>
<meta name="description" content="Documentation for @vladmandic/human">
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="stylesheet" href="../assets/css/main.css">
<script async src="../assets/js/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-index="../assets/js/search.json" data-base="..">
<div class="field">
<label for="tsd-search-field" class="tsd-widget search no-caption">Search</label>
<input id="tsd-search-field" type="text" />
</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</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</a>
</li>
<li>
<a href="config.html">Config</a>
</li>
</ul>
<h1>Interface Config</h1>
</div>
</div>
</header>
<div class="container container-main">
<div class="row">
<div class="col-8 col-content">
<section class="tsd-panel tsd-comment">
<div class="tsd-comment tsd-typography">
<div class="lead">
<p>Configuration interface definition for <strong>Human</strong> library</p>
</div>
<p>Contains all configurable parameters</p>
</div>
</section>
<section class="tsd-panel tsd-hierarchy">
<h3>Hierarchy</h3>
<ul class="tsd-hierarchy">
<li>
<span class="target">Config</span>
</li>
</ul>
</section>
<section class="tsd-panel-group tsd-index-group">
<h2>Index</h2>
<section class="tsd-panel tsd-index-panel">
<div class="tsd-index-content">
<section class="tsd-index-section ">
<h3>Properties</h3>
<ul class="tsd-index-list">
<li class="tsd-kind-property tsd-parent-kind-interface"><a href="config.html#async" class="tsd-kind-icon">async</a></li>
<li class="tsd-kind-property tsd-parent-kind-interface"><a href="config.html#backend" class="tsd-kind-icon">backend</a></li>
<li class="tsd-kind-property tsd-parent-kind-interface"><a href="config.html#body" class="tsd-kind-icon">body</a></li>
<li class="tsd-kind-property tsd-parent-kind-interface"><a href="config.html#deallocate" class="tsd-kind-icon">deallocate</a></li>
<li class="tsd-kind-property tsd-parent-kind-interface"><a href="config.html#debug" class="tsd-kind-icon">debug</a></li>
<li class="tsd-kind-property tsd-parent-kind-interface"><a href="config.html#face" class="tsd-kind-icon">face</a></li>
<li class="tsd-kind-property tsd-parent-kind-interface"><a href="config.html#filter" class="tsd-kind-icon">filter</a></li>
<li class="tsd-kind-property tsd-parent-kind-interface"><a href="config.html#gesture" class="tsd-kind-icon">gesture</a></li>
<li class="tsd-kind-property tsd-parent-kind-interface"><a href="config.html#hand" class="tsd-kind-icon">hand</a></li>
<li class="tsd-kind-property tsd-parent-kind-interface"><a href="config.html#object" class="tsd-kind-icon">object</a></li>
<li class="tsd-kind-property tsd-parent-kind-interface"><a href="config.html#profile" class="tsd-kind-icon">profile</a></li>
<li class="tsd-kind-property tsd-parent-kind-interface"><a href="config.html#scoped" class="tsd-kind-icon">scoped</a></li>
<li class="tsd-kind-property tsd-parent-kind-interface"><a href="config.html#videooptimized" class="tsd-kind-icon">video<wbr>Optimized</a></li>
<li class="tsd-kind-property tsd-parent-kind-interface"><a href="config.html#warmup" class="tsd-kind-icon">warmup</a></li>
<li class="tsd-kind-property tsd-parent-kind-interface"><a href="config.html#wasmpath" class="tsd-kind-icon">wasm<wbr>Path</a></li>
</ul>
</section>
</div>
</section>
</section>
<section class="tsd-panel-group tsd-member-group ">
<h2>Properties</h2>
<section class="tsd-panel tsd-member tsd-kind-property tsd-parent-kind-interface">
<a name="async" class="tsd-anchor"></a>
<h3>async</h3>
<div class="tsd-signature tsd-kind-icon">async<span class="tsd-signature-symbol">:</span> <span class="tsd-signature-type">Boolean</span></div>
<aside class="tsd-sources">
</aside>
</section>
<section class="tsd-panel tsd-member tsd-kind-property tsd-parent-kind-interface">
<a name="backend" class="tsd-anchor"></a>
<h3>backend</h3>
<div class="tsd-signature tsd-kind-icon">backend<span class="tsd-signature-symbol">:</span> <span class="tsd-signature-type">String</span></div>
<aside class="tsd-sources">
</aside>
</section>
<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> <span class="tsd-signature-symbol">{ </span>enabled<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">Boolean</span><span class="tsd-signature-symbol">; </span>maxDetections<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">Number</span><span class="tsd-signature-symbol">; </span>modelPath<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">String</span><span class="tsd-signature-symbol">; </span>nmsRadius<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">Number</span><span class="tsd-signature-symbol">; </span>scoreThreshold<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">Number</span><span class="tsd-signature-symbol"> }</span></div>
<aside class="tsd-sources">
</aside>
<div class="tsd-type-declaration">
<h4>Type declaration</h4>
<ul class="tsd-parameters">
<li class="tsd-parameter">
<h5>enabled<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">Boolean</span></h5>
</li>
<li class="tsd-parameter">
<h5>max<wbr>Detections<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">Number</span></h5>
</li>
<li class="tsd-parameter">
<h5>model<wbr>Path<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">String</span></h5>
</li>
<li class="tsd-parameter">
<h5>nms<wbr>Radius<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">Number</span></h5>
</li>
<li class="tsd-parameter">
<h5>score<wbr>Threshold<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">Number</span></h5>
</li>
</ul>
</div>
</section>
<section class="tsd-panel tsd-member tsd-kind-property tsd-parent-kind-interface">
<a name="deallocate" class="tsd-anchor"></a>
<h3>deallocate</h3>
<div class="tsd-signature tsd-kind-icon">deallocate<span class="tsd-signature-symbol">:</span> <span class="tsd-signature-type">Boolean</span></div>
<aside class="tsd-sources">
</aside>
</section>
<section class="tsd-panel tsd-member tsd-kind-property tsd-parent-kind-interface">
<a name="debug" class="tsd-anchor"></a>
<h3>debug</h3>
<div class="tsd-signature tsd-kind-icon">debug<span class="tsd-signature-symbol">:</span> <span class="tsd-signature-type">Boolean</span></div>
<aside class="tsd-sources">
</aside>
</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> <span class="tsd-signature-symbol">{ </span>age<span class="tsd-signature-symbol">: </span><span class="tsd-signature-symbol">{ </span>enabled<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">Boolean</span><span class="tsd-signature-symbol">; </span>modelPath<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">String</span><span class="tsd-signature-symbol">; </span>skipFrames<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>detector<span class="tsd-signature-symbol">: </span><span class="tsd-signature-symbol">{ </span>iouThreshold<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">Number</span><span class="tsd-signature-symbol">; </span>maxFaces<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">Number</span><span class="tsd-signature-symbol">; </span>minConfidence<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">Number</span><span class="tsd-signature-symbol">; </span>modelPath<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">String</span><span class="tsd-signature-symbol">; </span>return<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">Boolean</span><span class="tsd-signature-symbol">; </span>rotation<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">Boolean</span><span class="tsd-signature-symbol">; </span>scoreThreshold<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">Number</span><span class="tsd-signature-symbol">; </span>skipFrames<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">Number</span><span class="tsd-signature-symbol">; </span>skipInitial<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">Boolean</span><span class="tsd-signature-symbol"> }</span><span class="tsd-signature-symbol">; </span>embedding<span class="tsd-signature-symbol">: </span><span class="tsd-signature-symbol">{ </span>enabled<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">Boolean</span><span class="tsd-signature-symbol">; </span>modelPath<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">String</span><span class="tsd-signature-symbol"> }</span><span class="tsd-signature-symbol">; </span>emotion<span class="tsd-signature-symbol">: </span><span class="tsd-signature-symbol">{ </span>enabled<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">Boolean</span><span class="tsd-signature-symbol">; </span>minConfidence<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">Number</span><span class="tsd-signature-symbol">; </span>modelPath<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">String</span><span class="tsd-signature-symbol">; </span>skipFrames<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>enabled<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">Boolean</span><span class="tsd-signature-symbol">; </span>gender<span class="tsd-signature-symbol">: </span><span class="tsd-signature-symbol">{ </span>enabled<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">Boolean</span><span class="tsd-signature-symbol">; </span>minConfidence<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">Number</span><span class="tsd-signature-symbol">; </span>modelPath<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">String</span><span class="tsd-signature-symbol">; </span>skipFrames<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>iris<span class="tsd-signature-symbol">: </span><span class="tsd-signature-symbol">{ </span>enabled<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">Boolean</span><span class="tsd-signature-symbol">; </span>modelPath<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">String</span><span class="tsd-signature-symbol"> }</span><span class="tsd-signature-symbol">; </span>mesh<span class="tsd-signature-symbol">: </span><span class="tsd-signature-symbol">{ </span>enabled<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">Boolean</span><span class="tsd-signature-symbol">; </span>modelPath<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">String</span><span class="tsd-signature-symbol"> }</span><span class="tsd-signature-symbol"> }</span></div>
<aside class="tsd-sources">
</aside>
<div class="tsd-type-declaration">
<h4>Type declaration</h4>
<ul class="tsd-parameters">
<li class="tsd-parameter">
<h5>age<span class="tsd-signature-symbol">: </span><span class="tsd-signature-symbol">{ </span>enabled<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">Boolean</span><span class="tsd-signature-symbol">; </span>modelPath<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">String</span><span class="tsd-signature-symbol">; </span>skipFrames<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">Number</span><span class="tsd-signature-symbol"> }</span></h5>
<ul class="tsd-parameters">
<li class="tsd-parameter">
<h5>enabled<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">Boolean</span></h5>
</li>
<li class="tsd-parameter">
<h5>model<wbr>Path<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">String</span></h5>
</li>
<li class="tsd-parameter">
<h5>skip<wbr>Frames<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">Number</span></h5>
</li>
</ul>
</li>
<li class="tsd-parameter">
<h5>detector<span class="tsd-signature-symbol">: </span><span class="tsd-signature-symbol">{ </span>iouThreshold<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">Number</span><span class="tsd-signature-symbol">; </span>maxFaces<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">Number</span><span class="tsd-signature-symbol">; </span>minConfidence<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">Number</span><span class="tsd-signature-symbol">; </span>modelPath<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">String</span><span class="tsd-signature-symbol">; </span>return<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">Boolean</span><span class="tsd-signature-symbol">; </span>rotation<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">Boolean</span><span class="tsd-signature-symbol">; </span>scoreThreshold<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">Number</span><span class="tsd-signature-symbol">; </span>skipFrames<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">Number</span><span class="tsd-signature-symbol">; </span>skipInitial<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">Boolean</span><span class="tsd-signature-symbol"> }</span></h5>
<ul class="tsd-parameters">
<li class="tsd-parameter">
<h5>iou<wbr>Threshold<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">Number</span></h5>
</li>
<li class="tsd-parameter">
<h5>max<wbr>Faces<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">Number</span></h5>
</li>
<li class="tsd-parameter">
<h5>min<wbr>Confidence<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">Number</span></h5>
</li>
<li class="tsd-parameter">
<h5>model<wbr>Path<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">String</span></h5>
</li>
<li class="tsd-parameter">
<h5>return<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">Boolean</span></h5>
</li>
<li class="tsd-parameter">
<h5>rotation<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">Boolean</span></h5>
</li>
<li class="tsd-parameter">
<h5>score<wbr>Threshold<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">Number</span></h5>
</li>
<li class="tsd-parameter">
<h5>skip<wbr>Frames<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">Number</span></h5>
</li>
<li class="tsd-parameter">
<h5>skip<wbr>Initial<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">Boolean</span></h5>
</li>
</ul>
</li>
<li class="tsd-parameter">
<h5>embedding<span class="tsd-signature-symbol">: </span><span class="tsd-signature-symbol">{ </span>enabled<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">Boolean</span><span class="tsd-signature-symbol">; </span>modelPath<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">String</span><span class="tsd-signature-symbol"> }</span></h5>
<ul class="tsd-parameters">
<li class="tsd-parameter">
<h5>enabled<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">Boolean</span></h5>
</li>
<li class="tsd-parameter">
<h5>model<wbr>Path<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">String</span></h5>
</li>
</ul>
</li>
<li class="tsd-parameter">
<h5>emotion<span class="tsd-signature-symbol">: </span><span class="tsd-signature-symbol">{ </span>enabled<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">Boolean</span><span class="tsd-signature-symbol">; </span>minConfidence<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">Number</span><span class="tsd-signature-symbol">; </span>modelPath<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">String</span><span class="tsd-signature-symbol">; </span>skipFrames<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">Number</span><span class="tsd-signature-symbol"> }</span></h5>
<ul class="tsd-parameters">
<li class="tsd-parameter">
<h5>enabled<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">Boolean</span></h5>
</li>
<li class="tsd-parameter">
<h5>min<wbr>Confidence<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">Number</span></h5>
</li>
<li class="tsd-parameter">
<h5>model<wbr>Path<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">String</span></h5>
</li>
<li class="tsd-parameter">
<h5>skip<wbr>Frames<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">Number</span></h5>
</li>
</ul>
</li>
<li class="tsd-parameter">
<h5>enabled<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">Boolean</span></h5>
</li>
<li class="tsd-parameter">
<h5>gender<span class="tsd-signature-symbol">: </span><span class="tsd-signature-symbol">{ </span>enabled<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">Boolean</span><span class="tsd-signature-symbol">; </span>minConfidence<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">Number</span><span class="tsd-signature-symbol">; </span>modelPath<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">String</span><span class="tsd-signature-symbol">; </span>skipFrames<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">Number</span><span class="tsd-signature-symbol"> }</span></h5>
<ul class="tsd-parameters">
<li class="tsd-parameter">
<h5>enabled<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">Boolean</span></h5>
</li>
<li class="tsd-parameter">
<h5>min<wbr>Confidence<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">Number</span></h5>
</li>
<li class="tsd-parameter">
<h5>model<wbr>Path<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">String</span></h5>
</li>
<li class="tsd-parameter">
<h5>skip<wbr>Frames<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">Number</span></h5>
</li>
</ul>
</li>
<li class="tsd-parameter">
<h5>iris<span class="tsd-signature-symbol">: </span><span class="tsd-signature-symbol">{ </span>enabled<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">Boolean</span><span class="tsd-signature-symbol">; </span>modelPath<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">String</span><span class="tsd-signature-symbol"> }</span></h5>
<ul class="tsd-parameters">
<li class="tsd-parameter">
<h5>enabled<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">Boolean</span></h5>
</li>
<li class="tsd-parameter">
<h5>model<wbr>Path<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">String</span></h5>
</li>
</ul>
</li>
<li class="tsd-parameter">
<h5>mesh<span class="tsd-signature-symbol">: </span><span class="tsd-signature-symbol">{ </span>enabled<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">Boolean</span><span class="tsd-signature-symbol">; </span>modelPath<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">String</span><span class="tsd-signature-symbol"> }</span></h5>
<ul class="tsd-parameters">
<li class="tsd-parameter">
<h5>enabled<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">Boolean</span></h5>
</li>
<li class="tsd-parameter">
<h5>model<wbr>Path<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">String</span></h5>
</li>
</ul>
</li>
</ul>
</div>
</section>
<section class="tsd-panel tsd-member tsd-kind-property tsd-parent-kind-interface">
<a name="filter" class="tsd-anchor"></a>
<h3>filter</h3>
<div class="tsd-signature tsd-kind-icon">filter<span class="tsd-signature-symbol">:</span> <span class="tsd-signature-symbol">{ </span>blur<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">Number</span><span class="tsd-signature-symbol">; </span>brightness<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">Number</span><span class="tsd-signature-symbol">; </span>contrast<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">Number</span><span class="tsd-signature-symbol">; </span>enabled<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">Boolean</span><span class="tsd-signature-symbol">; </span>height<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">Number</span><span class="tsd-signature-symbol">; </span>hue<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">Number</span><span class="tsd-signature-symbol">; </span>kodachrome<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">Boolean</span><span class="tsd-signature-symbol">; </span>negative<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">Boolean</span><span class="tsd-signature-symbol">; </span>pixelate<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">Number</span><span class="tsd-signature-symbol">; </span>polaroid<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">Boolean</span><span class="tsd-signature-symbol">; </span>return<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">Boolean</span><span class="tsd-signature-symbol">; </span>saturation<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">Number</span><span class="tsd-signature-symbol">; </span>sepia<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">Boolean</span><span class="tsd-signature-symbol">; </span>sharpness<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">Number</span><span class="tsd-signature-symbol">; </span>technicolor<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">Boolean</span><span class="tsd-signature-symbol">; </span>vintage<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">Boolean</span><span class="tsd-signature-symbol">; </span>width<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">Number</span><span class="tsd-signature-symbol"> }</span></div>
<aside class="tsd-sources">
</aside>
<div class="tsd-type-declaration">
<h4>Type declaration</h4>
<ul class="tsd-parameters">
<li class="tsd-parameter">
<h5>blur<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">Number</span></h5>
</li>
<li class="tsd-parameter">
<h5>brightness<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">Number</span></h5>
</li>
<li class="tsd-parameter">
<h5>contrast<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">Number</span></h5>
</li>
<li class="tsd-parameter">
<h5>enabled<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">Boolean</span></h5>
</li>
<li class="tsd-parameter">
<h5>height<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">Number</span></h5>
</li>
<li class="tsd-parameter">
<h5>hue<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">Number</span></h5>
</li>
<li class="tsd-parameter">
<h5>kodachrome<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">Boolean</span></h5>
</li>
<li class="tsd-parameter">
<h5>negative<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">Boolean</span></h5>
</li>
<li class="tsd-parameter">
<h5>pixelate<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">Number</span></h5>
</li>
<li class="tsd-parameter">
<h5>polaroid<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">Boolean</span></h5>
</li>
<li class="tsd-parameter">
<h5>return<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">Boolean</span></h5>
</li>
<li class="tsd-parameter">
<h5>saturation<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">Number</span></h5>
</li>
<li class="tsd-parameter">
<h5>sepia<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">Boolean</span></h5>
</li>
<li class="tsd-parameter">
<h5>sharpness<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">Number</span></h5>
</li>
<li class="tsd-parameter">
<h5>technicolor<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">Boolean</span></h5>
</li>
<li class="tsd-parameter">
<h5>vintage<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">Boolean</span></h5>
</li>
<li class="tsd-parameter">
<h5>width<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">Number</span></h5>
</li>
</ul>
</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> <span class="tsd-signature-symbol">{ </span>enabled<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">Boolean</span><span class="tsd-signature-symbol"> }</span></div>
<aside class="tsd-sources">
</aside>
<div class="tsd-type-declaration">
<h4>Type declaration</h4>
<ul class="tsd-parameters">
<li class="tsd-parameter">
<h5>enabled<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">Boolean</span></h5>
</li>
</ul>
</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> <span class="tsd-signature-symbol">{ </span>detector<span class="tsd-signature-symbol">: </span><span class="tsd-signature-symbol">{ </span>modelPath<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">String</span><span class="tsd-signature-symbol"> }</span><span class="tsd-signature-symbol">; </span>enabled<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">Boolean</span><span class="tsd-signature-symbol">; </span>iouThreshold<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">Number</span><span class="tsd-signature-symbol">; </span>landmarks<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">Boolean</span><span class="tsd-signature-symbol">; </span>maxHands<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">Number</span><span class="tsd-signature-symbol">; </span>minConfidence<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">Number</span><span class="tsd-signature-symbol">; </span>rotation<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">Boolean</span><span class="tsd-signature-symbol">; </span>scoreThreshold<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">Number</span><span class="tsd-signature-symbol">; </span>skeleton<span class="tsd-signature-symbol">: </span><span class="tsd-signature-symbol">{ </span>modelPath<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">String</span><span class="tsd-signature-symbol"> }</span><span class="tsd-signature-symbol">; </span>skipFrames<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">Number</span><span class="tsd-signature-symbol">; </span>skipInitial<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">Boolean</span><span class="tsd-signature-symbol"> }</span></div>
<aside class="tsd-sources">
</aside>
<div class="tsd-type-declaration">
<h4>Type declaration</h4>
<ul class="tsd-parameters">
<li class="tsd-parameter">
<h5>detector<span class="tsd-signature-symbol">: </span><span class="tsd-signature-symbol">{ </span>modelPath<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">String</span><span class="tsd-signature-symbol"> }</span></h5>
<ul class="tsd-parameters">
<li class="tsd-parameter">
<h5>model<wbr>Path<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">String</span></h5>
</li>
</ul>
</li>
<li class="tsd-parameter">
<h5>enabled<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">Boolean</span></h5>
</li>
<li class="tsd-parameter">
<h5>iou<wbr>Threshold<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">Number</span></h5>
</li>
<li class="tsd-parameter">
<h5>landmarks<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">Boolean</span></h5>
</li>
<li class="tsd-parameter">
<h5>max<wbr>Hands<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">Number</span></h5>
</li>
<li class="tsd-parameter">
<h5>min<wbr>Confidence<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">Number</span></h5>
</li>
<li class="tsd-parameter">
<h5>rotation<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">Boolean</span></h5>
</li>
<li class="tsd-parameter">
<h5>score<wbr>Threshold<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">Number</span></h5>
</li>
<li class="tsd-parameter">
<h5>skeleton<span class="tsd-signature-symbol">: </span><span class="tsd-signature-symbol">{ </span>modelPath<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">String</span><span class="tsd-signature-symbol"> }</span></h5>
<ul class="tsd-parameters">
<li class="tsd-parameter">
<h5>model<wbr>Path<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">String</span></h5>
</li>
</ul>
</li>
<li class="tsd-parameter">
<h5>skip<wbr>Frames<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">Number</span></h5>
</li>
<li class="tsd-parameter">
<h5>skip<wbr>Initial<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">Boolean</span></h5>
</li>
</ul>
</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> <span class="tsd-signature-symbol">{ </span>enabled<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">Boolean</span><span class="tsd-signature-symbol">; </span>iouThreshold<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">Number</span><span class="tsd-signature-symbol">; </span>maxResults<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">Number</span><span class="tsd-signature-symbol">; </span>minConfidence<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">Number</span><span class="tsd-signature-symbol">; </span>modelPath<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">String</span><span class="tsd-signature-symbol">; </span>skipFrames<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">Number</span><span class="tsd-signature-symbol"> }</span></div>
<aside class="tsd-sources">
</aside>
<div class="tsd-type-declaration">
<h4>Type declaration</h4>
<ul class="tsd-parameters">
<li class="tsd-parameter">
<h5>enabled<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">Boolean</span></h5>
</li>
<li class="tsd-parameter">
<h5>iou<wbr>Threshold<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">Number</span></h5>
</li>
<li class="tsd-parameter">
<h5>max<wbr>Results<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">Number</span></h5>
</li>
<li class="tsd-parameter">
<h5>min<wbr>Confidence<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">Number</span></h5>
</li>
<li class="tsd-parameter">
<h5>model<wbr>Path<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">String</span></h5>
</li>
<li class="tsd-parameter">
<h5>skip<wbr>Frames<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">Number</span></h5>
</li>
</ul>
</div>
</section>
<section class="tsd-panel tsd-member tsd-kind-property tsd-parent-kind-interface">
<a name="profile" class="tsd-anchor"></a>
<h3>profile</h3>
<div class="tsd-signature tsd-kind-icon">profile<span class="tsd-signature-symbol">:</span> <span class="tsd-signature-type">Boolean</span></div>
<aside class="tsd-sources">
</aside>
</section>
<section class="tsd-panel tsd-member tsd-kind-property tsd-parent-kind-interface">
<a name="scoped" class="tsd-anchor"></a>
<h3>scoped</h3>
<div class="tsd-signature tsd-kind-icon">scoped<span class="tsd-signature-symbol">:</span> <span class="tsd-signature-type">Boolean</span></div>
<aside class="tsd-sources">
</aside>
</section>
<section class="tsd-panel tsd-member tsd-kind-property tsd-parent-kind-interface">
<a name="videooptimized" class="tsd-anchor"></a>
<h3>video<wbr>Optimized</h3>
<div class="tsd-signature tsd-kind-icon">video<wbr>Optimized<span class="tsd-signature-symbol">:</span> <span class="tsd-signature-type">Boolean</span></div>
<aside class="tsd-sources">
</aside>
</section>
<section class="tsd-panel tsd-member tsd-kind-property tsd-parent-kind-interface">
<a name="warmup" class="tsd-anchor"></a>
<h3>warmup</h3>
<div class="tsd-signature tsd-kind-icon">warmup<span class="tsd-signature-symbol">:</span> <span class="tsd-signature-type">String</span></div>
<aside class="tsd-sources">
</aside>
</section>
<section class="tsd-panel tsd-member tsd-kind-property tsd-parent-kind-interface">
<a name="wasmpath" class="tsd-anchor"></a>
<h3>wasm<wbr>Path</h3>
<div class="tsd-signature tsd-kind-icon">wasm<wbr>Path<span class="tsd-signature-symbol">:</span> <span class="tsd-signature-type">String</span></div>
<aside class="tsd-sources">
</aside>
</section>
</section>
</div>
<div class="col-4 col-menu menu-sticky-wrap menu-highlight">
<nav class="tsd-navigation primary">
<ul>
<li class=" ">
<a href="../index.html">Exports</a>
</li>
</ul>
</nav>
<nav class="tsd-navigation secondary menu-sticky">
<ul class="before-current">
<li class=" tsd-kind-reference">
<a href="../index.html#default" class="tsd-kind-icon">default</a>
</li>
<li class=" tsd-kind-class">
<a href="../classes/human.html" class="tsd-kind-icon">Human</a>
</li>
</ul>
<ul class="current">
<li class="current tsd-kind-interface">
<a href="config.html" class="tsd-kind-icon">Config</a>
<ul>
<li class=" tsd-kind-property tsd-parent-kind-interface">
<a href="config.html#async" class="tsd-kind-icon">async</a>
</li>
<li class=" tsd-kind-property tsd-parent-kind-interface">
<a href="config.html#backend" class="tsd-kind-icon">backend</a>
</li>
<li class=" tsd-kind-property tsd-parent-kind-interface">
<a href="config.html#body" class="tsd-kind-icon">body</a>
</li>
<li class=" tsd-kind-property tsd-parent-kind-interface">
<a href="config.html#deallocate" class="tsd-kind-icon">deallocate</a>
</li>
<li class=" tsd-kind-property tsd-parent-kind-interface">
<a href="config.html#debug" class="tsd-kind-icon">debug</a>
</li>
<li class=" tsd-kind-property tsd-parent-kind-interface">
<a href="config.html#face" class="tsd-kind-icon">face</a>
</li>
<li class=" tsd-kind-property tsd-parent-kind-interface">
<a href="config.html#filter" class="tsd-kind-icon">filter</a>
</li>
<li class=" tsd-kind-property tsd-parent-kind-interface">
<a href="config.html#gesture" class="tsd-kind-icon">gesture</a>
</li>
<li class=" tsd-kind-property tsd-parent-kind-interface">
<a href="config.html#hand" class="tsd-kind-icon">hand</a>
</li>
<li class=" tsd-kind-property tsd-parent-kind-interface">
<a href="config.html#object" class="tsd-kind-icon">object</a>
</li>
<li class=" tsd-kind-property tsd-parent-kind-interface">
<a href="config.html#profile" class="tsd-kind-icon">profile</a>
</li>
<li class=" tsd-kind-property tsd-parent-kind-interface">
<a href="config.html#scoped" class="tsd-kind-icon">scoped</a>
</li>
<li class=" tsd-kind-property tsd-parent-kind-interface">
<a href="config.html#videooptimized" class="tsd-kind-icon">video<wbr>Optimized</a>
</li>
<li class=" tsd-kind-property tsd-parent-kind-interface">
<a href="config.html#warmup" class="tsd-kind-icon">warmup</a>
</li>
<li class=" tsd-kind-property tsd-parent-kind-interface">
<a href="config.html#wasmpath" class="tsd-kind-icon">wasm<wbr>Path</a>
</li>
</ul>
</li>
</ul>
<ul class="after-current">
<li class=" tsd-kind-interface">
<a href="result.html" class="tsd-kind-icon">Result</a>
</li>
<li class=" tsd-kind-type-alias">
<a href="../index.html#error" class="tsd-kind-icon">Error</a>
</li>
<li class=" tsd-kind-type-alias">
<a href="../index.html#input" class="tsd-kind-icon">Input</a>
</li>
<li class=" tsd-kind-type-alias">
<a href="../index.html#tensorflow" class="tsd-kind-icon">Tensor<wbr>Flow</a>
</li>
</ul>
</nav>
</div>
</div>
</div>
<footer>
<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>
</div>
</footer>
<div class="overlay"></div>
<script src="../assets/js/main.js"></script>
</body>
</html>

File diff suppressed because one or more lines are too long

164
types/config.d.ts vendored
View File

@ -1,109 +1,115 @@
declare const _default: {
backend: string;
wasmPath: string;
debug: boolean;
async: boolean;
profile: boolean;
deallocate: boolean;
scoped: boolean;
videoOptimized: boolean;
warmup: string;
/**
* Configuration interface definition for **Human** library
*
* Contains all configurable parameters
*/
export interface Config {
backend: String;
wasmPath: String;
debug: Boolean;
async: Boolean;
profile: Boolean;
deallocate: Boolean;
scoped: Boolean;
videoOptimized: Boolean;
warmup: String;
filter: {
enabled: boolean;
width: number;
height: number;
return: boolean;
brightness: number;
contrast: number;
sharpness: number;
blur: number;
saturation: number;
hue: number;
negative: boolean;
sepia: boolean;
vintage: boolean;
kodachrome: boolean;
technicolor: boolean;
polaroid: boolean;
pixelate: number;
enabled: Boolean;
width: Number;
height: Number;
return: Boolean;
brightness: Number;
contrast: Number;
sharpness: Number;
blur: Number;
saturation: Number;
hue: Number;
negative: Boolean;
sepia: Boolean;
vintage: Boolean;
kodachrome: Boolean;
technicolor: Boolean;
polaroid: Boolean;
pixelate: Number;
};
gesture: {
enabled: boolean;
enabled: Boolean;
};
face: {
enabled: boolean;
enabled: Boolean;
detector: {
modelPath: string;
rotation: boolean;
maxFaces: number;
skipFrames: number;
skipInitial: boolean;
minConfidence: number;
iouThreshold: number;
scoreThreshold: number;
return: boolean;
modelPath: String;
rotation: Boolean;
maxFaces: Number;
skipFrames: Number;
skipInitial: Boolean;
minConfidence: Number;
iouThreshold: Number;
scoreThreshold: Number;
return: Boolean;
};
mesh: {
enabled: boolean;
modelPath: string;
enabled: Boolean;
modelPath: String;
};
iris: {
enabled: boolean;
modelPath: string;
enabled: Boolean;
modelPath: String;
};
age: {
enabled: boolean;
modelPath: string;
skipFrames: number;
enabled: Boolean;
modelPath: String;
skipFrames: Number;
};
gender: {
enabled: boolean;
minConfidence: number;
modelPath: string;
skipFrames: number;
enabled: Boolean;
minConfidence: Number;
modelPath: String;
skipFrames: Number;
};
emotion: {
enabled: boolean;
minConfidence: number;
skipFrames: number;
modelPath: string;
enabled: Boolean;
minConfidence: Number;
skipFrames: Number;
modelPath: String;
};
embedding: {
enabled: boolean;
modelPath: string;
enabled: Boolean;
modelPath: String;
};
};
body: {
enabled: boolean;
modelPath: string;
maxDetections: number;
scoreThreshold: number;
nmsRadius: number;
enabled: Boolean;
modelPath: String;
maxDetections: Number;
scoreThreshold: Number;
nmsRadius: Number;
};
hand: {
enabled: boolean;
rotation: boolean;
skipFrames: number;
skipInitial: boolean;
minConfidence: number;
iouThreshold: number;
scoreThreshold: number;
maxHands: number;
landmarks: boolean;
enabled: Boolean;
rotation: Boolean;
skipFrames: Number;
skipInitial: Boolean;
minConfidence: Number;
iouThreshold: Number;
scoreThreshold: Number;
maxHands: Number;
landmarks: Boolean;
detector: {
modelPath: string;
modelPath: String;
};
skeleton: {
modelPath: string;
modelPath: String;
};
};
object: {
enabled: boolean;
modelPath: string;
minConfidence: number;
iouThreshold: number;
maxResults: number;
skipFrames: number;
enabled: Boolean;
modelPath: String;
minConfidence: Number;
iouThreshold: Number;
maxResults: Number;
skipFrames: Number;
};
};
export default _default;
}
declare const config: Config;
export { config as defaults };

26
types/draw/draw.d.ts vendored Normal file
View File

@ -0,0 +1,26 @@
export declare const drawOptions: {
color: string;
labelColor: string;
shadowColor: string;
font: string;
lineHeight: number;
lineWidth: number;
pointSize: number;
roundRect: number;
drawPoints: Boolean;
drawLabels: Boolean;
drawBoxes: Boolean;
drawPolygons: Boolean;
fillPolygons: Boolean;
useDepth: Boolean;
useCurves: Boolean;
bufferedOutput: Boolean;
useRawBoxes: Boolean;
};
export declare function gesture(inCanvas: HTMLCanvasElement, result: Array<any>): Promise<void>;
export declare function face(inCanvas: HTMLCanvasElement, result: Array<any>): Promise<void>;
export declare function body(inCanvas: HTMLCanvasElement, result: Array<any>): Promise<void>;
export declare function hand(inCanvas: HTMLCanvasElement, result: Array<any>): Promise<void>;
export declare function object(inCanvas: HTMLCanvasElement, result: Array<any>): Promise<void>;
export declare function canvas(inCanvas: HTMLCanvasElement, outCanvas: HTMLCanvasElement): Promise<void>;
export declare function all(inCanvas: HTMLCanvasElement, result: any): Promise<void>;

108
types/human.d.ts vendored Normal file
View File

@ -0,0 +1,108 @@
import * as tf from '../dist/tfjs.esm.js';
import * as facemesh from './blazeface/facemesh';
import * as age from './age/age';
import * as gender from './gender/gender';
import * as emotion from './emotion/emotion';
import * as posenet from './posenet/posenet';
import * as handpose from './handpose/handpose';
import * as blazepose from './blazepose/blazepose';
import * as nanodet from './nanodet/nanodet';
import * as draw from './draw/draw';
import { Config } from './config';
import { Result } from './result';
declare type Tensor = {};
declare type Model = {};
export type { Config } from './config';
export type { Result } from './result';
/** Defines all possible input types for **Human** detection */
export declare type Input = Tensor | ImageData | ImageBitmap | HTMLVideoElement | HTMLCanvasElement | OffscreenCanvas;
/** Error message */
export declare type Error = {
error: String;
};
export declare type TensorFlow = typeof tf;
/**
* Main Class for `Human` library
*
* All methods and properties are available only as members of Human class
*
* Configuration object definition: @link Config
* Results object definition: @link Result
* Possible inputs: @link Input
*/
export declare class Human {
#private;
version: String;
config: Config;
state: String;
image: {
tensor: Tensor;
canvas: OffscreenCanvas | HTMLCanvasElement;
};
tf: TensorFlow;
draw: {
drawOptions?: typeof draw.drawOptions;
gesture: typeof draw.gesture;
face: typeof draw.face;
body: typeof draw.body;
hand: typeof draw.hand;
canvas: typeof draw.canvas;
all: typeof draw.all;
};
models: {
face: facemesh.MediaPipeFaceMesh | null;
posenet: posenet.PoseNet | null;
blazepose: Model | null;
handpose: handpose.HandPose | null;
iris: Model | null;
age: Model | null;
gender: Model | null;
emotion: Model | null;
embedding: Model | null;
nanodet: Model | null;
};
classes: {
facemesh: typeof facemesh;
age: typeof age;
gender: typeof gender;
emotion: typeof emotion;
body: typeof posenet | typeof blazepose;
hand: typeof handpose;
nanodet: typeof nanodet;
};
sysinfo: {
platform: String;
agent: String;
};
constructor(userConfig?: Config | Object);
profileData(): {
newBytes: any;
newTensors: any;
peakBytes: any;
numKernelOps: any;
timeKernelOps: any;
slowestKernelOps: any;
largestKernelOps: any;
} | {};
simmilarity(embedding1: Array<Number>, embedding2: Array<Number>): Number;
enhance(input: Tensor): Tensor | null;
match(faceEmbedding: Array<Number>, db: Array<{
name: String;
source: String | undefined;
embedding: Array<Number>;
}>, threshold?: number): {
name: String;
source: String | undefined;
simmilarity: Number;
embedding: Array<Number>;
};
load(userConfig?: Config | Object): Promise<void>;
detect(input: Input, userConfig?: Config | Object): Promise<Result | Error>;
warmup(userConfig?: Config | Object): Promise<Result | {
error: any;
}>;
}
/**
* Class Human is also available as default export
*/
export { Human as default };

View File

@ -1,4 +1,4 @@
import * as tf from '../dist/tfjs.esm.js';
import * as tf from '../../dist/tfjs.esm.js';
export declare function process(input: any, config: any): {
tensor: tf.Tensor;
canvas: OffscreenCanvas | HTMLCanvasElement;

132
types/result.d.ts vendored Normal file
View File

@ -0,0 +1,132 @@
/**
* Result interface definition for **Human** library
*
* Contains all possible detection results
*/
export interface Result {
/** Face results
* Combined results of face detector, face mesh, age, gender, emotion, embedding, iris models
* Some values may be null if specific model is not enabled
*
* Array of individual results with one object per detected face
* Each result has:
* - overal detection confidence value
* - box detection confidence value
* - mesh detection confidence value
* - box as array of [x, y, width, height], normalized to image resolution
* - boxRaw as array of [x, y, width, height], normalized to range 0..1
* - mesh as array of [x, y, z] points of face mesh, normalized to image resolution
* - meshRaw as array of [x, y, z] points of face mesh, normalized to range 0..1
* - annotations as array of annotated face mesh points
* - age as value
* - gender as value
* - genderConfidence as value
* - emotion as array of possible emotions with their individual scores
* - iris as distance value
* - angle as object with values for roll, yaw and pitch angles
*/
face: Array<{
confidence: Number;
boxConfidence: Number;
faceConfidence: Number;
box: [Number, Number, Number, Number];
boxRaw: [Number, Number, Number, Number];
mesh: Array<[Number, Number, Number]>;
meshRaw: Array<[Number, Number, Number]>;
annotations: Array<{
part: String;
points: Array<[Number, Number, Number]>[];
}>;
age: Number;
gender: String;
genderConfidence: Number;
emotion: Array<{
score: Number;
emotion: String;
}>;
embedding: Array<Number>;
iris: Number;
angle: {
roll: Number;
yaw: Number;
pitch: Number;
};
}>;
/** Body results
*
* Array of individual results with one object per detected body
* Each results has:
* - body id number
* - body part name
* - part position with x,y,z coordinates
* - body part score value
* - body part presence value
*/
body: Array<{
id: Number;
part: String;
position: {
x: Number;
y: Number;
z: Number;
};
score: Number;
presence: Number;
}>;
/** Hand results
*
* Array of individual results with one object per detected hand
* Each result has:
* - confidence as value
* - box as array of [x, y, width, height], normalized to image resolution
* - boxRaw as array of [x, y, width, height], normalized to range 0..1
* - landmarks as array of [x, y, z] points of hand, normalized to image resolution
* - annotations as array of annotated face landmark points
*/
hand: Array<{
confidence: Number;
box: [Number, Number, Number, Number];
boxRaw: [Number, Number, Number, Number];
landmarks: Array<[Number, Number, Number]>;
annotations: Array<{
part: String;
points: Array<[Number, Number, Number]>[];
}>;
}>;
/** Gesture results
*
* Array of individual results with one object per detected gesture
* Each result has:
* - part where gesture was detected
* - gesture detected
*/
gesture: Array<{
part: String;
gesture: String;
}>;
/** Object results
*
* Array of individual results with one object per detected gesture
* Each result has:
* - score as value
* - label as detected class name
* - center as array of [x, y], normalized to image resolution
* - centerRaw as array of [x, y], normalized to range 0..1
* - box as array of [x, y, width, height], normalized to image resolution
* - boxRaw as array of [x, y, width, height], normalized to range 0..1
*/
object: Array<{
score: Number;
strideSize: Number;
class: Number;
label: String;
center: Number[];
centerRaw: Number[];
box: Number[];
boxRaw: Number[];
}>;
performance: {
any: any;
};
canvas: OffscreenCanvas | HTMLCanvasElement;
}

26
types/src/draw.d.ts vendored
View File

@ -1,26 +0,0 @@
export declare const drawOptions: {
color: string;
labelColor: string;
shadowColor: string;
font: string;
lineHeight: number;
lineWidth: number;
pointSize: number;
roundRect: number;
drawPoints: Boolean;
drawLabels: Boolean;
drawBoxes: Boolean;
drawPolygons: Boolean;
fillPolygons: Boolean;
useDepth: Boolean;
useCurves: Boolean;
bufferedOutput: Boolean;
useRawBoxes: Boolean;
};
export declare function gesture(inCanvas: any, result: any): Promise<void>;
export declare function face(inCanvas: any, result: any): Promise<void>;
export declare function body(inCanvas: any, result: any): Promise<void>;
export declare function hand(inCanvas: any, result: any): Promise<void>;
export declare function object(inCanvas: any, result: any): Promise<void>;
export declare function canvas(inCanvas: any, outCanvas: any): Promise<void>;
export declare function all(inCanvas: any, result: any): Promise<void>;

157
types/src/human.d.ts vendored
View File

@ -1,157 +0,0 @@
import * as tf from '../dist/tfjs.esm.js';
import * as facemesh from './blazeface/facemesh';
import * as age from './age/age';
import * as gender from './gender/gender';
import * as emotion from './emotion/emotion';
import * as posenet from './posenet/posenet';
import * as handpose from './handpose/handpose';
import * as blazepose from './blazepose/blazepose';
import * as nanodet from './nanodet/nanodet';
import * as config from '../config';
import * as draw from './draw';
declare type Tensor = {};
declare type Model = {};
export declare type Result = {
face: Array<{
confidence: Number;
boxConfidence: Number;
faceConfidence: Number;
box: [Number, Number, Number, Number];
mesh: Array<[Number, Number, Number]>;
meshRaw: Array<[Number, Number, Number]>;
boxRaw: [Number, Number, Number, Number];
annotations: Array<{
part: String;
points: Array<[Number, Number, Number]>[];
}>;
age: Number;
gender: String;
genderConfidence: Number;
emotion: Array<{
score: Number;
emotion: String;
}>;
embedding: Array<Number>;
iris: Number;
angle: {
roll: Number;
yaw: Number;
pitch: Number;
};
}>;
body: Array<{
id: Number;
part: String;
position: {
x: Number;
y: Number;
z: Number;
};
score: Number;
presence: Number;
}>;
hand: Array<{
confidence: Number;
box: [Number, Number, Number, Number];
boxRaw: [Number, Number, Number, Number];
landmarks: Array<[Number, Number, Number]>;
annotations: Array<{
part: String;
points: Array<[Number, Number, Number]>[];
}>;
}>;
gesture: Array<{
part: String;
gesture: String;
}>;
object: Array<{
score: Number;
strideSize: Number;
class: Number;
label: String;
center: Number[];
centerRaw: Number[];
box: Number[];
boxRaw: Number[];
}>;
performance: {
any: any;
};
canvas: OffscreenCanvas | HTMLCanvasElement;
};
export type { default as Config } from '../config';
export declare class Human {
#private;
version: String;
config: typeof config.default;
state: String;
image: {
tensor: Tensor;
canvas: OffscreenCanvas | HTMLCanvasElement;
};
tf: typeof tf;
draw: {
drawOptions?: typeof draw.drawOptions;
gesture: Function;
face: Function;
body: Function;
hand: Function;
canvas: Function;
all: Function;
};
models: {
face: facemesh.MediaPipeFaceMesh | null;
posenet: posenet.PoseNet | null;
blazepose: Model | null;
handpose: handpose.HandPose | null;
iris: Model | null;
age: Model | null;
gender: Model | null;
emotion: Model | null;
embedding: Model | null;
nanodet: Model | null;
};
classes: {
facemesh: typeof facemesh;
age: typeof age;
gender: typeof gender;
emotion: typeof emotion;
body: typeof posenet | typeof blazepose;
hand: typeof handpose;
nanodet: typeof nanodet;
};
sysinfo: {
platform: String;
agent: String;
};
constructor(userConfig?: {});
profileData(): {
newBytes: any;
newTensors: any;
peakBytes: any;
numKernelOps: any;
timeKernelOps: any;
slowestKernelOps: any;
largestKernelOps: any;
} | {};
simmilarity(embedding1: Array<Number>, embedding2: Array<Number>): Number;
enhance(input: Tensor): Tensor | null;
match(faceEmbedding: Array<Number>, db: Array<{
name: String;
source: String | undefined;
embedding: Array<Number>;
}>, threshold?: number): {
name: String;
source: String | undefined;
simmilarity: Number;
embedding: Array<Number>;
};
load(userConfig?: Object): Promise<void>;
detect(input: Tensor | ImageData | HTMLCanvasElement | HTMLVideoElement | OffscreenCanvas, userConfig?: Object): Promise<Result | {
error: String;
}>;
warmup(userConfig?: Object): Promise<Result | {
error: any;
}>;
}
export { Human as default };

2
wiki

@ -1 +1 @@
Subproject commit 91af84e9543762c4f31be41dda15fb2a5549d8a6
Subproject commit 936e36ce0fd331030b48db735836381f2f22134a