add wasm bundle

pull/50/head
Vladimir Mandic 2020-11-09 20:13:38 -05:00
parent 68253ad0dd
commit 4d8ceea62a
52 changed files with 478634 additions and 35491 deletions

View File

@ -18,12 +18,13 @@
### Wiki pages: ### Wiki pages:
- [**Home**](https://github.com/vladmandic/human/wiki) - [**Home**](https://github.com/vladmandic/human/wiki)
- [**Demos**](https://github.com/vladmandic/human/wiki/Demos)
- [**Installation**](https://github.com/vladmandic/human/wiki/Install) - [**Installation**](https://github.com/vladmandic/human/wiki/Install)
- [**Usage**](https://github.com/vladmandic/human/wiki/Usage) - [**Usage**](https://github.com/vladmandic/human/wiki/Usage)
- [**Usage**](https://github.com/vladmandic/human/wiki/Backends)
- [**Configuration**](https://github.com/vladmandic/human/wiki/Configuration) - [**Configuration**](https://github.com/vladmandic/human/wiki/Configuration)
- [**Outputs**](https://github.com/vladmandic/human/wiki/Outputs) - [**Outputs**](https://github.com/vladmandic/human/wiki/Outputs)
- [**Gesture Recognition**](https://github.com/vladmandic/human/wiki/Gesture) - [**Gesture Recognition**](https://github.com/vladmandic/human/wiki/Gesture)
- [**Demos**](https://github.com/vladmandic/human/wiki/Demos)
- [**Development Server**](https://github.com/vladmandic/human/wiki/Development-Server) - [**Development Server**](https://github.com/vladmandic/human/wiki/Development-Server)
- [**Build Process**](https://github.com/vladmandic/human/wiki/Build-Process) - [**Build Process**](https://github.com/vladmandic/human/wiki/Build-Process)
- [**Profiling**](https://github.com/vladmandic/human/wiki/Profiling) - [**Profiling**](https://github.com/vladmandic/human/wiki/Profiling)
@ -33,7 +34,7 @@
<br> <br>
Compatible with *Browser*, *WebWorker* and *NodeJS* execution on both Windows and Linux Compatible with *Browser*, *WebWorker* and *NodeJS* execution on both Windows and Linux
- Browser/WebWorker: Compatible with *CPU*, *WebGL*, *WASM* and *WebGPU* backends - Browser/WebWorker: Compatible with *CPU*, *WebGL* and *WASM* backends
- NodeJS: Compatible with software *tfjs-node* and CUDA accelerated backends *tfjs-node-gpu* - NodeJS: Compatible with software *tfjs-node* and CUDA accelerated backends *tfjs-node-gpu*
(and maybe with React-Native as it doesn't use any DOM objects) (and maybe with React-Native as it doesn't use any DOM objects)

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -3,6 +3,8 @@
export default { export default {
backend: 'webgl', // select tfjs backend to use backend: 'webgl', // select tfjs backend to use
wasmPath: '../assets/', // path for wasm binaries
// only used for backend: wasm
console: true, // enable debugging output to console console: true, // enable debugging output to console
async: true, // execute enabled models in parallel async: true, // execute enabled models in parallel
// this disables per-model performance data but // this disables per-model performance data but

View File

@ -157,7 +157,7 @@ async function setupCamera() {
const track = stream.getVideoTracks()[0]; const track = stream.getVideoTracks()[0];
const settings = track.getSettings(); const settings = track.getSettings();
// log('camera constraints:', constraints, 'window:', { width: window.innerWidth, height: window.innerHeight }, 'settings:', settings, 'track:', track); // log('camera constraints:', constraints, 'window:', { width: window.innerWidth, height: window.innerHeight }, 'settings:', settings, 'track:', track);
ui.camera = { name: track.label, width: settings.width, height: settings.height, facing: settings.facingMode === 'user' ? 'front' : 'back' }; ui.camera = { name: track.label?.toLowerCase(), width: settings.width, height: settings.height, facing: settings.facingMode === 'user' ? 'front' : 'back' };
return new Promise((resolve) => { return new Promise((resolve) => {
video.onloadeddata = async () => { video.onloadeddata = async () => {
video.width = video.videoWidth; video.width = video.videoWidth;
@ -303,7 +303,7 @@ function setupMenu() {
document.getElementById('play').addEventListener('click', () => btn.click()); document.getElementById('play').addEventListener('click', () => btn.click());
menu.addHTML('<hr style="min-width: 200px; border-style: inset; border-color: dimgray">'); menu.addHTML('<hr style="min-width: 200px; border-style: inset; border-color: dimgray">');
menu.addList('backend', ['cpu', 'webgl', 'wasm', 'webgpu'], human.config.backend, (val) => human.config.backend = val); menu.addList('backend', ['cpu', 'webgl', 'wasm'], human.config.backend, (val) => human.config.backend = val);
menu.addBool('async operations', human.config, 'async', (val) => human.config.async = val); menu.addBool('async operations', human.config, 'async', (val) => human.config.async = val);
menu.addBool('enable profiler', human.config, 'profile', (val) => human.config.profile = val); menu.addBool('enable profiler', human.config, 'profile', (val) => human.config.profile = val);
menu.addBool('memory shield', human.config, 'deallocate', (val) => human.config.deallocate = val); menu.addBool('memory shield', human.config, 'deallocate', (val) => human.config.deallocate = val);

View File

@ -5,7 +5,7 @@
<meta http-equiv="content-type"> <meta http-equiv="content-type">
<meta content="text/html"> <meta content="text/html">
<meta charset="UTF-8"> <meta charset="UTF-8">
<meta name="description" content="3D Face Detection, Body Pose, Hand & Finger Tracking, Iris Tracking, Age & Gender Prediction & Emotion Prediction; Author: Vladimir Mandic <mandic00@live.com>"> <meta name="description" content="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="viewport" content="width=device-width, initial-scale=0.6, minimum-scale=0.1, maximum-scale=4.0, shrink-to-fit=yes, user-scalable=yes"> <meta name="viewport" content="width=device-width, initial-scale=0.6, minimum-scale=0.1, maximum-scale=4.0, shrink-to-fit=yes, user-scalable=yes">
<meta name="theme-color" content="#000000"/> <meta name="theme-color" content="#000000"/>
<meta name="application-name" content="Human"> <meta name="application-name" content="Human">
@ -13,13 +13,9 @@
<link rel="manifest" href="./manifest.json"> <link rel="manifest" href="./manifest.json">
<link rel="shortcut icon" href="../favicon.ico" type="image/x-icon"> <link rel="shortcut icon" href="../favicon.ico" type="image/x-icon">
<link rel="apple-touch-icon" href="../assets/icon.png"> <link rel="apple-touch-icon" href="../assets/icon.png">
<!-- not required for tfjs cpu or webgl backends, required if you want to use tfjs wasm or webgpu backends -->
<!-- <script src="https://cdn.jsdelivr.net/npm/@tensorflow/tfjs@2.7.0/dist/tf.es2017.js"></script> -->
<!-- <script src="https://cdn.jsdelivr.net/npm/@tensorflow/tfjs-backend-wasm@2.7.0/dist/tf-backend-wasm.es2017.js"></script> -->
<!-- <script src="https://cdn.jsdelivr.net/npm/@tensorflow/tfjs-backend-webgpu@0.0.1-alpha.0/dist/tf-webgpu.js"></script> -->
<!-- load compiled demo js --> <!-- load compiled demo js -->
<script src="../dist/demo-browser-index.js"></script> <script src="../dist/demo-browser-index.js"></script>
<!-- alternatively load demo sources directly, this is not supported on mobile platforms as they don't support type=module --> <!-- alternatively load demo sources directly -->
<!-- <script src="./browser.js" type="module"></script> --> <!-- <script src="./browser.js" type="module"></script> -->
<style> <style>
@font-face { font-family: 'Lato'; font-display: swap; font-style: normal; font-weight: 400; src: local('Lato'), url('../assets/lato.ttf') format('truetype'); } @font-face { font-family: 'Lato'; font-display: swap; font-style: normal; font-weight: 400; src: local('Lato'), url('../assets/lato.ttf') format('truetype'); }

View File

@ -33,12 +33,13 @@ function createCSS() {
.menu-list { margin-right: 0.8rem; } .menu-list { margin-right: 0.8rem; }
select:focus { outline: none; } select:focus { outline: none; }
.menu-list-item { background: ${theme.itemBackground}; color: ${theme.itemColor}; border: none; padding: 0.2rem; font-family: inherit; font-variant: inherit; border-radius: var(--rounded); font-weight: 800; } .menu-list-item { background: ${theme.itemBackground}; color: ${theme.itemColor}; border: none; padding: 0.2rem; font-family: inherit;
font-variant: inherit; border-radius: var(--rounded); font-weight: 800; }
.menu-chart-title { padding: 0; font-size: 0.8rem; font-weight: 800; align-items: center} .menu-chart-title { padding: 0; font-size: 0.8rem; font-weight: 800; align-items: center}
.menu-chart-canvas { background: transparent; margin: 0.2rem 0 0.2rem 0.6rem; } .menu-chart-canvas { background: transparent; margin: 0.2rem 0 0.2rem 0.6rem; }
.menu-button { border: 0; background: ${theme.buttonBackground}; width: -webkit-fill-available; padding: 8px; margin: 8px 0 8px 0; cursor: pointer; box-shadow: 4px 4px 4px 0 dimgrey; .menu-button { border: 0; background: ${theme.buttonBackground}; width: 100%; padding: 8px; margin: 8px 0 8px 0; cursor: pointer; box-shadow: 4px 4px 4px 0 dimgrey;
border-radius: var(--rounded); justify-content: center; font-family: inherit; font-variant: inherit; font-size: 1rem; font-weight: 800; } border-radius: var(--rounded); justify-content: center; font-family: inherit; font-variant: inherit; font-size: 1rem; font-weight: 800; }
.menu-button:hover { background: ${theme.buttonHover}; box-shadow: 4px 4px 4px 0 black; } .menu-button:hover { background: ${theme.buttonHover}; box-shadow: 4px 4px 4px 0 black; }
.menu-button:focus { outline: none; } .menu-button:focus { outline: none; }
@ -46,15 +47,20 @@ function createCSS() {
.menu-checkbox { width: 2.8rem; height: 1rem; background: ${theme.itemBackground}; margin: 0.5rem 0.8rem 0 0; position: relative; border-radius: var(--rounded); } .menu-checkbox { width: 2.8rem; height: 1rem; background: ${theme.itemBackground}; margin: 0.5rem 0.8rem 0 0; position: relative; border-radius: var(--rounded); }
.menu-checkbox:after { content: 'OFF'; color: ${theme.checkboxOff}; position: absolute; right: 0.2rem; top: -0.4rem; font-weight: 800; font-size: 0.5rem; } .menu-checkbox:after { content: 'OFF'; color: ${theme.checkboxOff}; position: absolute; right: 0.2rem; top: -0.4rem; font-weight: 800; font-size: 0.5rem; }
.menu-checkbox:before { content: 'ON'; color: ${theme.checkboxOn}; position: absolute; left: 0.3rem; top: -0.4rem; font-weight: 800; font-size: 0.5rem; } .menu-checkbox:before { content: 'ON'; color: ${theme.checkboxOn}; position: absolute; left: 0.3rem; top: -0.4rem; font-weight: 800; font-size: 0.5rem; }
.menu-checkbox-label { width: 1.3rem; height: 0.8rem; cursor: pointer; position: absolute; top: 0.1rem; left: 0.1rem; z-index: 1; background: ${theme.checkboxOff}; border-radius: var(--rounded); transition: left 0.6s ease; } .menu-checkbox-label { width: 1.3rem; height: 0.8rem; cursor: pointer; position: absolute; top: 0.1rem; left: 0.1rem; z-index: 1; background: ${theme.checkboxOff};
border-radius: var(--rounded); transition: left 0.6s ease; }
input[type=checkbox] { visibility: hidden; } input[type=checkbox] { visibility: hidden; }
input[type=checkbox]:checked + label { left: 1.4rem; background: ${theme.checkboxOn}; } input[type=checkbox]:checked + label { left: 1.4rem; background: ${theme.checkboxOn}; }
.menu-range { margin: 0 0.8rem 0 0; width: 5rem; background: transparent; color: ${theme.rangeBackground}; } .menu-range { margin: 0 0.8rem 0 0; width: 5rem; background: transparent; color: ${theme.rangeBackground}; }
.menu-range:before { content: attr(value); color: ${theme.rangeLabel}; margin: 0 0.4rem 0 0; font-weight: 800; font-size: 0.6rem; position: relative; top: 0.3rem; } .menu-range:before { color: ${theme.rangeLabel}; margin: 0 0.4rem 0 0; font-weight: 800; font-size: 0.6rem; position: relative; top: 0.3rem; content: attr(value); }
input[type=range] { -webkit-appearance: none; } input[type=range] { -webkit-appearance: none; }
input[type=range]::-webkit-slider-runnable-track { width: 100%; height: 1rem; cursor: pointer; background: ${theme.itemBackground}; border-radius: var(--rounded); border: 1px; } input[type=range]::-webkit-slider-runnable-track { width: 100%; height: 1rem; cursor: pointer; background: ${theme.itemBackground}; border-radius: var(--rounded); border: 1px; }
input[type=range]::-moz-range-track { width: 100%; height: 1rem; cursor: pointer; background: ${theme.itemBackground}; border-radius: var(--rounded); border: 1px; }
input[type=range]::-webkit-slider-thumb { border: 1px solid #000000; margin-top: 0.05rem; height: 0.9rem; width: 1.5rem; border-radius: var(--rounded); background: ${theme.rangeBackground}; cursor: pointer; -webkit-appearance: none; } input[type=range]::-webkit-slider-thumb { border: 1px solid #000000; margin-top: 0.05rem; height: 0.9rem; width: 1.5rem; border-radius: var(--rounded); background: ${theme.rangeBackground}; cursor: pointer; -webkit-appearance: none; }
input[type=range]::-moz-range-thumb { border: 1px solid #000000; margin-top: 0.05rem; height: 0.9rem; width: 1.5rem; border-radius: var(--rounded); background: ${theme.rangeBackground}; cursor: pointer; -webkit-appearance: none; }
.svg-background { fill:darkslategrey; cursor:pointer; opacity: 0.6; } .svg-background { fill:darkslategrey; cursor:pointer; opacity: 0.6; }
.svg-foreground { fill:white; cursor:pointer; opacity: 0.8; } .svg-foreground { fill:white; cursor:pointer; opacity: 0.8; }

View File

@ -66,7 +66,7 @@ async function build(f, msg) {
platform: 'browser', platform: 'browser',
target: 'es2018', target: 'es2018',
format: 'esm', format: 'esm',
external: ['fs'], external: ['fs', 'buffer', 'util'],
}; };
// only rebuilding esm module and demo application // only rebuilding esm module and demo application
// for full production build use "npm run build" // for full production build use "npm run build"

122434
dist/demo-browser-index.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

@ -1,7 +1,7 @@
{ {
"inputs": { "inputs": {
"demo/browser.js": { "demo/browser.js": {
"bytes": 18511, "bytes": 18516,
"imports": [ "imports": [
{ {
"path": "dist/human.esm.js" "path": "dist/human.esm.js"
@ -19,11 +19,11 @@
"imports": [] "imports": []
}, },
"demo/menu.js": { "demo/menu.js": {
"bytes": 13466, "bytes": 13845,
"imports": [] "imports": []
}, },
"dist/human.esm.js": { "dist/human.esm.js": {
"bytes": 1278581, "bytes": 3442260,
"imports": [] "imports": []
} }
}, },
@ -31,28 +31,25 @@
"dist/demo-browser-index.js.map": { "dist/demo-browser-index.js.map": {
"imports": [], "imports": [],
"inputs": {}, "inputs": {},
"bytes": 5534501 "bytes": 5419827
}, },
"dist/demo-browser-index.js": { "dist/demo-browser-index.js": {
"imports": [], "imports": [],
"inputs": { "inputs": {
"dist/human.esm.js": { "dist/human.esm.js": {
"bytesInOutput": 1665015 "bytesInOutput": 3431560
},
"dist/human.esm.js": {
"bytesInOutput": 8716
}, },
"demo/draw.js": { "demo/draw.js": {
"bytesInOutput": 8896 "bytesInOutput": 8898
}, },
"demo/menu.js": { "demo/menu.js": {
"bytesInOutput": 13425 "bytesInOutput": 13813
}, },
"demo/browser.js": { "demo/browser.js": {
"bytesInOutput": 16157 "bytesInOutput": 16215
} }
}, },
"bytes": 1712331 "bytes": 3470608
} }
} }
} }

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -1,15 +1,15 @@
{ {
"inputs": { "inputs": {
"config.js": { "config.js": {
"bytes": 8366, "bytes": 8483,
"imports": [] "imports": []
}, },
"package.json": { "package.json": {
"bytes": 3417, "bytes": 3557,
"imports": [] "imports": []
}, },
"src/age/age.js": { "src/age/age.js": {
"bytes": 1908, "bytes": 1926,
"imports": [ "imports": [
{ {
"path": "src/profile.js" "path": "src/profile.js"
@ -58,11 +58,11 @@
"imports": [] "imports": []
}, },
"src/body/modelBase.js": { "src/body/modelBase.js": {
"bytes": 883, "bytes": 901,
"imports": [] "imports": []
}, },
"src/body/modelMobileNet.js": { "src/body/modelMobileNet.js": {
"bytes": 593, "bytes": 611,
"imports": [ "imports": [
{ {
"path": "src/body/modelBase.js" "path": "src/body/modelBase.js"
@ -70,7 +70,7 @@
] ]
}, },
"src/body/modelPoseNet.js": { "src/body/modelPoseNet.js": {
"bytes": 1922, "bytes": 1940,
"imports": [ "imports": [
{ {
"path": "src/body/modelMobileNet.js" "path": "src/body/modelMobileNet.js"
@ -120,7 +120,7 @@
] ]
}, },
"src/emotion/emotion.js": { "src/emotion/emotion.js": {
"bytes": 2924, "bytes": 2942,
"imports": [ "imports": [
{ {
"path": "src/profile.js" "path": "src/profile.js"
@ -128,15 +128,15 @@
] ]
}, },
"src/face/blazeface.js": { "src/face/blazeface.js": {
"bytes": 6937, "bytes": 6955,
"imports": [] "imports": []
}, },
"src/face/box.js": { "src/face/box.js": {
"bytes": 1929, "bytes": 1947,
"imports": [] "imports": []
}, },
"src/face/facemesh.js": { "src/face/facemesh.js": {
"bytes": 2603, "bytes": 2621,
"imports": [ "imports": [
{ {
"path": "src/face/blazeface.js" "path": "src/face/blazeface.js"
@ -156,7 +156,7 @@
] ]
}, },
"src/face/facepipeline.js": { "src/face/facepipeline.js": {
"bytes": 13695, "bytes": 13713,
"imports": [ "imports": [
{ {
"path": "src/face/box.js" "path": "src/face/box.js"
@ -186,7 +186,7 @@
"imports": [] "imports": []
}, },
"src/gender/gender.js": { "src/gender/gender.js": {
"bytes": 3189, "bytes": 3207,
"imports": [ "imports": [
{ {
"path": "src/profile.js" "path": "src/profile.js"
@ -202,11 +202,11 @@
"imports": [] "imports": []
}, },
"src/hand/box.js": { "src/hand/box.js": {
"bytes": 3220, "bytes": 3238,
"imports": [] "imports": []
}, },
"src/hand/handdetector.js": { "src/hand/handdetector.js": {
"bytes": 4230, "bytes": 4248,
"imports": [ "imports": [
{ {
"path": "src/hand/box.js" "path": "src/hand/box.js"
@ -214,7 +214,7 @@
] ]
}, },
"src/hand/handpipeline.js": { "src/hand/handpipeline.js": {
"bytes": 7541, "bytes": 7559,
"imports": [ "imports": [
{ {
"path": "src/hand/box.js" "path": "src/hand/box.js"
@ -225,7 +225,7 @@
] ]
}, },
"src/hand/handpose.js": { "src/hand/handpose.js": {
"bytes": 3029, "bytes": 3047,
"imports": [ "imports": [
{ {
"path": "src/hand/handdetector.js" "path": "src/hand/handdetector.js"
@ -243,7 +243,7 @@
"imports": [] "imports": []
}, },
"src/human.js": { "src/human.js": {
"bytes": 13918, "bytes": 14315,
"imports": [ "imports": [
{ {
"path": "src/face/facemesh.js" "path": "src/face/facemesh.js"
@ -281,7 +281,7 @@
] ]
}, },
"src/image.js": { "src/image.js": {
"bytes": 4648, "bytes": 4666,
"imports": [ "imports": [
{ {
"path": "src/imagefx.js" "path": "src/imagefx.js"
@ -301,121 +301,133 @@
"dist/human.esm-nobundle.js.map": { "dist/human.esm-nobundle.js.map": {
"imports": [], "imports": [],
"inputs": {}, "inputs": {},
"bytes": 620819 "bytes": 780280
}, },
"dist/human.esm-nobundle.js": { "dist/human.esm-nobundle.js": {
"imports": [], "imports": [],
"inputs": { "inputs": {
"src/face/blazeface.js": { "src/face/blazeface.js": {
"bytesInOutput": 3103 "bytesInOutput": 7075
}, },
"src/face/keypoints.js": { "src/face/keypoints.js": {
"bytesInOutput": 1945 "bytesInOutput": 2768
}, },
"src/face/box.js": { "src/face/box.js": {
"bytesInOutput": 1021 "bytesInOutput": 2122
}, },
"src/face/util.js": { "src/face/util.js": {
"bytesInOutput": 1171 "bytesInOutput": 3043
}, },
"src/face/facepipeline.js": { "src/face/facepipeline.js": {
"bytesInOutput": 5432 "bytesInOutput": 12482
}, },
"src/face/uvcoords.js": { "src/face/uvcoords.js": {
"bytesInOutput": 16785 "bytesInOutput": 20584
},
"src/face/triangulation.js": {
"bytesInOutput": 9990
}, },
"src/face/facemesh.js": { "src/face/facemesh.js": {
"bytesInOutput": 1303 "bytesInOutput": 2641
}, },
"src/profile.js": { "src/profile.js": {
"bytesInOutput": 642 "bytesInOutput": 1118
}, },
"src/age/age.js": { "src/age/age.js": {
"bytesInOutput": 994 "bytesInOutput": 1947
}, },
"src/gender/gender.js": { "src/gender/gender.js": {
"bytesInOutput": 1474 "bytesInOutput": 3108
}, },
"src/emotion/emotion.js": { "src/emotion/emotion.js": {
"bytesInOutput": 1439 "bytesInOutput": 2828
}, },
"src/body/modelBase.js": { "src/body/modelBase.js": {
"bytesInOutput": 455 "bytesInOutput": 924
}, },
"src/body/modelMobileNet.js": { "src/body/modelMobileNet.js": {
"bytesInOutput": 267 "bytesInOutput": 533
}, },
"src/body/heapSort.js": { "src/body/heapSort.js": {
"bytesInOutput": 1041 "bytesInOutput": 1637
}, },
"src/body/buildParts.js": { "src/body/buildParts.js": {
"bytesInOutput": 546 "bytesInOutput": 1764
}, },
"src/body/keypoints.js": { "src/body/keypoints.js": {
"bytesInOutput": 1621 "bytesInOutput": 2277
}, },
"src/body/vectors.js": { "src/body/vectors.js": {
"bytesInOutput": 607 "bytesInOutput": 1420
}, },
"src/body/decodePose.js": { "src/body/decodePose.js": {
"bytesInOutput": 1016 "bytesInOutput": 3797
}, },
"src/body/decodeMultiple.js": { "src/body/decodeMultiple.js": {
"bytesInOutput": 603 "bytesInOutput": 2026
}, },
"src/body/util.js": { "src/body/util.js": {
"bytesInOutput": 1053 "bytesInOutput": 2410
}, },
"src/body/modelPoseNet.js": { "src/body/modelPoseNet.js": {
"bytesInOutput": 994 "bytesInOutput": 2083
}, },
"src/body/posenet.js": { "src/body/posenet.js": {
"bytesInOutput": 459 "bytesInOutput": 963
},
"src/hand/box.js": {
"bytesInOutput": 1444
}, },
"src/hand/handdetector.js": { "src/hand/handdetector.js": {
"bytesInOutput": 1876 "bytesInOutput": 4486
},
"src/hand/util.js": {
"bytesInOutput": 997
}, },
"src/hand/handpipeline.js": { "src/hand/handpipeline.js": {
"bytesInOutput": 2781 "bytesInOutput": 7243
}, },
"src/hand/anchors.js": { "src/hand/anchors.js": {
"bytesInOutput": 127000 "bytesInOutput": 256590
}, },
"src/hand/handpose.js": { "src/hand/handpose.js": {
"bytesInOutput": 1219 "bytesInOutput": 3135
}, },
"src/gesture.js": { "src/gesture.js": {
"bytesInOutput": 1601 "bytesInOutput": 3038
}, },
"src/imagefx.js": { "src/imagefx.js": {
"bytesInOutput": 11013 "bytesInOutput": 20097
}, },
"src/image.js": { "src/image.js": {
"bytesInOutput": 2343 "bytesInOutput": 4558
},
"config.js": {
"bytesInOutput": 1279
},
"package.json": {
"bytesInOutput": 3047
}, },
"src/human.js": { "src/human.js": {
"bytesInOutput": 7348 "bytesInOutput": 133
},
"src/face/triangulation.js": {
"bytesInOutput": 17898
},
"src/human.js": {
"bytesInOutput": 227
},
"src/hand/box.js": {
"bytesInOutput": 3096
},
"src/hand/util.js": {
"bytesInOutput": 2884
},
"src/human.js": {
"bytesInOutput": 187
},
"config.js": {
"bytesInOutput": 1933
},
"package.json": {
"bytesInOutput": 0
},
"package.json": {
"bytesInOutput": 23
},
"src/human.js": {
"bytesInOutput": 11792
}, },
"src/human.js": { "src/human.js": {
"bytesInOutput": 0 "bytesInOutput": 0
} }
}, },
"bytes": 216907 "bytes": 418961
} }
} }
} }

97572
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

13188
dist/human.esm.json vendored

File diff suppressed because it is too large Load Diff

97571
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

13179
dist/human.json vendored

File diff suppressed because it is too large Load Diff

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

118920
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

140
dist/human.node.json vendored
View File

@ -1,15 +1,15 @@
{ {
"inputs": { "inputs": {
"config.js": { "config.js": {
"bytes": 8366, "bytes": 8483,
"imports": [] "imports": []
}, },
"package.json": { "package.json": {
"bytes": 3417, "bytes": 3557,
"imports": [] "imports": []
}, },
"src/age/age.js": { "src/age/age.js": {
"bytes": 1908, "bytes": 1926,
"imports": [ "imports": [
{ {
"path": "src/profile.js" "path": "src/profile.js"
@ -58,11 +58,11 @@
"imports": [] "imports": []
}, },
"src/body/modelBase.js": { "src/body/modelBase.js": {
"bytes": 883, "bytes": 901,
"imports": [] "imports": []
}, },
"src/body/modelMobileNet.js": { "src/body/modelMobileNet.js": {
"bytes": 593, "bytes": 611,
"imports": [ "imports": [
{ {
"path": "src/body/modelBase.js" "path": "src/body/modelBase.js"
@ -70,7 +70,7 @@
] ]
}, },
"src/body/modelPoseNet.js": { "src/body/modelPoseNet.js": {
"bytes": 1922, "bytes": 1940,
"imports": [ "imports": [
{ {
"path": "src/body/modelMobileNet.js" "path": "src/body/modelMobileNet.js"
@ -120,7 +120,7 @@
] ]
}, },
"src/emotion/emotion.js": { "src/emotion/emotion.js": {
"bytes": 2924, "bytes": 2942,
"imports": [ "imports": [
{ {
"path": "src/profile.js" "path": "src/profile.js"
@ -128,15 +128,15 @@
] ]
}, },
"src/face/blazeface.js": { "src/face/blazeface.js": {
"bytes": 6937, "bytes": 6955,
"imports": [] "imports": []
}, },
"src/face/box.js": { "src/face/box.js": {
"bytes": 1929, "bytes": 1947,
"imports": [] "imports": []
}, },
"src/face/facemesh.js": { "src/face/facemesh.js": {
"bytes": 2603, "bytes": 2621,
"imports": [ "imports": [
{ {
"path": "src/face/blazeface.js" "path": "src/face/blazeface.js"
@ -156,7 +156,7 @@
] ]
}, },
"src/face/facepipeline.js": { "src/face/facepipeline.js": {
"bytes": 13695, "bytes": 13713,
"imports": [ "imports": [
{ {
"path": "src/face/box.js" "path": "src/face/box.js"
@ -186,7 +186,7 @@
"imports": [] "imports": []
}, },
"src/gender/gender.js": { "src/gender/gender.js": {
"bytes": 3189, "bytes": 3207,
"imports": [ "imports": [
{ {
"path": "src/profile.js" "path": "src/profile.js"
@ -202,11 +202,11 @@
"imports": [] "imports": []
}, },
"src/hand/box.js": { "src/hand/box.js": {
"bytes": 3220, "bytes": 3238,
"imports": [] "imports": []
}, },
"src/hand/handdetector.js": { "src/hand/handdetector.js": {
"bytes": 4230, "bytes": 4248,
"imports": [ "imports": [
{ {
"path": "src/hand/box.js" "path": "src/hand/box.js"
@ -214,7 +214,7 @@
] ]
}, },
"src/hand/handpipeline.js": { "src/hand/handpipeline.js": {
"bytes": 7541, "bytes": 7559,
"imports": [ "imports": [
{ {
"path": "src/hand/box.js" "path": "src/hand/box.js"
@ -225,7 +225,7 @@
] ]
}, },
"src/hand/handpose.js": { "src/hand/handpose.js": {
"bytes": 3029, "bytes": 3047,
"imports": [ "imports": [
{ {
"path": "src/hand/handdetector.js" "path": "src/hand/handdetector.js"
@ -243,7 +243,7 @@
"imports": [] "imports": []
}, },
"src/human.js": { "src/human.js": {
"bytes": 13918, "bytes": 14315,
"imports": [ "imports": [
{ {
"path": "src/face/facemesh.js" "path": "src/face/facemesh.js"
@ -281,7 +281,7 @@
] ]
}, },
"src/image.js": { "src/image.js": {
"bytes": 4648, "bytes": 4666,
"imports": [ "imports": [
{ {
"path": "src/imagefx.js" "path": "src/imagefx.js"
@ -301,121 +301,133 @@
"dist/human.node-nobundle.js.map": { "dist/human.node-nobundle.js.map": {
"imports": [], "imports": [],
"inputs": {}, "inputs": {},
"bytes": 635150 "bytes": 794759
}, },
"dist/human.node-nobundle.js": { "dist/human.node-nobundle.js": {
"imports": [], "imports": [],
"inputs": { "inputs": {
"src/face/blazeface.js": { "src/face/blazeface.js": {
"bytesInOutput": 3103 "bytesInOutput": 7083
}, },
"src/face/keypoints.js": { "src/face/keypoints.js": {
"bytesInOutput": 1945 "bytesInOutput": 2771
}, },
"src/face/box.js": { "src/face/box.js": {
"bytesInOutput": 1021 "bytesInOutput": 2133
}, },
"src/face/util.js": { "src/face/util.js": {
"bytesInOutput": 1171 "bytesInOutput": 3054
}, },
"src/face/facepipeline.js": { "src/face/facepipeline.js": {
"bytesInOutput": 5432 "bytesInOutput": 12462
}, },
"src/face/uvcoords.js": { "src/face/uvcoords.js": {
"bytesInOutput": 16785 "bytesInOutput": 20586
},
"src/face/triangulation.js": {
"bytesInOutput": 9989
}, },
"src/face/facemesh.js": { "src/face/facemesh.js": {
"bytesInOutput": 1308 "bytesInOutput": 2651
}, },
"src/profile.js": { "src/profile.js": {
"bytesInOutput": 642 "bytesInOutput": 1120
}, },
"src/age/age.js": { "src/age/age.js": {
"bytesInOutput": 994 "bytesInOutput": 1910
}, },
"src/gender/gender.js": { "src/gender/gender.js": {
"bytesInOutput": 1474 "bytesInOutput": 3070
}, },
"src/emotion/emotion.js": { "src/emotion/emotion.js": {
"bytesInOutput": 1439 "bytesInOutput": 2786
}, },
"src/body/modelBase.js": { "src/body/modelBase.js": {
"bytesInOutput": 455 "bytesInOutput": 942
}, },
"src/body/modelMobileNet.js": { "src/body/modelMobileNet.js": {
"bytesInOutput": 267 "bytesInOutput": 548
}, },
"src/body/heapSort.js": { "src/body/heapSort.js": {
"bytesInOutput": 1041 "bytesInOutput": 1639
}, },
"src/body/buildParts.js": { "src/body/buildParts.js": {
"bytesInOutput": 546 "bytesInOutput": 1766
}, },
"src/body/keypoints.js": { "src/body/keypoints.js": {
"bytesInOutput": 1621 "bytesInOutput": 2288
}, },
"src/body/vectors.js": { "src/body/vectors.js": {
"bytesInOutput": 607 "bytesInOutput": 1428
}, },
"src/body/decodePose.js": { "src/body/decodePose.js": {
"bytesInOutput": 1016 "bytesInOutput": 3799
}, },
"src/body/decodeMultiple.js": { "src/body/decodeMultiple.js": {
"bytesInOutput": 603 "bytesInOutput": 2028
}, },
"src/body/util.js": { "src/body/util.js": {
"bytesInOutput": 1053 "bytesInOutput": 2418
}, },
"src/body/modelPoseNet.js": { "src/body/modelPoseNet.js": {
"bytesInOutput": 994 "bytesInOutput": 2092
}, },
"src/body/posenet.js": { "src/body/posenet.js": {
"bytesInOutput": 459 "bytesInOutput": 977
},
"src/hand/box.js": {
"bytesInOutput": 1443
}, },
"src/hand/handdetector.js": { "src/hand/handdetector.js": {
"bytesInOutput": 1876 "bytesInOutput": 4504
},
"src/hand/util.js": {
"bytesInOutput": 996
}, },
"src/hand/handpipeline.js": { "src/hand/handpipeline.js": {
"bytesInOutput": 2781 "bytesInOutput": 7242
}, },
"src/hand/anchors.js": { "src/hand/anchors.js": {
"bytesInOutput": 127000 "bytesInOutput": 256592
}, },
"src/hand/handpose.js": { "src/hand/handpose.js": {
"bytesInOutput": 1219 "bytesInOutput": 3148
}, },
"src/gesture.js": { "src/gesture.js": {
"bytesInOutput": 1601 "bytesInOutput": 3042
}, },
"src/imagefx.js": { "src/imagefx.js": {
"bytesInOutput": 11013 "bytesInOutput": 20099
}, },
"src/image.js": { "src/image.js": {
"bytesInOutput": 2343 "bytesInOutput": 4563
},
"src/human.js": {
"bytesInOutput": 47
},
"src/human.js": {
"bytesInOutput": 152
},
"src/face/triangulation.js": {
"bytesInOutput": 17898
},
"src/human.js": {
"bytesInOutput": 227
},
"src/hand/box.js": {
"bytesInOutput": 3107
},
"src/hand/util.js": {
"bytesInOutput": 2884
},
"src/human.js": {
"bytesInOutput": 187
}, },
"config.js": { "config.js": {
"bytesInOutput": 1278 "bytesInOutput": 1933
}, },
"package.json": { "package.json": {
"bytesInOutput": 3047 "bytesInOutput": 0
},
"package.json": {
"bytesInOutput": 23
}, },
"src/human.js": { "src/human.js": {
"bytesInOutput": 28 "bytesInOutput": 11797
},
"src/human.js": {
"bytesInOutput": 7348
} }
}, },
"bytes": 216914 "bytes": 419228
} }
} }
} }

13
package-lock.json generated
View File

@ -180,6 +180,14 @@
} }
} }
}, },
"@tensorflow/tfjs-backend-wasm": {
"version": "2.7.0",
"resolved": "https://registry.npmjs.org/@tensorflow/tfjs-backend-wasm/-/tfjs-backend-wasm-2.7.0.tgz",
"integrity": "sha512-q1p6vR99kvxNjPMH4SMzg5R43g2ACmp3GRMoS2JVCruMyBWroD3KrmgXX2f94t0bl8BysW0JBkGXihajifjd6Q==",
"requires": {
"@types/emscripten": "~0.0.34"
}
},
"@tensorflow/tfjs-backend-webgl": { "@tensorflow/tfjs-backend-webgl": {
"version": "2.7.0", "version": "2.7.0",
"resolved": "https://registry.npmjs.org/@tensorflow/tfjs-backend-webgl/-/tfjs-backend-webgl-2.7.0.tgz", "resolved": "https://registry.npmjs.org/@tensorflow/tfjs-backend-webgl/-/tfjs-backend-webgl-2.7.0.tgz",
@ -273,6 +281,11 @@
} }
} }
}, },
"@types/emscripten": {
"version": "0.0.34",
"resolved": "https://registry.npmjs.org/@types/emscripten/-/emscripten-0.0.34.tgz",
"integrity": "sha512-QSb9ojDincskc+uKMI0KXp8e1NALFINCrMlp8VGKGcTSxeEyRTTKyjWw75NYrCZHUsVEEEpr1tYHpbtaC++/sQ=="
},
"@types/json5": { "@types/json5": {
"version": "0.0.29", "version": "0.0.29",
"resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz", "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz",

View File

@ -19,7 +19,9 @@
"type": "git", "type": "git",
"url": "git+https://github.com/vladmandic/human.git" "url": "git+https://github.com/vladmandic/human.git"
}, },
"dependencies": {}, "dependencies": {
"@tensorflow/tfjs-backend-wasm": "^2.7.0"
},
"peerDependencies": {}, "peerDependencies": {},
"devDependencies": { "devDependencies": {
"@tensorflow/tfjs": "^2.7.0", "@tensorflow/tfjs": "^2.7.0",
@ -43,12 +45,12 @@
"lint": "eslint src/*.js demo/*.js", "lint": "eslint src/*.js demo/*.js",
"dev": "npm install && node --trace-warnings --unhandled-rejections=strict --trace-uncaught --no-deprecation dev-server/dev-server.js", "dev": "npm install && node --trace-warnings --unhandled-rejections=strict --trace-uncaught --no-deprecation dev-server/dev-server.js",
"changelog": "node dev-server/changelog.js", "changelog": "node dev-server/changelog.js",
"build-iife": "esbuild --bundle --minify --platform=browser --sourcemap --target=es2018 --format=iife --external:fs --global-name=Human --metafile=dist/human.json --outfile=dist/human.js src/human.js", "build-iife": "esbuild --bundle --platform=browser --sourcemap --target=es2018 --format=iife --external:fs --external:buffer --external:util --global-name=Human --metafile=dist/human.json --outfile=dist/human.js src/human.js",
"build-esm-bundle": "esbuild --bundle --minify --platform=browser --sourcemap --target=es2018 --format=esm --external:fs --metafile=dist/human.esm.json --outfile=dist/human.esm.js src/human.js", "build-esm-bundle": "esbuild --bundle --platform=browser --sourcemap --target=es2018 --format=esm --external:fs --external:buffer --external:util --metafile=dist/human.esm.json --outfile=dist/human.esm.js src/human.js",
"build-esm-nobundle": "esbuild --bundle --minify --platform=browser --sourcemap --target=es2018 --format=esm --external:@tensorflow --external:fs --metafile=dist/human.esm-nobundle.json --outfile=dist/human.esm-nobundle.js src/human.js", "build-esm-nobundle": "esbuild --bundle --platform=browser --sourcemap --target=es2018 --format=esm --external:@tensorflow --external:fs --external:buffer --external:util --metafile=dist/human.esm-nobundle.json --outfile=dist/human.esm-nobundle.js src/human.js",
"build-node": "esbuild --bundle --minify --platform=node --sourcemap --target=es2018 --format=cjs --metafile=dist/human.node.json --outfile=dist/human.node.js src/human.js", "build-node": "esbuild --bundle --platform=node --sourcemap --target=es2018 --format=cjs --metafile=dist/human.node.json --outfile=dist/human.node.js src/human.js",
"build-node-nobundle": "esbuild --bundle --minify --platform=node --sourcemap --target=es2018 --format=cjs --external:@tensorflow --metafile=dist/human.node.json --outfile=dist/human.node-nobundle.js src/human.js", "build-node-nobundle": "esbuild --bundle --platform=node --sourcemap --target=es2018 --format=cjs --external:@tensorflow --metafile=dist/human.node.json --outfile=dist/human.node-nobundle.js src/human.js",
"build-demo": "esbuild --bundle --log-level=error --platform=browser --sourcemap --target=es2018 --format=esm --external:fs --metafile=dist/demo-browser-index.json --outfile=dist/demo-browser-index.js demo/browser.js", "build-demo": "esbuild --bundle --log-level=error --platform=browser --sourcemap --target=es2018 --format=esm --external:fs --external:buffer --external:util --metafile=dist/demo-browser-index.json --outfile=dist/demo-browser-index.js demo/browser.js",
"build": "rimraf dist/* && npm run build-iife && npm run build-esm-bundle && npm run build-esm-nobundle && npm run build-node && npm run build-node-nobundle && npm run build-demo && npm run changelog", "build": "rimraf dist/* && npm run build-iife && npm run build-esm-bundle && npm run build-esm-nobundle && npm run build-node && npm run build-node-nobundle && npm run build-demo && npm run changelog",
"update": "npm update --depth 20 --force && npm dedupe && npm prune && npm audit" "update": "npm update --depth 20 --force && npm dedupe && npm prune && npm audit"
}, },

View File

@ -1,5 +1,5 @@
const tf = require('@tensorflow/tfjs'); import * as tf from '@tensorflow/tfjs/dist/tf.es2017.js';
const profile = require('../profile.js'); import * as profile from '../profile.js';
const models = {}; const models = {};
let last = { age: 0 }; let last = { age: 0 };

View File

@ -1,4 +1,4 @@
const heapSort = require('./heapSort'); import * as heapSort from './heapSort';
function scoreIsMaximumInLocalWindow(keypointId, score, heatmapY, heatmapX, localMaximumRadius, scores) { function scoreIsMaximumInLocalWindow(keypointId, score, heatmapY, heatmapX, localMaximumRadius, scores) {
const [height, width] = scores.shape; const [height, width] = scores.shape;

View File

@ -1,6 +1,6 @@
const buildParts = require('./buildParts'); import * as buildParts from './buildParts';
const decodePose = require('./decodePose'); import * as decodePose from './decodePose';
const vectors = require('./vectors'); import * as vectors from './vectors';
function withinNmsRadiusOfCorrespondingPoint(poses, squaredNmsRadius, { x, y }, keypointId) { function withinNmsRadiusOfCorrespondingPoint(poses, squaredNmsRadius, { x, y }, keypointId) {
return poses.some(({ keypoints }) => { return poses.some(({ keypoints }) => {

View File

@ -1,5 +1,5 @@
const keypoints = require('./keypoints'); import * as keypoints from './keypoints';
const vectors = require('./vectors'); import * as vectors from './vectors';
const parentChildrenTuples = keypoints.poseChain.map(([parentJoinName, childJoinName]) => ([keypoints.partIds[parentJoinName], keypoints.partIds[childJoinName]])); const parentChildrenTuples = keypoints.poseChain.map(([parentJoinName, childJoinName]) => ([keypoints.partIds[parentJoinName], keypoints.partIds[childJoinName]]));
const parentToChildEdges = parentChildrenTuples.map(([, childJointId]) => childJointId); const parentToChildEdges = parentChildrenTuples.map(([, childJointId]) => childJointId);

View File

@ -1,5 +1,5 @@
const tf = require('@tensorflow/tfjs'); import * as tf from '@tensorflow/tfjs/dist/tf.es2017.js';
const kpt = require('./keypoints'); import * as kpt from './keypoints';
function getPointsConfidence(heatmapScores, heatMapCoords) { function getPointsConfidence(heatmapScores, heatMapCoords) {
const numKeypoints = heatMapCoords.shape[0]; const numKeypoints = heatMapCoords.shape[0];

View File

@ -1,4 +1,4 @@
const tf = require('@tensorflow/tfjs'); import * as tf from '@tensorflow/tfjs/dist/tf.es2017.js';
class BaseModel { class BaseModel {
constructor(model, outputStride) { constructor(model, outputStride) {

View File

@ -1,5 +1,5 @@
const tf = require('@tensorflow/tfjs'); import * as tf from '@tensorflow/tfjs/dist/tf.es2017.js';
const modelBase = require('./modelBase'); import * as modelBase from './modelBase';
class MobileNet extends modelBase.BaseModel { class MobileNet extends modelBase.BaseModel {
// eslint-disable-next-line class-methods-use-this // eslint-disable-next-line class-methods-use-this

View File

@ -1,7 +1,7 @@
const tf = require('@tensorflow/tfjs'); import * as tf from '@tensorflow/tfjs/dist/tf.es2017.js';
const modelMobileNet = require('./modelMobileNet'); import * as modelMobileNet from './modelMobileNet';
const decodeMultiple = require('./decodeMultiple'); import * as decodeMultiple from './decodeMultiple';
const util = require('./util'); import * as util from './util';
class PoseNet { class PoseNet {
constructor(net) { constructor(net) {

View File

@ -1,8 +1,8 @@
const modelMobileNet = require('./modelMobileNet'); import * as modelMobileNet from './modelMobileNet';
const modelPoseNet = require('./modelPoseNet'); import * as modelPoseNet from './modelPoseNet';
const decodeMultiple = require('./decodeMultiple'); import * as decodeMultiple from './decodeMultiple';
const keypoints = require('./keypoints'); import * as keypoints from './keypoints';
const util = require('./util'); import * as util from './util';
exports.load = modelPoseNet.load; exports.load = modelPoseNet.load;
exports.PoseNet = modelPoseNet.PoseNet; exports.PoseNet = modelPoseNet.PoseNet;

View File

@ -1,4 +1,4 @@
const kpt = require('./keypoints'); import * as kpt from './keypoints';
function eitherPointDoesntMeetConfidence(a, b, minConfidence) { function eitherPointDoesntMeetConfidence(a, b, minConfidence) {
return (a < minConfidence || b < minConfidence); return (a < minConfidence || b < minConfidence);

View File

@ -1,4 +1,4 @@
const kpt = require('./keypoints'); import * as kpt from './keypoints';
function getOffsetPoint(y, x, keypoint, offsets) { function getOffsetPoint(y, x, keypoint, offsets) {
return { return {

View File

@ -1,5 +1,5 @@
const tf = require('@tensorflow/tfjs'); import * as tf from '@tensorflow/tfjs/dist/tf.es2017.js';
const profile = require('../profile.js'); import * as profile from '../profile.js';
const annotations = ['angry', 'disgust', 'fear', 'happy', 'sad', 'surpise', 'neutral']; const annotations = ['angry', 'disgust', 'fear', 'happy', 'sad', 'surpise', 'neutral'];
const models = {}; const models = {};

View File

@ -1,4 +1,4 @@
const tf = require('@tensorflow/tfjs'); import * as tf from '@tensorflow/tfjs/dist/tf.es2017.js';
const NUM_LANDMARKS = 6; const NUM_LANDMARKS = 6;

View File

@ -1,4 +1,4 @@
const tf = require('@tensorflow/tfjs'); import * as tf from '@tensorflow/tfjs/dist/tf.es2017.js';
function scaleBoxCoordinates(box, factor) { function scaleBoxCoordinates(box, factor) {
const startPoint = [box.startPoint[0] * factor[0], box.startPoint[1] * factor[1]]; const startPoint = [box.startPoint[0] * factor[0], box.startPoint[1] * factor[1]];

View File

@ -1,9 +1,9 @@
const tf = require('@tensorflow/tfjs'); import * as tf from '@tensorflow/tfjs/dist/tf.es2017.js';
const blazeface = require('./blazeface'); import * as blazeface from './blazeface';
const keypoints = require('./keypoints'); import * as keypoints from './keypoints';
const pipe = require('./facepipeline'); import * as pipe from './facepipeline';
const uv_coords = require('./uvcoords'); import * as uv_coords from './uvcoords';
const triangulation = require('./triangulation').default; import * as triangulation from './triangulation';
class MediaPipeFaceMesh { class MediaPipeFaceMesh {
constructor(blazeFace, blazeMeshModel, irisModel, config) { constructor(blazeFace, blazeMeshModel, irisModel, config) {
@ -58,4 +58,4 @@ async function load(config) {
exports.load = load; exports.load = load;
exports.MediaPipeFaceMesh = MediaPipeFaceMesh; exports.MediaPipeFaceMesh = MediaPipeFaceMesh;
exports.uv_coords = uv_coords; exports.uv_coords = uv_coords;
exports.triangulation = triangulation; exports.triangulation = triangulation.default;

View File

@ -1,8 +1,8 @@
/* eslint-disable class-methods-use-this */ /* eslint-disable class-methods-use-this */
const tf = require('@tensorflow/tfjs'); import * as tf from '@tensorflow/tfjs/dist/tf.es2017.js';
const bounding = require('./box'); import * as bounding from './box';
const keypoints = require('./keypoints'); import * as keypoints from './keypoints';
const util = require('./util'); import * as util from './util';
const LANDMARKS_COUNT = 468; const LANDMARKS_COUNT = 468;
const MESH_MOUTH_INDEX = 13; const MESH_MOUTH_INDEX = 13;

View File

@ -1,5 +1,5 @@
const tf = require('@tensorflow/tfjs'); import * as tf from '@tensorflow/tfjs/dist/tf.es2017.js';
const profile = require('../profile.js'); import * as profile from '../profile.js';
const models = {}; const models = {};
let last = { gender: '' }; let last = { gender: '' };

View File

@ -14,7 +14,7 @@
* limitations under the License. * limitations under the License.
* ============================================================================= * =============================================================================
*/ */
const tf = require('@tensorflow/tfjs'); import * as tf from '@tensorflow/tfjs/dist/tf.es2017.js';
function getBoxSize(box) { function getBoxSize(box) {
return [ return [

View File

@ -15,8 +15,8 @@
* ============================================================================= * =============================================================================
*/ */
const tf = require('@tensorflow/tfjs'); import * as tf from '@tensorflow/tfjs/dist/tf.es2017.js';
const box = require('./box'); import * as box from './box';
class HandDetector { class HandDetector {
constructor(model, inputSize, anchorsAnnotated) { constructor(model, inputSize, anchorsAnnotated) {

View File

@ -15,9 +15,9 @@
* ============================================================================= * =============================================================================
*/ */
const tf = require('@tensorflow/tfjs'); import * as tf from '@tensorflow/tfjs/dist/tf.es2017.js';
const box = require('./box'); import * as box from './box';
const util = require('./util'); import * as util from './util';
const PALM_BOX_SHIFT_VECTOR = [0, -0.4]; const PALM_BOX_SHIFT_VECTOR = [0, -0.4];
const PALM_BOX_ENLARGE_FACTOR = 3; const PALM_BOX_ENLARGE_FACTOR = 3;

View File

@ -16,10 +16,10 @@
*/ */
// https://storage.googleapis.com/tfjs-models/demos/handpose/index.html // https://storage.googleapis.com/tfjs-models/demos/handpose/index.html
const tf = require('@tensorflow/tfjs'); import * as tf from '@tensorflow/tfjs/dist/tf.es2017.js';
const handdetector = require('./handdetector'); import * as handdetector from './handdetector';
const pipeline = require('./handpipeline'); import * as pipeline from './handpipeline';
const anchors = require('./anchors'); import * as anchors from './anchors';
const MESH_ANNOTATIONS = { const MESH_ANNOTATIONS = {
thumb: [1, 2, 3, 4], thumb: [1, 2, 3, 4],

View File

@ -1,15 +1,16 @@
const tf = require('@tensorflow/tfjs'); import * as tf from '@tensorflow/tfjs/dist/tf.es2017.js';
const facemesh = require('./face/facemesh.js'); import { setWasmPaths } from '@tensorflow/tfjs-backend-wasm/dist/index.js';
const age = require('./age/age.js'); import * as facemesh from './face/facemesh.js';
const gender = require('./gender/gender.js'); import * as age from './age/age.js';
const emotion = require('./emotion/emotion.js'); import * as gender from './gender/gender.js';
const posenet = require('./body/posenet.js'); import * as emotion from './emotion/emotion.js';
const handpose = require('./hand/handpose.js'); import * as posenet from './body/posenet.js';
const gesture = require('./gesture.js'); import * as handpose from './hand/handpose.js';
const image = require('./image.js'); import * as gesture from './gesture.js';
const profile = require('./profile.js'); import * as image from './image.js';
const defaults = require('../config.js').default; import * as profile from './profile.js';
const app = require('../package.json'); import * as config from '../config.js';
import * as app from '../package.json';
// static config override for non-video detection // static config override for non-video detection
const disableSkipFrames = { const disableSkipFrames = {
@ -45,7 +46,7 @@ class Human {
constructor(userConfig = {}) { constructor(userConfig = {}) {
this.tf = tf; this.tf = tf;
this.version = app.version; this.version = app.version;
this.config = mergeDeep(defaults, userConfig); this.config = mergeDeep(config.default, userConfig);
this.fx = null; this.fx = null;
this.state = 'idle'; this.state = 'idle';
this.numTensors = 0; this.numTensors = 0;
@ -163,7 +164,16 @@ class Human {
this.log('Backend not registred:', this.config.backend); this.log('Backend not registred:', this.config.backend);
} }
*/ */
this.log('setting backend:', this.config.backend); this.log('setting backend:', this.config.backend);
if (this.config.backend === 'wasm') {
this.log('settings wasm path:', this.config.wasmPath);
setWasmPaths(this.config.wasmPath);
const simd = await tf.env().getAsync('WASM_HAS_SIMD_SUPPORT');
if (!simd) this.log('warning: wasm simd support is not enabled');
}
await tf.setBackend(this.config.backend); await tf.setBackend(this.config.backend);
tf.enableProdMode(); tf.enableProdMode();
/* debug mode is really too mcuh /* debug mode is really too mcuh
@ -171,7 +181,7 @@ class Human {
*/ */
if (this.config.backend === 'webgl') { if (this.config.backend === 'webgl') {
if (this.config.deallocate) { if (this.config.deallocate) {
this.log('Changing WebGL: WEBGL_DELETE_TEXTURE_THRESHOLD:', this.config.deallocate); this.log('changing webgl: WEBGL_DELETE_TEXTURE_THRESHOLD:', this.config.deallocate);
tf.ENV.set('WEBGL_DELETE_TEXTURE_THRESHOLD', this.config.deallocate ? 0 : -1); tf.ENV.set('WEBGL_DELETE_TEXTURE_THRESHOLD', this.config.deallocate ? 0 : -1);
} }
// tf.ENV.set('WEBGL_FORCE_F16_TEXTURES', true); // tf.ENV.set('WEBGL_FORCE_F16_TEXTURES', true);

View File

@ -1,5 +1,5 @@
const tf = require('@tensorflow/tfjs'); import * as tf from '@tensorflow/tfjs/dist/tf.es2017.js';
const fxImage = require('./imagefx.js'); import * as fxImage from './imagefx.js';
// internal temp canvases // internal temp canvases
let inCanvas = null; let inCanvas = null;

2
wiki

@ -1 +1 @@
Subproject commit 17d21d19953ab16616c4a07423c0eada76577686 Subproject commit 6674208a10ed65d0737bb5c2b05b67f2b70fab19