add public face detector and iris scale options and refresh dependencies

main 3.2.1
Vladimir Mandic 2024-02-15 12:52:31 -05:00
parent 15a6de03de
commit 62396317f5
118 changed files with 21111 additions and 19958 deletions

View File

@ -1,6 +1,6 @@
# @vladmandic/human # @vladmandic/human
Version: **3.2.0** Version: **3.2.1**
Description: **Human: AI-powered 3D Face Detection & Rotation Tracking, Face Description & Recognition, Body Pose Tracking, 3D Hand & Finger Tracking, Iris Analysis, Age & Gender & Emotion Prediction, Gesture Recognition** Description: **Human: AI-powered 3D Face Detection & Rotation Tracking, Face Description & Recognition, Body Pose Tracking, 3D Hand & Finger Tracking, Iris Analysis, Age & Gender & Emotion Prediction, Gesture Recognition**
Author: **Vladimir Mandic <mandic00@live.com>** Author: **Vladimir Mandic <mandic00@live.com>**
@ -9,11 +9,15 @@
## Changelog ## Changelog
### **3.2.1** 2024/02/15 mandic00@live.com
### **origin/main** 2023/12/06 mandic00@live.com
### **3.2.0** 2023/12/06 mandic00@live.com ### **3.2.0** 2023/12/06 mandic00@live.com
- set browser false when navigator object is empty
### **origin/main** 2023/12/06 aug@iterative.day
- https://github.com/vladmandic/human/issues/402 - https://github.com/vladmandic/human/issues/402
### **release: 3.1.2** 2023/09/18 mandic00@live.com ### **release: 3.1.2** 2023/09/18 mandic00@live.com

File diff suppressed because one or more lines are too long

34847
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

1444
dist/human.js vendored

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

10
dist/human.node.js vendored

File diff suppressed because one or more lines are too long

2178
dist/tfjs.esm.js vendored

File diff suppressed because one or more lines are too long

View File

@ -4,4 +4,4 @@
author: <https://github.com/vladmandic>' author: <https://github.com/vladmandic>'
*/ */
var e="4.14.0";var s="4.14.0";var t="4.14.0";var n="4.14.0";var r="4.14.0";var i="4.14.0";var h={tfjs:e,"tfjs-core":e,"tfjs-converter":s,"tfjs-backend-cpu":t,"tfjs-backend-webgl":n,"tfjs-backend-wasm":r,"tfjs-backend-webgpu":i};export{h as version}; var e="4.17.0";var s="4.17.0";var t="4.17.0";var n="4.17.0";var r="4.17.0";var i="4.14.0";var h={tfjs:e,"tfjs-core":e,"tfjs-converter":s,"tfjs-backend-cpu":t,"tfjs-backend-webgl":n,"tfjs-backend-wasm":r,"tfjs-backend-webgpu":i};export{h as version};

View File

