mirror of https://github.com/vladmandic/human
lint markdown
parent
b38b93c6fc
commit
1abc0f96dd
|
@ -17,26 +17,28 @@ If difference is higher than `config.cacheSensitivity` (expressed in range 0..1)
|
|||
Setting `config.cacheSensitivity=80` disables caching
|
||||
|
||||
Caching can be monitored via `human.performance`:
|
||||
|
||||
- `totalFrames`: total number of processed frames
|
||||
- `cachedFrames`: number of frames considered for caching
|
||||
|
||||
### Per-module results caching
|
||||
|
||||
Each module implements its logic that interprets values of `config.<module>`:
|
||||
|
||||
- `skipFrames`: maximum number of frames before cache is invalidated
|
||||
- `skipTime`: maximum time (in ms) before cache is invalidated
|
||||
|
||||
Values are interpreted as **or**, meaning whichever threshold is reached first
|
||||
Note that per-module caching logic is only active if input is considered sufficiently similar
|
||||
|
||||
**Single-stage Modules Caching**:
|
||||
**Single-stage Modules Caching**:
|
||||
|
||||
- Includes: **Body, Emotion, Description, Object, AntiSpoof**
|
||||
- Module will return last known good value for a specific object
|
||||
For example, there is no need to re-run *age/gender* analysis on video input on each frame
|
||||
since it probably did not change if input itself is sufficiently similar
|
||||
|
||||
**Two-stage Modules Caching**:
|
||||
**Two-stage Modules Caching**:
|
||||
|
||||
- Includes: **Face, Hand**
|
||||
- Module will run analysis on the last known position of the object but will skip detecting new objects
|
||||
|
|
17
Diag.md
17
Diag.md
|
@ -1,22 +1,25 @@
|
|||
# Diagnostics
|
||||
|
||||
## Get human version
|
||||
|
||||
```js
|
||||
console.log(human.version);
|
||||
```
|
||||
```
|
||||
2.2.0
|
||||
```
|
||||
|
||||
> 2.2.0
|
||||
|
||||
## Enable console debug output
|
||||
|
||||
```js
|
||||
const human = new Human({ debug: true });
|
||||
```
|
||||
|
||||
## Get current configuration
|
||||
|
||||
```js
|
||||
console.log(human.config);
|
||||
```
|
||||
|
||||
```json
|
||||
{
|
||||
"backend": "tensorflow",
|
||||
|
@ -27,9 +30,11 @@ console.log(human.config);
|
|||
```
|
||||
|
||||
## Get current environment details
|
||||
|
||||
```js
|
||||
console.log(human.env);
|
||||
```
|
||||
|
||||
```json
|
||||
{
|
||||
"browser": true,
|
||||
|
@ -47,10 +52,12 @@ console.log(human.env);
|
|||
```
|
||||
|
||||
## Get list of all models
|
||||
|
||||
```js
|
||||
const models = human.models.list();
|
||||
console.log(models);
|
||||
```
|
||||
|
||||
```js
|
||||
models = [
|
||||
{ name: 'face', loaded: true },
|
||||
|
@ -71,6 +78,7 @@ models = [
|
|||
```
|
||||
|
||||
## Get memory usage information
|
||||
|
||||
```js
|
||||
console.log(human.tf.engine().memory());
|
||||
```
|
||||
|
@ -80,9 +88,11 @@ memory = { numTensors: 1053, numDataBuffers: 1053, numBytes: 42736024 };
|
|||
```
|
||||
|
||||
## Get current TensorFlow flags
|
||||
|
||||
```js
|
||||
console.log(human.tf.ENV.flags);
|
||||
```
|
||||
|
||||
```js
|
||||
flags = { DEBUG: false, PROD: true, CPU_HANDOFF_SIZE_THRESHOLD: 128 };
|
||||
```
|
||||
|
@ -93,6 +103,7 @@ flags = { DEBUG: false, PROD: true, CPU_HANDOFF_SIZE_THRESHOLD: 128 };
|
|||
const result = await human.detect(input);
|
||||
console.log(result.performance);
|
||||
```
|
||||
|
||||
```js
|
||||
performance = {
|
||||
backend: 1, load: 283, image: 1, frames: 1, cached: 0, changed: 1, total: 947, draw: 0, face: 390, emotion: 15, embedding: 97, body: 97, hand: 142, object: 312, gesture: 0,
|
||||
|
|
|
@ -9,6 +9,7 @@ This guide covers multiple scenarios:
|
|||
<br>
|
||||
|
||||
## Install Docker
|
||||
|
||||
For details see [Docker Docs: Installation Guide](https://docs.docker.com/engine/install/)
|
||||
|
||||
Example: Install Docker using official convenience script:
|
||||
|
@ -87,7 +88,7 @@ USER node
|
|||
|
||||
> sudo docker build . --file myapp.docker --tag myapp
|
||||
|
||||
### Run container
|
||||
### Run container
|
||||
|
||||
- Maps `models` from host to a docker container so there is no need to copy it into each container
|
||||
- Modify path as needed
|
||||
|
@ -128,7 +129,7 @@ USER node
|
|||
|
||||
> sudo docker build . --file human-web.docker --tag human-web
|
||||
|
||||
### Run container
|
||||
### Run container
|
||||
|
||||
- Maps `models` from host to a docker container so there is no need to copy it into each container
|
||||
- Maps human internal web server to external port 8001 so app can be accessed externally
|
||||
|
|
4
Draw.md
4
Draw.md
|
@ -17,7 +17,8 @@
|
|||
|
||||
## Labels
|
||||
|
||||
If `options.drawLabels` is enabled (default)
|
||||
If `options.drawLabels` is enabled (default):
|
||||
|
||||
- Labels for each feature are parsed using templates
|
||||
- Label templates can use built-in values in `[]` or be provided as any string literal
|
||||
- Labels for each feature are set relative to the top-left of the detection box of that feature (face, hand, body, object, etc.)
|
||||
|
@ -50,6 +51,7 @@ drawOptions = {
|
|||
## Example
|
||||
|
||||
Example of custom labels:
|
||||
|
||||
```js
|
||||
const drawOptions = {
|
||||
bodyLabels: `person confidence is [score]% and has ${human.result?.body?.[0]?.keypoints.length || 'no'} keypoints`,
|
||||
|
|
|
@ -53,6 +53,7 @@ for (let i = 0; i < currentResult.face.length; i++) {
|
|||
```
|
||||
|
||||
However, note that default configuration only detects first face in the frame, so increase maximum number of detected faces as well:
|
||||
|
||||
```js
|
||||
const myConfig = {
|
||||
face: {
|
||||
|
@ -118,11 +119,14 @@ a permanent database of faces that can be expanded over time to cover any number
|
|||
For example, see `/demo/facematch/facematch.js` and example database `/demo/facematch/faces.json`:
|
||||
|
||||
> download db with known faces using http/https
|
||||
|
||||
```js
|
||||
const res = await fetch('/demo/facematch/faces.json');
|
||||
db = (res && res.ok) ? await res.json() : [];
|
||||
```
|
||||
|
||||
> download db with known faces from a local file
|
||||
|
||||
```js
|
||||
const fs = require('fs');
|
||||
const buffer = fs.readFileSync('/demo/facematch/faces.json');
|
||||
|
|
2
Home.md
2
Home.md
|
@ -15,8 +15,10 @@
|
|||
<br>
|
||||
|
||||
## Releases
|
||||
|
||||
- [Release Notes](https://github.com/vladmandic/human/releases)
|
||||
- [NPM Link](https://www.npmjs.com/package/@vladmandic/human)
|
||||
|
||||
## Demos
|
||||
|
||||
*Check out [**Simple Live Demo**](https://vladmandic.github.io/human/demo/typescript/index.html) fully annotated app as a good start starting point ([html](https://github.com/vladmandic/human/blob/main/demo/typescript/index.html))([code](https://github.com/vladmandic/human/blob/main/demo/typescript/index.ts))*
|
||||
|
|
3
Image.md
3
Image.md
|
@ -1,6 +1,7 @@
|
|||
# Input Processing
|
||||
|
||||
`Human` includes optional input pre-processing via `config.filter` configuration:
|
||||
|
||||
- using `Canvas` features
|
||||
- using `WebGL` accelerated filters
|
||||
- using `TFJS` accelerated enhancements
|
||||
|
@ -41,4 +42,4 @@ Individual filters that can be set are:
|
|||
|
||||
If set, any input will be processed via histogram equalization to maximize color dynamic range to full spectrum
|
||||
|
||||
- `equalization`: boolean
|
||||
- `equalization`: boolean
|
||||
|
|
|
@ -23,7 +23,7 @@ type ExternalCanvas = typeof env.Canvas | typeof globalThis.Canvas;
|
|||
|
||||
## Examples of Input processing in NodeJS
|
||||
|
||||
### 1. Using decode functionality from `tfjs-node`:
|
||||
### 1. Using decode functionality from `tfjs-node`
|
||||
|
||||
All primary functionality of `Human` is available, but `human.draw` methods cannot be used as `canvas` implementation is not present
|
||||
|
||||
|
@ -36,10 +36,12 @@ human.tf.dispose(tensor); // dispose input data, required when working with tens
|
|||
```
|
||||
|
||||
*Note:* For all processing, correct input tensor **shape** `[1, height, width, 3]` and **dtype** `float32`
|
||||
|
||||
- 1 means batch number and is a fixed value
|
||||
- 3 means number of channels so 3 is used for RGB format
|
||||
|
||||
However `Human` will automatically convert input tensor to a correct shape
|
||||
|
||||
- if batch number is omitted
|
||||
- if input image is 4-channels such as in **RGBA** images with alpha channel
|
||||
- if input tensor is in different data type such as `int32`
|
||||
|
|
|
@ -23,10 +23,12 @@ Default models in Human library are:
|
|||
`Human` includes default models but supports number of additional models and model variations of existing models
|
||||
|
||||
Additional models can be accessed via:
|
||||
- [GitHub repository](https://github.com/vladmandic/human-models)
|
||||
- [NPMjs package](https://www.npmjs.com/package/@vladmandic/human-models)
|
||||
|
||||
- [GitHub repository](https://github.com/vladmandic/human-models)
|
||||
- [NPMjs package](https://www.npmjs.com/package/@vladmandic/human-models)
|
||||
|
||||
To use alternative models from local host:
|
||||
|
||||
- download them either from *github* or *npmjs* and either
|
||||
- set human configuration value `modelPath` for each model or
|
||||
- set global configuration value `baseModelPath` to location of downloaded models
|
||||
|
|
|
@ -10,7 +10,8 @@ Result of `humand.detect()` method is a single object that includes data for all
|
|||
|
||||
<br>
|
||||
|
||||
Full documentation:
|
||||
Full documentation:
|
||||
|
||||
- [**Result Interface Specification**](https://vladmandic.github.io/human/typedoc/interfaces/Result.html)
|
||||
- [**Result Interface Definition**](https://github.com/vladmandic/human/blob/main/src/result.ts)
|
||||
|
||||
|
|
6
Usage.md
6
Usage.md
|
@ -18,7 +18,7 @@ There is only *ONE* method you need:
|
|||
const result = await human.detect(input, config?) // run single detection
|
||||
```
|
||||
|
||||
or
|
||||
or
|
||||
|
||||
<!-- eslint-skip -->
|
||||
```js
|
||||
|
@ -28,6 +28,7 @@ or
|
|||
```
|
||||
|
||||
Notes:
|
||||
|
||||
- [**Valid Inputs**](https://github.com/vladmandic/human/wiki/Inputs)
|
||||
- [**Configuration Details**](https://github.com/vladmandic/human/wiki/Config)
|
||||
|
||||
|
@ -81,6 +82,7 @@ For details, see [segmentation documentation](https://vladmandic.github.io/human
|
|||
|
||||
Additiona helper namespaces that can be used to reduce amount of manual code that needs to be written, but do not have to be used
|
||||
For details, see:
|
||||
|
||||
- [Draw methods documentation](https://github.com/vladmandic/human/wiki/Draw) | [Draw options](https://vladmandic.github.io/human/typedoc/interfaces/DrawOptions.html)
|
||||
- [WebCam API specs](https://vladmandic.github.io/human/typedoc/classes/WebCam.html)
|
||||
|
||||
|
@ -151,7 +153,7 @@ human.tf; // instance of tfjs used
|
|||
## Results Caching and Smoothing
|
||||
|
||||
- By default, `Human` uses frame change detection for results caching
|
||||
- For on-screen display best results, it is recommended to use results smoothing
|
||||
- For on-screen display best results, it is recommended to use results smoothing
|
||||
|
||||
For details, see <https://github.com/vladmandic/human/wiki/Caching
|
||||
|
||||
|
|
|
@ -1,2 +1,2 @@
|
|||
**Human Library Wiki Pages**
|
||||
3D Face Detection, Body Pose, Hand & Finger Tracking, Iris Tracking, Age & Gender Prediction, Emotion Prediction & Gesture Recognition
|
||||
3D Face Detection, Body Pose, Hand & Finger Tracking, Iris Tracking, Age & Gender Prediction, Emotion Prediction & Gesture Recognition
|
||||
|
|
Loading…
Reference in New Issue