diff --git a/CHANGELOG.md b/CHANGELOG.md index 7cde4251..f7af3e69 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -9,11 +9,12 @@ ## Changelog +### **HEAD -> main** 2022/11/22 mandic00@live.com + + ### **3.0.1** 2022/11/22 mandic00@live.com - -### **origin/main** 2022/11/22 mandic00@live.com - +- support dynamic loads - polish demos - add facedetect demo and fix model async load - enforce markdown linting diff --git a/TODO.md b/TODO.md index 2dab37ae..9effe164 100644 --- a/TODO.md +++ b/TODO.md @@ -50,58 +50,3 @@ No support for running in **web workers** as Safari still does not support `Offs

## Pending Release Changes - -Optimizations: -- Enabled high-resolution optimizations - Internal limits are increased from **2k** to **4k** -- Enhanced device capabilities detection - See `human.env.[agent, wasm, webgl, webgpu]` for details -- If `config.backend` is not set, Human will auto-select best backend - based on device capabilities -- Enhanced support for `webgpu` -- Reduce build dependencies - `Human` is now 30% smaller :) - As usual, `Human` has **zero** runtime dependencies, - all *devDependencies* are only to rebuild `Human` itself -- Default hand skeleton model changed from `handlandmark-full` to `handlandmark-lite` - Both models are still supported, this reduces default size and increases performance - -Features: -- Add [draw label templates](https://github.com/vladmandic/human/wiki/Draw) - Allows easy customization of results labels drawn on canvas -- Add `config.filter.autoBrightness` (*enabled by default*) - Per-frame video on-the-fly brightness adjustments - Which significantly increases performance and precision in poorly lit scenes -- Add new demo [face detect]((https://vladmandic.github.io/human/demo/facedetect/index.html)) -- Improved `config.filter.equalization` (*disabled by default*) - Image and video on-demand histogram equalization -- Support selecting specific video source when multiple cameras are present - See `human.webcam.enumerate()` -- Updated algorithm to determine distance from camera based on iris size - See `human.result.face[n].distance` - -Architecture: -- Upgrade to **TFJS 4.1** with **strong typing** - see [notes](https://github.com/vladmandic/human#typedefs) on how to use -- `TypeDef` refactoring -- Re-architect `human.models` namespace for better dynamic model handling - Added additional methods `load`, `list`, `loaded`, `reset` -- Repack external typedefs - Removes all external typedef dependencies -- Refactor namespace exports - Better [TypeDoc specs](https://vladmandic.github.io/human/typedoc/index.html) -- Add named export for improved bundler support when using non-default imports -- Cleanup Git history for `dist`/`typedef`/`types` -- Cleanup `@vladmandic/human-models` -- Support for **NodeJS v19** -- Upgrade to **TypeScript 4.9** -- Support for dynamic module load in **NodeJS** - See - -Breaking changes: -- Replaced `result.face[n].iris` with `result.face[n].distance` -- Replaced `human.getModelStats()` with `human.models.stats()` -- Moved `human.similarity`, `human.distance` and `human.match` to namespace `human.match.*` -- Obsolete `human.enhance()` -- Obsolete `human.gl` -- Renamed model `mb3-centernet` to `centernet` diff --git a/test/build.log b/test/build.log index 206ea15b..a5c3ccc2 100644 --- a/test/build.log +++ b/test/build.log @@ -1,50 +1,50 @@ -2022-11-22 10:34:25 DATA:  Build {"name":"@vladmandic/human","version":"3.0.1"} -2022-11-22 10:34:25 INFO:  Application: {"name":"@vladmandic/human","version":"3.0.1"} -2022-11-22 10:34:25 INFO:  Environment: {"profile":"production","config":".build.json","package":"package.json","tsconfig":true,"eslintrc":true,"git":true} -2022-11-22 10:34:25 INFO:  Toolchain: {"build":"0.7.14","esbuild":"0.15.15","typescript":"4.9.3","typedoc":"0.23.21","eslint":"8.28.0"} -2022-11-22 10:34:25 INFO:  Build: {"profile":"production","steps":["clean","compile","typings","typedoc","lint","changelog"]} -2022-11-22 10:34:25 STATE: Clean: {"locations":["dist/*","types/*","typedoc/*"]} -2022-11-22 10:34:25 STATE: Compile: {"name":"tfjs/browser/version","format":"esm","platform":"browser","input":"tfjs/tf-version.ts","output":"dist/tfjs.version.js","files":1,"inputBytes":1289,"outputBytes":361} -2022-11-22 10:34:25 STATE: Compile: {"name":"tfjs/nodejs/cpu","format":"cjs","platform":"node","input":"tfjs/tf-node.ts","output":"dist/tfjs.esm.js","files":2,"inputBytes":569,"outputBytes":924} -2022-11-22 10:34:25 STATE: Compile: {"name":"human/nodejs/cpu","format":"cjs","platform":"node","input":"src/human.ts","output":"dist/human.node.js","files":80,"inputBytes":670542,"outputBytes":317619} -2022-11-22 10:34:25 STATE: Compile: {"name":"tfjs/nodejs/gpu","format":"cjs","platform":"node","input":"tfjs/tf-node-gpu.ts","output":"dist/tfjs.esm.js","files":2,"inputBytes":577,"outputBytes":928} -2022-11-22 10:34:25 STATE: Compile: {"name":"human/nodejs/gpu","format":"cjs","platform":"node","input":"src/human.ts","output":"dist/human.node-gpu.js","files":80,"inputBytes":670546,"outputBytes":317623} -2022-11-22 10:34:25 STATE: Compile: {"name":"tfjs/nodejs/wasm","format":"cjs","platform":"node","input":"tfjs/tf-node-wasm.ts","output":"dist/tfjs.esm.js","files":2,"inputBytes":665,"outputBytes":1876} -2022-11-22 10:34:25 STATE: Compile: {"name":"human/nodejs/wasm","format":"cjs","platform":"node","input":"src/human.ts","output":"dist/human.node-wasm.js","files":80,"inputBytes":671494,"outputBytes":317734} -2022-11-22 10:34:25 STATE: Compile: {"name":"tfjs/browser/esm/nobundle","format":"esm","platform":"browser","input":"tfjs/tf-browser.ts","output":"dist/tfjs.esm.js","files":2,"inputBytes":1375,"outputBytes":670} -2022-11-22 10:34:25 STATE: Compile: {"name":"human/browser/esm/nobundle","format":"esm","platform":"browser","input":"src/human.ts","output":"dist/human.esm-nobundle.js","files":80,"inputBytes":670288,"outputBytes":316195} -2022-11-22 10:34:26 STATE: Compile: {"name":"tfjs/browser/esm/bundle","format":"esm","platform":"browser","input":"tfjs/tf-browser.ts","output":"dist/tfjs.esm.js","files":10,"inputBytes":1375,"outputBytes":1138192} -2022-11-22 10:34:26 STATE: Compile: {"name":"human/browser/iife/bundle","format":"iife","platform":"browser","input":"src/human.ts","output":"dist/human.js","files":80,"inputBytes":1807810,"outputBytes":1450757} -2022-11-22 10:34:26 STATE: Compile: {"name":"human/browser/esm/bundle","format":"esm","platform":"browser","input":"src/human.ts","output":"dist/human.esm.js","files":80,"inputBytes":1807810,"outputBytes":1894174} -2022-11-22 10:34:30 STATE: Typings: {"input":"src/human.ts","output":"types/lib","files":15} -2022-11-22 10:34:31 STATE: TypeDoc: {"input":"src/human.ts","output":"typedoc","objects":77,"generated":true} -2022-11-22 10:34:31 STATE: Compile: {"name":"demo/typescript","format":"esm","platform":"browser","input":"demo/typescript/index.ts","output":"demo/typescript/index.js","files":1,"inputBytes":6082,"outputBytes":2872} -2022-11-22 10:34:31 STATE: Compile: {"name":"demo/faceid","format":"esm","platform":"browser","input":"demo/faceid/index.ts","output":"demo/faceid/index.js","files":2,"inputBytes":17572,"outputBytes":9456} -2022-11-22 10:34:40 STATE: Lint: {"locations":["**/*.json","src/**/*.ts","test/**/*.js","demo/**/*.js","**/*.md"],"files":169,"errors":0,"warnings":0} -2022-11-22 10:34:40 STATE: ChangeLog: {"repository":"https://github.com/vladmandic/human","branch":"main","output":"CHANGELOG.md"} -2022-11-22 10:34:40 STATE: Copy: {"input":"node_modules/@vladmandic/tfjs/types/tfjs-core.d.ts","output":"types/tfjs-core.d.ts"} -2022-11-22 10:34:40 INFO:  Done... -2022-11-22 10:34:40 STATE: Copy: {"input":"node_modules/@vladmandic/tfjs/types/tfjs.d.ts","output":"types/tfjs.esm.d.ts"} -2022-11-22 10:34:40 STATE: Copy: {"input":"src/types/tsconfig.json","output":"types/tsconfig.json"} -2022-11-22 10:34:40 STATE: Copy: {"input":"src/types/eslint.json","output":"types/.eslintrc.json"} -2022-11-22 10:34:40 STATE: Copy: {"input":"src/types/tfjs.esm.d.ts","output":"dist/tfjs.esm.d.ts"} -2022-11-22 10:34:40 STATE: Filter: {"input":"types/tfjs-core.d.ts"} -2022-11-22 10:34:41 STATE: API-Extractor: {"succeeeded":true,"errors":0,"warnings":204} -2022-11-22 10:34:41 STATE: Filter: {"input":"types/human.d.ts"} -2022-11-22 10:34:41 STATE: Write: {"output":"dist/human.esm-nobundle.d.ts"} -2022-11-22 10:34:41 STATE: Write: {"output":"dist/human.esm.d.ts"} -2022-11-22 10:34:41 STATE: Write: {"output":"dist/human.d.ts"} -2022-11-22 10:34:41 STATE: Write: {"output":"dist/human.node-gpu.d.ts"} -2022-11-22 10:34:41 STATE: Write: {"output":"dist/human.node.d.ts"} -2022-11-22 10:34:41 STATE: Write: {"output":"dist/human.node-wasm.d.ts"} -2022-11-22 10:34:41 INFO:  Analyze models: {"folders":8,"result":"models/models.json"} -2022-11-22 10:34:41 STATE: Models {"folder":"./models","models":12} -2022-11-22 10:34:41 STATE: Models {"folder":"../human-models/models","models":41} -2022-11-22 10:34:41 STATE: Models {"folder":"../blazepose/model/","models":4} -2022-11-22 10:34:41 STATE: Models {"folder":"../anti-spoofing/model","models":1} -2022-11-22 10:34:41 STATE: Models {"folder":"../efficientpose/models","models":3} -2022-11-22 10:34:41 STATE: Models {"folder":"../insightface/models","models":5} -2022-11-22 10:34:41 STATE: Models {"folder":"../movenet/models","models":3} -2022-11-22 10:34:41 STATE: Models {"folder":"../nanodet/models","models":4} -2022-11-22 10:34:42 STATE: Models: {"count":55,"totalSize":372917743} -2022-11-22 10:34:42 INFO:  Human Build complete... {"logFile":"test/build.log"} +2022-11-22 10:59:38 DATA:  Build {"name":"@vladmandic/human","version":"3.0.1"} +2022-11-22 10:59:38 INFO:  Application: {"name":"@vladmandic/human","version":"3.0.1"} +2022-11-22 10:59:38 INFO:  Environment: {"profile":"production","config":".build.json","package":"package.json","tsconfig":true,"eslintrc":true,"git":true} +2022-11-22 10:59:38 INFO:  Toolchain: {"build":"0.7.14","esbuild":"0.15.15","typescript":"4.9.3","typedoc":"0.23.21","eslint":"8.28.0"} +2022-11-22 10:59:38 INFO:  Build: {"profile":"production","steps":["clean","compile","typings","typedoc","lint","changelog"]} +2022-11-22 10:59:38 STATE: Clean: {"locations":["dist/*","types/*","typedoc/*"]} +2022-11-22 10:59:38 STATE: Compile: {"name":"tfjs/browser/version","format":"esm","platform":"browser","input":"tfjs/tf-version.ts","output":"dist/tfjs.version.js","files":1,"inputBytes":1289,"outputBytes":361} +2022-11-22 10:59:38 STATE: Compile: {"name":"tfjs/nodejs/cpu","format":"cjs","platform":"node","input":"tfjs/tf-node.ts","output":"dist/tfjs.esm.js","files":2,"inputBytes":569,"outputBytes":924} +2022-11-22 10:59:38 STATE: Compile: {"name":"human/nodejs/cpu","format":"cjs","platform":"node","input":"src/human.ts","output":"dist/human.node.js","files":80,"inputBytes":670542,"outputBytes":317619} +2022-11-22 10:59:38 STATE: Compile: {"name":"tfjs/nodejs/gpu","format":"cjs","platform":"node","input":"tfjs/tf-node-gpu.ts","output":"dist/tfjs.esm.js","files":2,"inputBytes":577,"outputBytes":928} +2022-11-22 10:59:38 STATE: Compile: {"name":"human/nodejs/gpu","format":"cjs","platform":"node","input":"src/human.ts","output":"dist/human.node-gpu.js","files":80,"inputBytes":670546,"outputBytes":317623} +2022-11-22 10:59:38 STATE: Compile: {"name":"tfjs/nodejs/wasm","format":"cjs","platform":"node","input":"tfjs/tf-node-wasm.ts","output":"dist/tfjs.esm.js","files":2,"inputBytes":665,"outputBytes":1876} +2022-11-22 10:59:38 STATE: Compile: {"name":"human/nodejs/wasm","format":"cjs","platform":"node","input":"src/human.ts","output":"dist/human.node-wasm.js","files":80,"inputBytes":671494,"outputBytes":317734} +2022-11-22 10:59:38 STATE: Compile: {"name":"tfjs/browser/esm/nobundle","format":"esm","platform":"browser","input":"tfjs/tf-browser.ts","output":"dist/tfjs.esm.js","files":2,"inputBytes":1375,"outputBytes":670} +2022-11-22 10:59:38 STATE: Compile: {"name":"human/browser/esm/nobundle","format":"esm","platform":"browser","input":"src/human.ts","output":"dist/human.esm-nobundle.js","files":80,"inputBytes":670288,"outputBytes":316195} +2022-11-22 10:59:39 STATE: Compile: {"name":"tfjs/browser/esm/bundle","format":"esm","platform":"browser","input":"tfjs/tf-browser.ts","output":"dist/tfjs.esm.js","files":10,"inputBytes":1375,"outputBytes":1138192} +2022-11-22 10:59:39 STATE: Compile: {"name":"human/browser/iife/bundle","format":"iife","platform":"browser","input":"src/human.ts","output":"dist/human.js","files":80,"inputBytes":1807810,"outputBytes":1450757} +2022-11-22 10:59:39 STATE: Compile: {"name":"human/browser/esm/bundle","format":"esm","platform":"browser","input":"src/human.ts","output":"dist/human.esm.js","files":80,"inputBytes":1807810,"outputBytes":1894174} +2022-11-22 10:59:43 STATE: Typings: {"input":"src/human.ts","output":"types/lib","files":15} +2022-11-22 10:59:45 STATE: TypeDoc: {"input":"src/human.ts","output":"typedoc","objects":77,"generated":true} +2022-11-22 10:59:45 STATE: Compile: {"name":"demo/typescript","format":"esm","platform":"browser","input":"demo/typescript/index.ts","output":"demo/typescript/index.js","files":1,"inputBytes":6082,"outputBytes":2872} +2022-11-22 10:59:45 STATE: Compile: {"name":"demo/faceid","format":"esm","platform":"browser","input":"demo/faceid/index.ts","output":"demo/faceid/index.js","files":2,"inputBytes":17572,"outputBytes":9456} +2022-11-22 10:59:54 STATE: Lint: {"locations":["**/*.json","src/**/*.ts","test/**/*.js","demo/**/*.js","**/*.md"],"files":169,"errors":0,"warnings":0} +2022-11-22 10:59:54 STATE: ChangeLog: {"repository":"https://github.com/vladmandic/human","branch":"main","output":"CHANGELOG.md"} +2022-11-22 10:59:54 STATE: Copy: {"input":"node_modules/@vladmandic/tfjs/types/tfjs-core.d.ts","output":"types/tfjs-core.d.ts"} +2022-11-22 10:59:54 INFO:  Done... +2022-11-22 10:59:54 STATE: Copy: {"input":"node_modules/@vladmandic/tfjs/types/tfjs.d.ts","output":"types/tfjs.esm.d.ts"} +2022-11-22 10:59:54 STATE: Copy: {"input":"src/types/tsconfig.json","output":"types/tsconfig.json"} +2022-11-22 10:59:54 STATE: Copy: {"input":"src/types/eslint.json","output":"types/.eslintrc.json"} +2022-11-22 10:59:54 STATE: Copy: {"input":"src/types/tfjs.esm.d.ts","output":"dist/tfjs.esm.d.ts"} +2022-11-22 10:59:54 STATE: Filter: {"input":"types/tfjs-core.d.ts"} +2022-11-22 10:59:54 STATE: API-Extractor: {"succeeeded":true,"errors":0,"warnings":204} +2022-11-22 10:59:54 STATE: Filter: {"input":"types/human.d.ts"} +2022-11-22 10:59:54 STATE: Write: {"output":"dist/human.esm-nobundle.d.ts"} +2022-11-22 10:59:54 STATE: Write: {"output":"dist/human.esm.d.ts"} +2022-11-22 10:59:54 STATE: Write: {"output":"dist/human.d.ts"} +2022-11-22 10:59:54 STATE: Write: {"output":"dist/human.node-gpu.d.ts"} +2022-11-22 10:59:54 STATE: Write: {"output":"dist/human.node.d.ts"} +2022-11-22 10:59:54 STATE: Write: {"output":"dist/human.node-wasm.d.ts"} +2022-11-22 10:59:54 INFO:  Analyze models: {"folders":8,"result":"models/models.json"} +2022-11-22 10:59:54 STATE: Models {"folder":"./models","models":12} +2022-11-22 10:59:54 STATE: Models {"folder":"../human-models/models","models":41} +2022-11-22 10:59:54 STATE: Models {"folder":"../blazepose/model/","models":4} +2022-11-22 10:59:54 STATE: Models {"folder":"../anti-spoofing/model","models":1} +2022-11-22 10:59:54 STATE: Models {"folder":"../efficientpose/models","models":3} +2022-11-22 10:59:54 STATE: Models {"folder":"../insightface/models","models":5} +2022-11-22 10:59:54 STATE: Models {"folder":"../movenet/models","models":3} +2022-11-22 10:59:54 STATE: Models {"folder":"../nanodet/models","models":4} +2022-11-22 10:59:55 STATE: Models: {"count":55,"totalSize":372917743} +2022-11-22 10:59:55 INFO:  Human Build complete... {"logFile":"test/build.log"}