@ -37,6 +37,8 @@ export interface FaceDetectorConfig extends GenericConfig {
minSize: number, minSize: number,
/** minimum overlap between two detected faces before one is discarded */ /** minimum overlap between two detected faces before one is discarded */
iouThreshold: number, iouThreshold: number,
/** how much should face box be enlarged over the min/max facial coordinates */
scale: number,
/** should child models perform on masked image of a face */ /** should child models perform on masked image of a face */
mask: boolean, mask: boolean,
/** should face detection return processed and cropped face tensor that can with an external model for addtional processing? /** should face detection return processed and cropped face tensor that can with an external model for addtional processing?
@ -51,7 +53,10 @@ export interface FaceMeshConfig extends GenericConfig {
} }
/** Iris part of face configuration */ /** Iris part of face configuration */
export interface FaceIrisConfig extends GenericConfig {} export interface FaceIrisConfig extends GenericConfig {
/** how much should iris box be enlarged over the min/max iris coordinates */
scale: number,
}
/** Attention part of face configuration */ /** Attention part of face configuration */
export interface FaceAttentionConfig extends GenericConfig {} export interface FaceAttentionConfig extends GenericConfig {}
@ -383,6 +388,7 @@ const config: Config = {
minConfidence: 0.2, minConfidence: 0.2,
minSize: 0, minSize: 0,
iouThreshold: 0.1, iouThreshold: 0.1,
scale: 1.4,
mask: false, mask: false,
return: false, return: false,
}, },
@ -397,6 +403,7 @@ const config: Config = {
}, },
iris: { iris: {
enabled: true, enabled: true,
scale: 2.3,
modelPath: 'iris.json', modelPath: 'iris.json',
}, },
emotion: { emotion: {

View File

@ -14,7 +14,6 @@ import { env } from '../util/env';
import type { Point } from '../result'; import type { Point } from '../result';
const keypointsCount = 6; const keypointsCount = 6;
const faceBoxScaleFactor = 1.4;
let model: GraphModel | null; let model: GraphModel | null;
let anchors: Tensor | null = null; let anchors: Tensor | null = null;
let inputSize = 0; let inputSize = 0;
@ -99,7 +98,7 @@ export async function getBoxes(inputImage: Tensor4D, config: Config): Promise<De
b.anchor = tf.slice(anchors as Tensor, [nms[i], 0], [1, 2]); b.anchor = tf.slice(anchors as Tensor, [nms[i], 0], [1, 2]);
const anchor = await b.anchor.data(); const anchor = await b.anchor.data();
const scaledBox = util.scaleBoxCoordinates(rawBox, [(inputImage.shape[2] || 0) / inputSize, (inputImage.shape[1] || 0) / inputSize], anchor); const scaledBox = util.scaleBoxCoordinates(rawBox, [(inputImage.shape[2] || 0) / inputSize, (inputImage.shape[1] || 0) / inputSize], anchor);
const enlargedBox = util.enlargeBox(scaledBox, config.face['scale'] || faceBoxScaleFactor); const enlargedBox = util.enlargeBox(scaledBox, config.face.detector?.scale || 1.4);
const squaredBox = util.squarifyBox(enlargedBox); const squaredBox = util.squarifyBox(enlargedBox);
if (squaredBox.size[0] > (config.face.detector?.['minSize'] || 0) && squaredBox.size[1] > (config.face.detector?.['minSize'] || 0)) boxes.push(squaredBox); if (squaredBox.size[0] > (config.face.detector?.['minSize'] || 0) && squaredBox.size[1] > (config.face.detector?.['minSize'] || 0)) boxes.push(squaredBox);
Object.keys(b).forEach((tensor) => tf.dispose(b[tensor])); Object.keys(b).forEach((tensor) => tf.dispose(b[tensor]));

View File

@ -9,13 +9,11 @@ import type { Config } from '../config';
type Box = [number, number, number, number]; type Box = [number, number, number, number];
export class FaceBoxes { export class FaceBoxes {
enlarge: number;
model: GraphModel; model: GraphModel;
config: Config; config: Config;
inputSize: 0; inputSize: 0;
constructor(model, config: Config) { constructor(model, config: Config) {
this.enlarge = 1.1;
this.model = model; this.model = model;
this.config = config; this.config = config;
this.inputSize = model.inputs[0].shape ? model.inputs[0].shape[2] : 0; this.inputSize = model.inputs[0].shape ? model.inputs[0].shape[2] : 0;
@ -23,6 +21,7 @@ export class FaceBoxes {
async estimateFaces(input, config) { async estimateFaces(input, config) {
if (config) this.config = config; if (config) this.config = config;
const enlarge = this.config.face.detector?.minConfidence || 0.1;
const results: { confidence: number, box: Box, boxRaw: Box, image: Tensor }[] = []; const results: { confidence: number, box: Box, boxRaw: Box, image: Tensor }[] = [];
const resizeT = tf.image.resizeBilinear(input, [this.inputSize, this.inputSize]); const resizeT = tf.image.resizeBilinear(input, [this.inputSize, this.inputSize]);
const castT = resizeT.toInt(); const castT = resizeT.toInt();
@ -38,7 +37,7 @@ export class FaceBoxes {
resizeT.dispose(); resizeT.dispose();
for (let i = 0; i < boxes.length; i++) { for (let i = 0; i < boxes.length; i++) {
if (scores[i] && scores[i] > (this.config.face.detector?.minConfidence || 0.1)) { if (scores[i] && scores[i] > (this.config.face.detector?.minConfidence || 0.1)) {
const crop = [boxes[i][0] / this.enlarge, boxes[i][1] / this.enlarge, boxes[i][2] * this.enlarge, boxes[i][3] * this.enlarge]; const crop = [boxes[i][0] / enlarge, boxes[i][1] / enlarge, boxes[i][2] * enlarge, boxes[i][3] * enlarge];
const boxRaw: Box = [crop[1], crop[0], (crop[3]) - (crop[1]), (crop[2]) - (crop[0])]; const boxRaw: Box = [crop[1], crop[0], (crop[3]) - (crop[1]), (crop[2]) - (crop[0])];
const box: Box = [ const box: Box = [
parseInt((boxRaw[0] * input.shape[2]).toString()), parseInt((boxRaw[0] * input.shape[2]).toString()),

View File

@ -114,7 +114,7 @@ export async function predict(input: Tensor4D, config: Config): Promise<FaceResu
if (config.face.attention?.enabled) { if (config.face.attention?.enabled) {
rawCoords = await attention.augment(rawCoords, results); // augment iris results using attention model results rawCoords = await attention.augment(rawCoords, results); // augment iris results using attention model results
} else if (config.face.iris?.enabled) { } else if (config.face.iris?.enabled) {
rawCoords = await iris.augmentIris(rawCoords, face.tensor, inputSize); // run iris model and augment results rawCoords = await iris.augmentIris(rawCoords, face.tensor, inputSize, config); // run iris model and augment results
} }
face.mesh = util.transformRawCoords(rawCoords, box, angle, rotationMatrix, inputSize); // get processed mesh face.mesh = util.transformRawCoords(rawCoords, box, angle, rotationMatrix, inputSize); // get processed mesh
face.meshRaw = face.mesh.map((pt) => [pt[0] / (input.shape[2] || 0), pt[1] / (input.shape[1] || 0), (pt[2] || 0) / size]); face.meshRaw = face.mesh.map((pt) => [pt[0] / (input.shape[2] || 0), pt[1] / (input.shape[1] || 0), (pt[2] || 0) / size]);

View File

@ -11,8 +11,6 @@ import type { Point } from '../result';
let model: GraphModel | null; let model: GraphModel | null;
let inputSize = 0; let inputSize = 0;
const irisEnlarge = 2.3;
const leftOutline = coords.meshAnnotations.leftEyeLower0; const leftOutline = coords.meshAnnotations.leftEyeLower0;
const rightOutline = coords.meshAnnotations.rightEyeLower0; const rightOutline = coords.meshAnnotations.rightEyeLower0;
@ -62,8 +60,8 @@ export const getLeftToRightEyeDepthDifference = (rawCoords) => {
}; };
// Returns a box describing a cropped region around the eye fit for passing to the iris model. // Returns a box describing a cropped region around the eye fit for passing to the iris model.
export const getEyeBox = (rawCoords, face, eyeInnerCornerIndex, eyeOuterCornerIndex, meshSize, flip = false) => { export const getEyeBox = (rawCoords, face, eyeInnerCornerIndex, eyeOuterCornerIndex, meshSize, flip = false, scale = 2.3) => {
const box = util.squarifyBox(util.enlargeBox(util.calculateLandmarksBoundingBox([rawCoords[eyeInnerCornerIndex], rawCoords[eyeOuterCornerIndex]]), irisEnlarge)); const box = util.squarifyBox(util.enlargeBox(util.calculateLandmarksBoundingBox([rawCoords[eyeInnerCornerIndex], rawCoords[eyeOuterCornerIndex]]), scale));
const boxSize = util.getBoxSize(box); const boxSize = util.getBoxSize(box);
let crop = tf.image.cropAndResize(face, [[ let crop = tf.image.cropAndResize(face, [[
box.startPoint[1] / meshSize, box.startPoint[1] / meshSize,
@ -110,10 +108,10 @@ export const getAdjustedIrisCoords = (rawCoords, irisCoords, direction) => {
}); });
}; };
export async function augmentIris(rawCoords, face, meshSize) { export async function augmentIris(rawCoords, face, meshSize, config: Config) {
if (!model?.['executor']) return rawCoords; if (!model?.['executor']) return rawCoords;
const { box: leftEyeBox, boxSize: leftEyeBoxSize, crop: leftEyeCrop } = getEyeBox(rawCoords, face, eyeLandmarks.leftBounds[0], eyeLandmarks.leftBounds[1], meshSize, true); const { box: leftEyeBox, boxSize: leftEyeBoxSize, crop: leftEyeCrop } = getEyeBox(rawCoords, face, eyeLandmarks.leftBounds[0], eyeLandmarks.leftBounds[1], meshSize, true, config.face.iris?.scale || 2.3);
const { box: rightEyeBox, boxSize: rightEyeBoxSize, crop: rightEyeCrop } = getEyeBox(rawCoords, face, eyeLandmarks.rightBounds[0], eyeLandmarks.rightBounds[1], meshSize, true); const { box: rightEyeBox, boxSize: rightEyeBoxSize, crop: rightEyeCrop } = getEyeBox(rawCoords, face, eyeLandmarks.rightBounds[0], eyeLandmarks.rightBounds[1], meshSize, true, config.face.iris?.scale || 2.3);
const combined = tf.concat([leftEyeCrop, rightEyeCrop]); const combined = tf.concat([leftEyeCrop, rightEyeCrop]);
tf.dispose(leftEyeCrop); tf.dispose(leftEyeCrop);
tf.dispose(rightEyeCrop); tf.dispose(rightEyeCrop);

View File

@ -1,51 +1,51 @@
2023-12-06 14:57:40 DATA:  Build {"name":"@vladmandic/human","version":"3.2.0"} 2024-02-15 12:49:25 DATA:  Build {"name":"@vladmandic/human","version":"3.2.1"}
2023-12-06 14:57:40 INFO:  Application: {"name":"@vladmandic/human","version":"3.2.0"} 2024-02-15 12:49:25 INFO:  Application: {"name":"@vladmandic/human","version":"3.2.1"}
2023-12-06 14:57:40 INFO:  Environment: {"profile":"production","config":".build.json","package":"package.json","tsconfig":true,"eslintrc":true,"git":true} 2024-02-15 12:49:25 INFO:  Environment: {"profile":"production","config":".build.json","package":"package.json","tsconfig":true,"eslintrc":true,"git":true}
2023-12-06 14:57:40 INFO:  Toolchain: {"build":"0.9.2","esbuild":"0.19.8","typescript":"5.3.3","typedoc":"0.25.4","eslint":"8.55.0"} 2024-02-15 12:49:25 INFO:  Toolchain: {"build":"0.9.2","esbuild":"0.19.12","typescript":"5.3.3","typedoc":"0.25.4","eslint":"8.55.0"}
2023-12-06 14:57:40 INFO:  Build: {"profile":"production","steps":["clean","compile","typings","typedoc","lint","changelog"]} 2024-02-15 12:49:25 INFO:  Build: {"profile":"production","steps":["clean","compile","typings","typedoc","lint","changelog"]}
2023-12-06 14:57:40 STATE: Clean: {"locations":["dist/*","types/*","typedoc/*"]} 2024-02-15 12:49:25 STATE: Clean: {"locations":["dist/*","types/*","typedoc/*"]}
2023-12-06 14:57:40 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":358} 2024-02-15 12:49: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":358}
2023-12-06 14:57:40 STATE: Compile: {"name":"tfjs/nodejs/cpu","format":"cjs","platform":"node","input":"tfjs/tf-node.ts","output":"dist/tfjs.esm.js","files":2,"inputBytes":566,"outputBytes":957} 2024-02-15 12:49:25 STATE: Compile: {"name":"tfjs/nodejs/cpu","format":"cjs","platform":"node","input":"tfjs/tf-node.ts","output":"dist/tfjs.esm.js","files":2,"inputBytes":566,"outputBytes":957}
2023-12-06 14:57:40 STATE: Compile: {"name":"human/nodejs/cpu","format":"cjs","platform":"node","input":"src/human.ts","output":"dist/human.node.js","files":80,"inputBytes":676002,"outputBytes":320790} 2024-02-15 12:49:25 STATE: Compile: {"name":"human/nodejs/cpu","format":"cjs","platform":"node","input":"src/human.ts","output":"dist/human.node.js","files":80,"inputBytes":676266,"outputBytes":320934}
2023-12-06 14:57:40 STATE: Compile: {"name":"tfjs/nodejs/gpu","format":"cjs","platform":"node","input":"tfjs/tf-node-gpu.ts","output":"dist/tfjs.esm.js","files":2,"inputBytes":574,"outputBytes":965} 2024-02-15 12:49: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":574,"outputBytes":965}
2023-12-06 14:57:40 STATE: Compile: {"name":"human/nodejs/gpu","format":"cjs","platform":"node","input":"src/human.ts","output":"dist/human.node-gpu.js","files":80,"inputBytes":676010,"outputBytes":320794} 2024-02-15 12:49:25 STATE: Compile: {"name":"human/nodejs/gpu","format":"cjs","platform":"node","input":"src/human.ts","output":"dist/human.node-gpu.js","files":80,"inputBytes":676274,"outputBytes":320938}
2023-12-06 14:57:40 STATE: Compile: {"name":"tfjs/nodejs/wasm","format":"cjs","platform":"node","input":"tfjs/tf-node-wasm.ts","output":"dist/tfjs.esm.js","files":2,"inputBytes":662,"outputBytes":2003} 2024-02-15 12:49: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":662,"outputBytes":2003}
2023-12-06 14:57:40 STATE: Compile: {"name":"human/nodejs/wasm","format":"cjs","platform":"node","input":"src/human.ts","output":"dist/human.node-wasm.js","files":80,"inputBytes":677048,"outputBytes":320905} 2024-02-15 12:49:25 STATE: Compile: {"name":"human/nodejs/wasm","format":"cjs","platform":"node","input":"src/human.ts","output":"dist/human.node-wasm.js","files":80,"inputBytes":677312,"outputBytes":321049}
2023-12-06 14:57:40 STATE: Compile: {"name":"tfjs/browser/esm/nobundle","format":"esm","platform":"browser","input":"tfjs/tf-browser.ts","output":"dist/tfjs.esm.js","files":2,"inputBytes":1403,"outputBytes":690} 2024-02-15 12:49: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":1403,"outputBytes":690}
2023-12-06 14:57:40 STATE: Compile: {"name":"human/browser/esm/nobundle","format":"esm","platform":"browser","input":"src/human.ts","output":"dist/human.esm-nobundle.js","files":80,"inputBytes":675735,"outputBytes":319371} 2024-02-15 12:49: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":675999,"outputBytes":319515}
2023-12-06 14:57:40 STATE: Compile: {"name":"tfjs/browser/esm/bundle","format":"esm","platform":"browser","input":"tfjs/tf-browser.ts","output":"dist/tfjs.esm.js","files":10,"inputBytes":1403,"outputBytes":1265002} 2024-02-15 12:49:25 STATE: Compile: {"name":"tfjs/browser/esm/bundle","format":"esm","platform":"browser","input":"tfjs/tf-browser.ts","output":"dist/tfjs.esm.js","files":10,"inputBytes":1403,"outputBytes":1294474}
2023-12-06 14:57:40 STATE: Compile: {"name":"human/browser/iife/bundle","format":"iife","platform":"browser","input":"src/human.ts","output":"dist/human.js","files":80,"inputBytes":1940047,"outputBytes":1580115} 2024-02-15 12:49:25 STATE: Compile: {"name":"human/browser/iife/bundle","format":"iife","platform":"browser","input":"src/human.ts","output":"dist/human.js","files":80,"inputBytes":1969783,"outputBytes":1609692}
2023-12-06 14:57:40 STATE: Compile: {"name":"human/browser/esm/bundle","format":"esm","platform":"browser","input":"src/human.ts","output":"dist/human.esm.js","files":80,"inputBytes":1940047,"outputBytes":2069972} 2024-02-15 12:49:25 STATE: Compile: {"name":"human/browser/esm/bundle","format":"esm","platform":"browser","input":"src/human.ts","output":"dist/human.esm.js","files":80,"inputBytes":1969783,"outputBytes":2120081}
2023-12-06 14:57:42 STATE: Typings: {"input":"src/human.ts","output":"types/lib","files":14} 2024-02-15 12:49:26 STATE: Typings: {"input":"src/human.ts","output":"types/lib","files":14}
2023-12-06 14:57:44 STATE: TypeDoc: {"input":"src/human.ts","output":"typedoc","objects":81,"generated":true} 2024-02-15 12:49:28 STATE: TypeDoc: {"input":"src/human.ts","output":"typedoc","objects":81,"generated":true}
2023-12-06 14:57:44 STATE: Compile: {"name":"demo/typescript","format":"esm","platform":"browser","input":"demo/typescript/index.ts","output":"demo/typescript/index.js","files":1,"inputBytes":6318,"outputBytes":2970} 2024-02-15 12:49:28 STATE: Compile: {"name":"demo/typescript","format":"esm","platform":"browser","input":"demo/typescript/index.ts","output":"demo/typescript/index.js","files":1,"inputBytes":6318,"outputBytes":2970}
2023-12-06 14:57:44 STATE: Compile: {"name":"demo/faceid","format":"esm","platform":"browser","input":"demo/faceid/index.ts","output":"demo/faceid/index.js","files":2,"inputBytes":17499,"outputBytes":9399} 2024-02-15 12:49:28 STATE: Compile: {"name":"demo/faceid","format":"esm","platform":"browser","input":"demo/faceid/index.ts","output":"demo/faceid/index.js","files":2,"inputBytes":17499,"outputBytes":9399}
2023-12-06 14:57:44 STATE: Compile: {"name":"demo/tracker","format":"esm","platform":"browser","input":"demo/tracker/index.ts","output":"demo/tracker/index.js","files":2,"inputBytes":54375,"outputBytes":22791} 2024-02-15 12:49:28 STATE: Compile: {"name":"demo/tracker","format":"esm","platform":"browser","input":"demo/tracker/index.ts","output":"demo/tracker/index.js","files":2,"inputBytes":54375,"outputBytes":22791}
2023-12-06 14:57:51 STATE: Lint: {"locations":["**/*.json","src/**/*.ts","test/**/*.js","demo/**/*.js","**/*.md"],"files":172,"errors":0,"warnings":0} 2024-02-15 12:49:35 STATE: Lint: {"locations":["**/*.json","src/**/*.ts","test/**/*.js","demo/**/*.js","**/*.md"],"files":172,"errors":0,"warnings":0}
2023-12-06 14:57:51 STATE: ChangeLog: {"repository":"https://github.com/vladmandic/human","branch":"main","output":"CHANGELOG.md"} 2024-02-15 12:49:35 STATE: ChangeLog: {"repository":"https://github.com/vladmandic/human","branch":"main","output":"CHANGELOG.md"}
2023-12-06 14:57:51 STATE: Copy: {"input":"node_modules/@vladmandic/tfjs/types/tfjs-core.d.ts","output":"types/tfjs-core.d.ts"} 2024-02-15 12:49:35 STATE: Copy: {"input":"node_modules/@vladmandic/tfjs/types/tfjs-core.d.ts","output":"types/tfjs-core.d.ts"}
2023-12-06 14:57:51 INFO:  Done... 2024-02-15 12:49:35 INFO:  Done...
2023-12-06 14:57:51 STATE: Copy: {"input":"node_modules/@vladmandic/tfjs/types/tfjs.d.ts","output":"types/tfjs.esm.d.ts"} 2024-02-15 12:49:35 STATE: Copy: {"input":"node_modules/@vladmandic/tfjs/types/tfjs.d.ts","output":"types/tfjs.esm.d.ts"}
2023-12-06 14:57:51 STATE: Copy: {"input":"src/types/tsconfig.json","output":"types/tsconfig.json"} 2024-02-15 12:49:35 STATE: Copy: {"input":"src/types/tsconfig.json","output":"types/tsconfig.json"}
2023-12-06 14:57:51 STATE: Copy: {"input":"src/types/eslint.json","output":"types/.eslintrc.json"} 2024-02-15 12:49:35 STATE: Copy: {"input":"src/types/eslint.json","output":"types/.eslintrc.json"}
2023-12-06 14:57:51 STATE: Copy: {"input":"src/types/tfjs.esm.d.ts","output":"dist/tfjs.esm.d.ts"} 2024-02-15 12:49:35 STATE: Copy: {"input":"src/types/tfjs.esm.d.ts","output":"dist/tfjs.esm.d.ts"}
2023-12-06 14:57:51 STATE: Filter: {"input":"types/tfjs-core.d.ts"} 2024-02-15 12:49:35 STATE: Filter: {"input":"types/tfjs-core.d.ts"}
2023-12-06 14:57:52 ERROR: API-Extractor: {} 2024-02-15 12:49:36 ERROR: API-Extractor: {}
2023-12-06 14:57:52 STATE: Filter: {"input":"types/human.d.ts"} 2024-02-15 12:49:36 STATE: Filter: {"input":"types/human.d.ts"}
2023-12-06 14:57:52 STATE: Write: {"output":"dist/human.esm-nobundle.d.ts"} 2024-02-15 12:49:36 STATE: Write: {"output":"dist/human.esm-nobundle.d.ts"}
2023-12-06 14:57:52 STATE: Write: {"output":"dist/human.esm.d.ts"} 2024-02-15 12:49:36 STATE: Write: {"output":"dist/human.esm.d.ts"}
2023-12-06 14:57:52 STATE: Write: {"output":"dist/human.d.ts"} 2024-02-15 12:49:36 STATE: Write: {"output":"dist/human.d.ts"}
2023-12-06 14:57:52 STATE: Write: {"output":"dist/human.node-gpu.d.ts"} 2024-02-15 12:49:36 STATE: Write: {"output":"dist/human.node-gpu.d.ts"}
2023-12-06 14:57:52 STATE: Write: {"output":"dist/human.node.d.ts"} 2024-02-15 12:49:36 STATE: Write: {"output":"dist/human.node.d.ts"}
2023-12-06 14:57:52 STATE: Write: {"output":"dist/human.node-wasm.d.ts"} 2024-02-15 12:49:36 STATE: Write: {"output":"dist/human.node-wasm.d.ts"}
2023-12-06 14:57:52 INFO:  Analyze models: {"folders":8,"result":"models/models.json"} 2024-02-15 12:49:36 INFO:  Analyze models: {"folders":8,"result":"models/models.json"}
2023-12-06 14:57:52 STATE: Models {"folder":"./models","models":12} 2024-02-15 12:49:36 STATE: Models {"folder":"./models","models":12}
2023-12-06 14:57:52 STATE: Models {"folder":"../human-models/models","models":44} 2024-02-15 12:49:36 STATE: Models {"folder":"../human-models/models","models":44}
2023-12-06 14:57:52 STATE: Models {"folder":"../blazepose/model/","models":4} 2024-02-15 12:49:36 STATE: Models {"folder":"../blazepose/model/","models":4}
2023-12-06 14:57:52 STATE: Models {"folder":"../anti-spoofing/model","models":1} 2024-02-15 12:49:36 STATE: Models {"folder":"../anti-spoofing/model","models":1}
2023-12-06 14:57:52 STATE: Models {"folder":"../efficientpose/models","models":3} 2024-02-15 12:49:36 STATE: Models {"folder":"../efficientpose/models","models":3}
2023-12-06 14:57:52 STATE: Models {"folder":"../insightface/models","models":5} 2024-02-15 12:49:36 STATE: Models {"folder":"../insightface/models","models":5}
2023-12-06 14:57:52 STATE: Models {"folder":"../movenet/models","models":3} 2024-02-15 12:49:36 STATE: Models {"folder":"../movenet/models","models":3}
2023-12-06 14:57:52 STATE: Models {"folder":"../nanodet/models","models":4} 2024-02-15 12:49:36 STATE: Models {"folder":"../nanodet/models","models":4}
2023-12-06 14:57:52 STATE: Models: {"count":58,"totalSize":380063249} 2024-02-15 12:49:36 STATE: Models: {"count":58,"totalSize":380063249}
2023-12-06 14:57:52 INFO:  Human Build complete... {"logFile":"test/build.log"} 2024-02-15 12:49:36 INFO:  Human Build complete... {"logFile":"test/build.log"}

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

File diff suppressed because one or more lines are too long

Some files were not shown because too many files have changed in this diff Show More