mirror of https://github.com/vladmandic/human
add gear-e models
parent
6fb4d04df3
commit
eb53988f90
|
@ -9,8 +9,9 @@
|
|||
|
||||
## Changelog
|
||||
|
||||
### **HEAD -> main** 2023/01/29 mandic00@live.com
|
||||
### **HEAD -> main** 2023/01/31 mandic00@live.com
|
||||
|
||||
- redo blazeface annotations
|
||||
|
||||
### **3.0.4** 2023/01/29 mandic00@live.com
|
||||
|
||||
|
|
|
@ -444,7 +444,7 @@ For more info, see [**Configuration Details**](https://github.com/vladmandic/hum
|
|||
|
||||
<br><hr><br>
|
||||
|
||||
`Human` library is written in [TypeScript](https://www.typescriptlang.org/docs/handbook/intro.html) **4.9** using [TensorFlow/JS](https://www.tensorflow.org/js/) **4.1** and conforming to latest `JavaScript` [ECMAScript version 2022](https://262.ecma-international.org/) standard
|
||||
`Human` library is written in [TypeScript](https://www.typescriptlang.org/docs/handbook/intro.html) **4.9** using [TensorFlow/JS](https://www.tensorflow.org/js/) **4.2** and conforming to latest `JavaScript` [ECMAScript version 2022](https://262.ecma-international.org/) standard
|
||||
|
||||
Build target for distributables is `JavaScript` [EMCAScript version 2018](https://262.ecma-international.org/9.0/)
|
||||
|
||||
|
|
File diff suppressed because one or more lines are too long
|
@ -32621,6 +32621,8 @@ __export(models_exports, {
|
|||
faceres: () => faceres,
|
||||
"faceres-deep": () => faceres_deep,
|
||||
gear: () => gear,
|
||||
"gear-e1": () => gear_e1,
|
||||
"gear-e2": () => gear_e2,
|
||||
gender: () => gender,
|
||||
"gender-ssrnet-imdb": () => gender_ssrnet_imdb,
|
||||
handdetect: () => handdetect,
|
||||
|
@ -32678,6 +32680,8 @@ var facemesh_attention = 2382414;
|
|||
var facemesh_detection_full = 1026192;
|
||||
var facemesh_detection_short = 201268;
|
||||
var faceres_deep = 13957620;
|
||||
var gear_e1 = 112438;
|
||||
var gear_e2 = 112438;
|
||||
var gear = 1498916;
|
||||
var gender_ssrnet_imdb = 161236;
|
||||
var gender = 201808;
|
||||
|
@ -32734,6 +32738,8 @@ var models_default = {
|
|||
"facemesh-detection-full": facemesh_detection_full,
|
||||
"facemesh-detection-short": facemesh_detection_short,
|
||||
"faceres-deep": faceres_deep,
|
||||
"gear-e1": gear_e1,
|
||||
"gear-e2": gear_e2,
|
||||
gear,
|
||||
"gender-ssrnet-imdb": gender_ssrnet_imdb,
|
||||
gender,
|
||||
|
@ -33158,7 +33164,6 @@ async function check(instance, force = false) {
|
|||
instance.config.backend = Rie();
|
||||
await env.updateBackend();
|
||||
registerCustomOps(instance.config);
|
||||
env.initial = false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
|
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
File diff suppressed because one or more lines are too long
|
@ -25,6 +25,8 @@
|
|||
"facemesh-detection-full": 1026192,
|
||||
"facemesh-detection-short": 201268,
|
||||
"faceres-deep": 13957620,
|
||||
"gear-e1": 112438,
|
||||
"gear-e2": 112438,
|
||||
"gear": 1498916,
|
||||
"gender-ssrnet-imdb": 161236,
|
||||
"gender": 201808,
|
||||
|
|
|
@ -288,7 +288,6 @@ export class Human {
|
|||
const timeStamp = now();
|
||||
const count = Object.values(this.models.models).filter((model) => model).length;
|
||||
if (userConfig) this.config = mergeDeep(this.config, userConfig) as Config;
|
||||
|
||||
if (this.env.initial) { // print version info on first run and check for correct backend setup
|
||||
if (!await backend.check(this, false)) log('error: backend check failed');
|
||||
await tf.ready();
|
||||
|
|
|
@ -217,7 +217,7 @@ export async function check(instance: Human, force = false) {
|
|||
await env.updateBackend(); // update env on backend init
|
||||
registerCustomOps(instance.config);
|
||||
// await env.updateBackend(); // update env on backend init
|
||||
env.initial = false;
|
||||
// env.initial = false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
|
100
test/build.log
100
test/build.log
|
@ -1,50 +1,50 @@
|
|||
2023-01-31 08:51:47 [32mDATA: [39m Build {"name":"@vladmandic/human","version":"3.0.4"}
|
||||
2023-01-31 08:51:47 [36mINFO: [39m Application: {"name":"@vladmandic/human","version":"3.0.4"}
|
||||
2023-01-31 08:51:47 [36mINFO: [39m Environment: {"profile":"production","config":".build.json","package":"package.json","tsconfig":true,"eslintrc":true,"git":true}
|
||||
2023-01-31 08:51:47 [36mINFO: [39m Toolchain: {"build":"0.7.15","esbuild":"0.16.17","typescript":"4.9.5","typedoc":"0.23.24","eslint":"8.33.0"}
|
||||
2023-01-31 08:51:47 [36mINFO: [39m Build: {"profile":"production","steps":["clean","compile","typings","typedoc","lint","changelog"]}
|
||||
2023-01-31 08:51:47 [35mSTATE:[39m Clean: {"locations":["dist/*","types/*","typedoc/*"]}
|
||||
2023-01-31 08:51:47 [35mSTATE:[39m 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}
|
||||
2023-01-31 08:51:47 [35mSTATE:[39m 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}
|
||||
2023-01-31 08:51:47 [35mSTATE:[39m Compile: {"name":"human/nodejs/cpu","format":"cjs","platform":"node","input":"src/human.ts","output":"dist/human.node.js","files":80,"inputBytes":672712,"outputBytes":318340}
|
||||
2023-01-31 08:51:47 [35mSTATE:[39m 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}
|
||||
2023-01-31 08:51:47 [35mSTATE:[39m Compile: {"name":"human/nodejs/gpu","format":"cjs","platform":"node","input":"src/human.ts","output":"dist/human.node-gpu.js","files":80,"inputBytes":672716,"outputBytes":318344}
|
||||
2023-01-31 08:51:47 [35mSTATE:[39m 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}
|
||||
2023-01-31 08:51:47 [35mSTATE:[39m Compile: {"name":"human/nodejs/wasm","format":"cjs","platform":"node","input":"src/human.ts","output":"dist/human.node-wasm.js","files":80,"inputBytes":673664,"outputBytes":318455}
|
||||
2023-01-31 08:51:47 [35mSTATE:[39m Compile: {"name":"tfjs/browser/esm/nobundle","format":"esm","platform":"browser","input":"tfjs/tf-browser.ts","output":"dist/tfjs.esm.js","files":2,"inputBytes":1375,"outputBytes":670}
|
||||
2023-01-31 08:51:47 [35mSTATE:[39m Compile: {"name":"human/browser/esm/nobundle","format":"esm","platform":"browser","input":"src/human.ts","output":"dist/human.esm-nobundle.js","files":80,"inputBytes":672458,"outputBytes":316915}
|
||||
2023-01-31 08:51:47 [35mSTATE:[39m 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":1151306}
|
||||
2023-01-31 08:51:47 [35mSTATE:[39m Compile: {"name":"human/browser/iife/bundle","format":"iife","platform":"browser","input":"src/human.ts","output":"dist/human.js","files":80,"inputBytes":1823094,"outputBytes":1464164}
|
||||
2023-01-31 08:51:47 [35mSTATE:[39m Compile: {"name":"human/browser/esm/bundle","format":"esm","platform":"browser","input":"src/human.ts","output":"dist/human.esm.js","files":80,"inputBytes":1823094,"outputBytes":1930337}
|
||||
2023-01-31 08:51:51 [35mSTATE:[39m Typings: {"input":"src/human.ts","output":"types/lib","files":15}
|
||||
2023-01-31 08:51:53 [35mSTATE:[39m TypeDoc: {"input":"src/human.ts","output":"typedoc","objects":77,"generated":true}
|
||||
2023-01-31 08:51:53 [35mSTATE:[39m Compile: {"name":"demo/typescript","format":"esm","platform":"browser","input":"demo/typescript/index.ts","output":"demo/typescript/index.js","files":1,"inputBytes":6117,"outputBytes":2901}
|
||||
2023-01-31 08:51:53 [35mSTATE:[39m Compile: {"name":"demo/faceid","format":"esm","platform":"browser","input":"demo/faceid/index.ts","output":"demo/faceid/index.js","files":2,"inputBytes":17503,"outputBytes":9403}
|
||||
2023-01-31 08:52:02 [35mSTATE:[39m Lint: {"locations":["**/*.json","src/**/*.ts","test/**/*.js","demo/**/*.js","**/*.md"],"files":169,"errors":0,"warnings":0}
|
||||
2023-01-31 08:52:02 [35mSTATE:[39m ChangeLog: {"repository":"https://github.com/vladmandic/human","branch":"main","output":"CHANGELOG.md"}
|
||||
2023-01-31 08:52:02 [35mSTATE:[39m Copy: {"input":"node_modules/@vladmandic/tfjs/types/tfjs-core.d.ts","output":"types/tfjs-core.d.ts"}
|
||||
2023-01-31 08:52:02 [36mINFO: [39m Done...
|
||||
2023-01-31 08:52:02 [35mSTATE:[39m Copy: {"input":"node_modules/@vladmandic/tfjs/types/tfjs.d.ts","output":"types/tfjs.esm.d.ts"}
|
||||
2023-01-31 08:52:02 [35mSTATE:[39m Copy: {"input":"src/types/tsconfig.json","output":"types/tsconfig.json"}
|
||||
2023-01-31 08:52:02 [35mSTATE:[39m Copy: {"input":"src/types/eslint.json","output":"types/.eslintrc.json"}
|
||||
2023-01-31 08:52:02 [35mSTATE:[39m Copy: {"input":"src/types/tfjs.esm.d.ts","output":"dist/tfjs.esm.d.ts"}
|
||||
2023-01-31 08:52:02 [35mSTATE:[39m Filter: {"input":"types/tfjs-core.d.ts"}
|
||||
2023-01-31 08:52:04 [35mSTATE:[39m API-Extractor: {"succeeeded":true,"errors":0,"warnings":204}
|
||||
2023-01-31 08:52:04 [35mSTATE:[39m Filter: {"input":"types/human.d.ts"}
|
||||
2023-01-31 08:52:04 [35mSTATE:[39m Write: {"output":"dist/human.esm-nobundle.d.ts"}
|
||||
2023-01-31 08:52:04 [35mSTATE:[39m Write: {"output":"dist/human.esm.d.ts"}
|
||||
2023-01-31 08:52:04 [35mSTATE:[39m Write: {"output":"dist/human.d.ts"}
|
||||
2023-01-31 08:52:04 [35mSTATE:[39m Write: {"output":"dist/human.node-gpu.d.ts"}
|
||||
2023-01-31 08:52:04 [35mSTATE:[39m Write: {"output":"dist/human.node.d.ts"}
|
||||
2023-01-31 08:52:04 [35mSTATE:[39m Write: {"output":"dist/human.node-wasm.d.ts"}
|
||||
2023-01-31 08:52:04 [36mINFO: [39m Analyze models: {"folders":8,"result":"models/models.json"}
|
||||
2023-01-31 08:52:04 [35mSTATE:[39m Models {"folder":"./models","models":12}
|
||||
2023-01-31 08:52:04 [35mSTATE:[39m Models {"folder":"../human-models/models","models":41}
|
||||
2023-01-31 08:52:04 [35mSTATE:[39m Models {"folder":"../blazepose/model/","models":4}
|
||||
2023-01-31 08:52:04 [35mSTATE:[39m Models {"folder":"../anti-spoofing/model","models":1}
|
||||
2023-01-31 08:52:04 [35mSTATE:[39m Models {"folder":"../efficientpose/models","models":3}
|
||||
2023-01-31 08:52:04 [35mSTATE:[39m Models {"folder":"../insightface/models","models":5}
|
||||
2023-01-31 08:52:04 [35mSTATE:[39m Models {"folder":"../movenet/models","models":3}
|
||||
2023-01-31 08:52:04 [35mSTATE:[39m Models {"folder":"../nanodet/models","models":4}
|
||||
2023-01-31 08:52:04 [35mSTATE:[39m Models: {"count":55,"totalSize":372917743}
|
||||
2023-01-31 08:52:04 [36mINFO: [39m Human Build complete... {"logFile":"test/build.log"}
|
||||
2023-02-01 09:17:59 [32mDATA: [39m Build {"name":"@vladmandic/human","version":"3.0.4"}
|
||||
2023-02-01 09:17:59 [36mINFO: [39m Application: {"name":"@vladmandic/human","version":"3.0.4"}
|
||||
2023-02-01 09:17:59 [36mINFO: [39m Environment: {"profile":"production","config":".build.json","package":"package.json","tsconfig":true,"eslintrc":true,"git":true}
|
||||
2023-02-01 09:17:59 [36mINFO: [39m Toolchain: {"build":"0.7.15","esbuild":"0.16.17","typescript":"4.9.5","typedoc":"0.23.24","eslint":"8.33.0"}
|
||||
2023-02-01 09:17:59 [36mINFO: [39m Build: {"profile":"production","steps":["clean","compile","typings","typedoc","lint","changelog"]}
|
||||
2023-02-01 09:17:59 [35mSTATE:[39m Clean: {"locations":["dist/*","types/*","typedoc/*"]}
|
||||
2023-02-01 09:17:59 [35mSTATE:[39m 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}
|
||||
2023-02-01 09:17:59 [35mSTATE:[39m 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}
|
||||
2023-02-01 09:17:59 [35mSTATE:[39m Compile: {"name":"human/nodejs/cpu","format":"cjs","platform":"node","input":"src/human.ts","output":"dist/human.node.js","files":80,"inputBytes":672756,"outputBytes":318407}
|
||||
2023-02-01 09:17:59 [35mSTATE:[39m 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}
|
||||
2023-02-01 09:17:59 [35mSTATE:[39m Compile: {"name":"human/nodejs/gpu","format":"cjs","platform":"node","input":"src/human.ts","output":"dist/human.node-gpu.js","files":80,"inputBytes":672760,"outputBytes":318411}
|
||||
2023-02-01 09:17:59 [35mSTATE:[39m 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}
|
||||
2023-02-01 09:17:59 [35mSTATE:[39m Compile: {"name":"human/nodejs/wasm","format":"cjs","platform":"node","input":"src/human.ts","output":"dist/human.node-wasm.js","files":80,"inputBytes":673708,"outputBytes":318522}
|
||||
2023-02-01 09:17:59 [35mSTATE:[39m Compile: {"name":"tfjs/browser/esm/nobundle","format":"esm","platform":"browser","input":"tfjs/tf-browser.ts","output":"dist/tfjs.esm.js","files":2,"inputBytes":1375,"outputBytes":670}
|
||||
2023-02-01 09:17:59 [35mSTATE:[39m Compile: {"name":"human/browser/esm/nobundle","format":"esm","platform":"browser","input":"src/human.ts","output":"dist/human.esm-nobundle.js","files":80,"inputBytes":672502,"outputBytes":316982}
|
||||
2023-02-01 09:17:59 [35mSTATE:[39m 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":1151306}
|
||||
2023-02-01 09:17:59 [35mSTATE:[39m Compile: {"name":"human/browser/iife/bundle","format":"iife","platform":"browser","input":"src/human.ts","output":"dist/human.js","files":80,"inputBytes":1823138,"outputBytes":1464236}
|
||||
2023-02-01 09:17:59 [35mSTATE:[39m Compile: {"name":"human/browser/esm/bundle","format":"esm","platform":"browser","input":"src/human.ts","output":"dist/human.esm.js","files":80,"inputBytes":1823138,"outputBytes":1930456}
|
||||
2023-02-01 09:18:03 [35mSTATE:[39m Typings: {"input":"src/human.ts","output":"types/lib","files":15}
|
||||
2023-02-01 09:18:05 [35mSTATE:[39m TypeDoc: {"input":"src/human.ts","output":"typedoc","objects":77,"generated":true}
|
||||
2023-02-01 09:18:05 [35mSTATE:[39m Compile: {"name":"demo/typescript","format":"esm","platform":"browser","input":"demo/typescript/index.ts","output":"demo/typescript/index.js","files":1,"inputBytes":6117,"outputBytes":2901}
|
||||
2023-02-01 09:18:05 [35mSTATE:[39m Compile: {"name":"demo/faceid","format":"esm","platform":"browser","input":"demo/faceid/index.ts","output":"demo/faceid/index.js","files":2,"inputBytes":17503,"outputBytes":9403}
|
||||
2023-02-01 09:18:15 [35mSTATE:[39m Lint: {"locations":["**/*.json","src/**/*.ts","test/**/*.js","demo/**/*.js","**/*.md"],"files":170,"errors":0,"warnings":0}
|
||||
2023-02-01 09:18:15 [35mSTATE:[39m ChangeLog: {"repository":"https://github.com/vladmandic/human","branch":"main","output":"CHANGELOG.md"}
|
||||
2023-02-01 09:18:15 [35mSTATE:[39m Copy: {"input":"node_modules/@vladmandic/tfjs/types/tfjs-core.d.ts","output":"types/tfjs-core.d.ts"}
|
||||
2023-02-01 09:18:15 [36mINFO: [39m Done...
|
||||
2023-02-01 09:18:15 [35mSTATE:[39m Copy: {"input":"node_modules/@vladmandic/tfjs/types/tfjs.d.ts","output":"types/tfjs.esm.d.ts"}
|
||||
2023-02-01 09:18:15 [35mSTATE:[39m Copy: {"input":"src/types/tsconfig.json","output":"types/tsconfig.json"}
|
||||
2023-02-01 09:18:15 [35mSTATE:[39m Copy: {"input":"src/types/eslint.json","output":"types/.eslintrc.json"}
|
||||
2023-02-01 09:18:15 [35mSTATE:[39m Copy: {"input":"src/types/tfjs.esm.d.ts","output":"dist/tfjs.esm.d.ts"}
|
||||
2023-02-01 09:18:15 [35mSTATE:[39m Filter: {"input":"types/tfjs-core.d.ts"}
|
||||
2023-02-01 09:18:16 [35mSTATE:[39m API-Extractor: {"succeeeded":true,"errors":0,"warnings":204}
|
||||
2023-02-01 09:18:16 [35mSTATE:[39m Filter: {"input":"types/human.d.ts"}
|
||||
2023-02-01 09:18:16 [35mSTATE:[39m Write: {"output":"dist/human.esm-nobundle.d.ts"}
|
||||
2023-02-01 09:18:16 [35mSTATE:[39m Write: {"output":"dist/human.esm.d.ts"}
|
||||
2023-02-01 09:18:16 [35mSTATE:[39m Write: {"output":"dist/human.d.ts"}
|
||||
2023-02-01 09:18:16 [35mSTATE:[39m Write: {"output":"dist/human.node-gpu.d.ts"}
|
||||
2023-02-01 09:18:16 [35mSTATE:[39m Write: {"output":"dist/human.node.d.ts"}
|
||||
2023-02-01 09:18:16 [35mSTATE:[39m Write: {"output":"dist/human.node-wasm.d.ts"}
|
||||
2023-02-01 09:18:16 [36mINFO: [39m Analyze models: {"folders":8,"result":"models/models.json"}
|
||||
2023-02-01 09:18:16 [35mSTATE:[39m Models {"folder":"./models","models":12}
|
||||
2023-02-01 09:18:16 [35mSTATE:[39m Models {"folder":"../human-models/models","models":43}
|
||||
2023-02-01 09:18:16 [35mSTATE:[39m Models {"folder":"../blazepose/model/","models":4}
|
||||
2023-02-01 09:18:16 [35mSTATE:[39m Models {"folder":"../anti-spoofing/model","models":1}
|
||||
2023-02-01 09:18:16 [35mSTATE:[39m Models {"folder":"../efficientpose/models","models":3}
|
||||
2023-02-01 09:18:16 [35mSTATE:[39m Models {"folder":"../insightface/models","models":5}
|
||||
2023-02-01 09:18:16 [35mSTATE:[39m Models {"folder":"../movenet/models","models":3}
|
||||
2023-02-01 09:18:16 [35mSTATE:[39m Models {"folder":"../nanodet/models","models":4}
|
||||
2023-02-01 09:18:16 [35mSTATE:[39m Models: {"count":57,"totalSize":373142619}
|
||||
2023-02-01 09:18:16 [36mINFO: [39m Human Build complete... {"logFile":"test/build.log"}
|
||||
|
|
|
@ -0,0 +1,53 @@
|
|||
const fs = require('fs');
|
||||
const path = require('path');
|
||||
const log = require('@vladmandic/pilogger');
|
||||
const H = require('../dist/human.node.js');
|
||||
|
||||
const models = ['emotion.json', 'gear-e1.json', 'gear-e2.json'];
|
||||
const humanConfig = {
|
||||
cacheSensitivity: 0,
|
||||
modelBasePath: 'https://vladmandic.github.io/human-models/models/',
|
||||
face: {
|
||||
scale: 1.4,
|
||||
detector: { enabled: true, maxDetected: 1 },
|
||||
mesh: { enabled: true },
|
||||
iris: { enabled: false },
|
||||
description: { enabled: false },
|
||||
emotion: { enabled: true },
|
||||
},
|
||||
body: { enabled: false },
|
||||
hand: { enabled: false },
|
||||
object: { enabled: false },
|
||||
gestures: { enabled: false },
|
||||
};
|
||||
|
||||
function samples() {
|
||||
const dir = path.join(__dirname, '../samples/in');
|
||||
return fs.readdirSync(dir).filter((f) => f.includes('emotions')).map((i) => path.join(dir, i));
|
||||
}
|
||||
|
||||
async function main() {
|
||||
log.configure({ inspect: { breakLength: 350 } });
|
||||
const inputs = process.argv.length > 2 ? process.argv.slice(2, -1) : samples();
|
||||
const human = new H.Human(humanConfig);
|
||||
for (const model of models) {
|
||||
human.env.initial = true; // reset to allow model change instead of using cached model
|
||||
humanConfig.face.emotion.modelPath = model;
|
||||
await human.load(humanConfig);
|
||||
for (const input of inputs) {
|
||||
const stat = fs.statSync(input);
|
||||
const files = [];
|
||||
if (stat.isFile()) files.push(input);
|
||||
else if (stat.isDirectory()) fs.readdirSync(input).forEach((f) => files.push(path.join(input, f)));
|
||||
for (const f of files) {
|
||||
const buffer = fs.readFileSync(f);
|
||||
const tensor = human.tf.node.decodeImage(buffer, 3);
|
||||
const res = await human.detect(tensor);
|
||||
res.face.forEach((face) => log.info({ model, image: f, emotion: face.emotion }));
|
||||
human.tf.dispose(tensor);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
main();
|
|
@ -43,7 +43,7 @@ function getImageTensor(imageFile) {
|
|||
|
||||
function printResult(obj) {
|
||||
if (!obj || !obj.res || !obj.res.face || obj.res.face.length === 0) log('warn', 'failed: no faces detected');
|
||||
else obj.res.face.forEach((face, i) => log('data', 'results', { face: i, model: obj.model, image: obj.image, age: face.age, gender: face.gender, genderScore: face.genderScore, race: face.race }));
|
||||
else obj.res.face.forEach((face, i) => log('data', 'results', { face: i, model: obj.model, image: obj.image, age: face.age, gender: face.gender, genderScore: face.genderScore, race: face.race, emotion: face.emotion }));
|
||||
}
|
||||
|
||||
async function main() {
|
||||
|
|
|
@ -307,7 +307,7 @@ Possible events:</p>
|
|||
</div></li></ul></div>
|
||||
<h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">Promise</span><span class="tsd-signature-symbol"><</span><a href="../interfaces/Result.html" class="tsd-signature-type" data-tsd-kind="Interface">Result</a><span class="tsd-signature-symbol">></span></h4><aside class="tsd-sources">
|
||||
<ul>
|
||||
<li>Defined in <a href="https://github.com/vladmandic/human/blob/main/src/human.ts#L380">src/human.ts:380</a></li></ul></aside></li></ul></section>
|
||||
<li>Defined in <a href="https://github.com/vladmandic/human/blob/main/src/human.ts#L379">src/human.ts:379</a></li></ul></aside></li></ul></section>
|
||||
<section class="tsd-panel tsd-member tsd-kind-method tsd-parent-kind-class"><a id="emit" class="tsd-anchor"></a>
|
||||
<h3 class="tsd-anchor-link"><span>emit</span><a href="#emit" aria-label="Permalink" class="tsd-anchor-icon"><svg class="icon icon-tabler icon-tabler-link" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><use href="#icon-anchor-a"></use><use href="#icon-anchor-b"></use><use href="#icon-anchor-c"></use></svg></a></h3>
|
||||
<ul class="tsd-signatures tsd-kind-method tsd-parent-kind-class">
|
||||
|
@ -322,7 +322,7 @@ Possible events:</p>
|
|||
<h5>event: <span class="tsd-signature-type">string</span></h5></li></ul></div>
|
||||
<h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">void</span></h4><aside class="tsd-sources">
|
||||
<ul>
|
||||
<li>Defined in <a href="https://github.com/vladmandic/human/blob/main/src/human.ts#L316">src/human.ts:316</a></li></ul></aside></li></ul></section>
|
||||
<li>Defined in <a href="https://github.com/vladmandic/human/blob/main/src/human.ts#L315">src/human.ts:315</a></li></ul></aside></li></ul></section>
|
||||
<section class="tsd-panel tsd-member tsd-kind-method tsd-parent-kind-class"><a id="image" class="tsd-anchor"></a>
|
||||
<h3 class="tsd-anchor-link"><span>image</span><a href="#image" aria-label="Permalink" class="tsd-anchor-icon"><svg class="icon icon-tabler icon-tabler-link" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><use href="#icon-anchor-a"></use><use href="#icon-anchor-b"></use><use href="#icon-anchor-c"></use></svg></a></h3>
|
||||
<ul class="tsd-signatures tsd-kind-method tsd-parent-kind-class">
|
||||
|
@ -399,7 +399,7 @@ Interpolation is based on time since last known result so can be called independ
|
|||
</div></li></ul></div>
|
||||
<h4 class="tsd-returns-title">Returns <a href="../interfaces/Result.html" class="tsd-signature-type" data-tsd-kind="Interface">Result</a></h4><aside class="tsd-sources">
|
||||
<ul>
|
||||
<li>Defined in <a href="https://github.com/vladmandic/human/blob/main/src/human.ts#L326">src/human.ts:326</a></li></ul></aside></li></ul></section>
|
||||
<li>Defined in <a href="https://github.com/vladmandic/human/blob/main/src/human.ts#L325">src/human.ts:325</a></li></ul></aside></li></ul></section>
|
||||
<section class="tsd-panel tsd-member tsd-kind-method tsd-parent-kind-class"><a id="now" class="tsd-anchor"></a>
|
||||
<h3 class="tsd-anchor-link"><span>now</span><a href="#now" aria-label="Permalink" class="tsd-anchor-icon"><svg class="icon icon-tabler icon-tabler-link" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><use href="#icon-anchor-a"></use><use href="#icon-anchor-b"></use><use href="#icon-anchor-c"></use></svg></a></h3>
|
||||
<ul class="tsd-signatures tsd-kind-method tsd-parent-kind-class">
|
||||
|
@ -430,7 +430,7 @@ Interpolation is based on time since last known result so can be called independ
|
|||
<h5><code class="tsd-tag ts-flagOptional">Optional</code> userConfig: <span class="tsd-signature-type">Partial</span><span class="tsd-signature-symbol"><</span><a href="../interfaces/Config.html" class="tsd-signature-type" data-tsd-kind="Interface">Config</a><span class="tsd-signature-symbol">></span></h5></li></ul></div>
|
||||
<h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">Promise</span><span class="tsd-signature-symbol"><</span><span class="tsd-signature-symbol">{ </span><br/><span> </span>kernel<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">string</span><span class="tsd-signature-symbol">; </span><br/><span> </span>perc<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">number</span><span class="tsd-signature-symbol">; </span><br/><span> </span>time<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">number</span><span class="tsd-signature-symbol">; </span><br/><span class="tsd-signature-symbol">}</span><span class="tsd-signature-symbol">[]</span><span class="tsd-signature-symbol">></span></h4><aside class="tsd-sources">
|
||||
<ul>
|
||||
<li>Defined in <a href="https://github.com/vladmandic/human/blob/main/src/human.ts#L348">src/human.ts:348</a></li></ul></aside></li></ul></section>
|
||||
<li>Defined in <a href="https://github.com/vladmandic/human/blob/main/src/human.ts#L347">src/human.ts:347</a></li></ul></aside></li></ul></section>
|
||||
<section class="tsd-panel tsd-member tsd-kind-method tsd-parent-kind-class"><a id="reset" class="tsd-anchor"></a>
|
||||
<h3 class="tsd-anchor-link"><span>reset</span><a href="#reset" aria-label="Permalink" class="tsd-anchor-icon"><svg class="icon icon-tabler icon-tabler-link" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><use href="#icon-anchor-a"></use><use href="#icon-anchor-b"></use><use href="#icon-anchor-c"></use></svg></a></h3>
|
||||
<ul class="tsd-signatures tsd-kind-method tsd-parent-kind-class">
|
||||
|
@ -478,7 +478,7 @@ Returns tensor which contains image data in RGBA format</p>
|
|||
</div></li></ul></div>
|
||||
<h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">Promise</span><span class="tsd-signature-symbol"><</span><span class="tsd-signature-type">void</span><span class="tsd-signature-symbol">></span></h4><aside class="tsd-sources">
|
||||
<ul>
|
||||
<li>Defined in <a href="https://github.com/vladmandic/human/blob/main/src/human.ts#L544">src/human.ts:544</a></li></ul></aside></li></ul></section>
|
||||
<li>Defined in <a href="https://github.com/vladmandic/human/blob/main/src/human.ts#L543">src/human.ts:543</a></li></ul></aside></li></ul></section>
|
||||
<section class="tsd-panel tsd-member tsd-kind-method tsd-parent-kind-class"><a id="validate" class="tsd-anchor"></a>
|
||||
<h3 class="tsd-anchor-link"><span>validate</span><a href="#validate" aria-label="Permalink" class="tsd-anchor-icon"><svg class="icon icon-tabler icon-tabler-link" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><use href="#icon-anchor-a"></use><use href="#icon-anchor-b"></use><use href="#icon-anchor-c"></use></svg></a></h3>
|
||||
<ul class="tsd-signatures tsd-kind-method tsd-parent-kind-class">
|
||||
|
@ -518,7 +518,7 @@ Returns tensor which contains image data in RGBA format</p>
|
|||
</div></li></ul></div>
|
||||
<h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">Promise</span><span class="tsd-signature-symbol"><</span><span class="tsd-signature-type">void</span><span class="tsd-signature-symbol">></span></h4><aside class="tsd-sources">
|
||||
<ul>
|
||||
<li>Defined in <a href="https://github.com/vladmandic/human/blob/main/src/human.ts#L555">src/human.ts:555</a></li></ul></aside></li></ul></section>
|
||||
<li>Defined in <a href="https://github.com/vladmandic/human/blob/main/src/human.ts#L554">src/human.ts:554</a></li></ul></aside></li></ul></section>
|
||||
<section class="tsd-panel tsd-member tsd-kind-method tsd-parent-kind-class"><a id="warmup" class="tsd-anchor"></a>
|
||||
<h3 class="tsd-anchor-link"><span>warmup</span><a href="#warmup" aria-label="Permalink" class="tsd-anchor-icon"><svg class="icon icon-tabler icon-tabler-link" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><use href="#icon-anchor-a"></use><use href="#icon-anchor-b"></use><use href="#icon-anchor-c"></use></svg></a></h3>
|
||||
<ul class="tsd-signatures tsd-kind-method tsd-parent-kind-class">
|
||||
|
@ -541,7 +541,7 @@ Returns tensor which contains image data in RGBA format</p>
|
|||
</div></li></ul></div>
|
||||
<h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">Promise</span><span class="tsd-signature-symbol"><</span><span class="tsd-signature-type">undefined</span><span class="tsd-signature-symbol"> | </span><a href="../interfaces/Result.html" class="tsd-signature-type" data-tsd-kind="Interface">Result</a><span class="tsd-signature-symbol">></span></h4><aside class="tsd-sources">
|
||||
<ul>
|
||||
<li>Defined in <a href="https://github.com/vladmandic/human/blob/main/src/human.ts#L336">src/human.ts:336</a></li></ul></aside></li></ul></section></section></div>
|
||||
<li>Defined in <a href="https://github.com/vladmandic/human/blob/main/src/human.ts#L335">src/human.ts:335</a></li></ul></aside></li></ul></section></section></div>
|
||||
<div class="col-4 col-menu menu-sticky-wrap menu-highlight">
|
||||
<div class="tsd-navigation settings">
|
||||
<details class="tsd-index-accordion"><summary class="tsd-accordion-summary">
|
||||
|
|
Loading…
Reference in New Issue