mirror of https://github.com/vladmandic/human
parent
15a6de03de
commit
62396317f5
12
CHANGELOG.md
12
CHANGELOG.md
|
@ -1,6 +1,6 @@
|
|||
# @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**
|
||||
|
||||
Author: **Vladimir Mandic <mandic00@live.com>**
|
||||
|
@ -9,11 +9,15 @@
|
|||
|
||||
## 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
|
||||
|
||||
|
||||
### **origin/main** 2023/12/06 aug@iterative.day
|
||||
|
||||
- set browser false when navigator object is empty
|
||||
- https://github.com/vladmandic/human/issues/402
|
||||
|
||||
### **release: 3.1.2** 2023/09/18 mandic00@live.com
|
||||
|
|
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
|
@ -4,4 +4,4 @@
|
|||
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};
|
||||
|
|
|
@ -37,6 +37,8 @@ export interface FaceDetectorConfig extends GenericConfig {
|
|||
minSize: number,
|
||||
/** minimum overlap between two detected faces before one is discarded */
|
||||
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 */
|
||||
mask: boolean,
|
||||
/** 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 */
|
||||
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 */
|
||||
export interface FaceAttentionConfig extends GenericConfig {}
|
||||
|
@ -383,6 +388,7 @@ const config: Config = {
|
|||
minConfidence: 0.2,
|
||||
minSize: 0,
|
||||
iouThreshold: 0.1,
|
||||
scale: 1.4,
|
||||
mask: false,
|
||||
return: false,
|
||||
},
|
||||
|
@ -397,6 +403,7 @@ const config: Config = {
|
|||
},
|
||||
iris: {
|
||||
enabled: true,
|
||||
scale: 2.3,
|
||||
modelPath: 'iris.json',
|
||||
},
|
||||
emotion: {
|
||||
|
|
|
@ -14,7 +14,6 @@ import { env } from '../util/env';
|
|||
import type { Point } from '../result';
|
||||
|
||||
const keypointsCount = 6;
|
||||
const faceBoxScaleFactor = 1.4;
|
||||
let model: GraphModel | null;
|
||||
let anchors: Tensor | null = null;
|
||||
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]);
|
||||
const anchor = await b.anchor.data();
|
||||
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);
|
||||
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]));
|
||||
|
|
|
@ -9,13 +9,11 @@ import type { Config } from '../config';
|
|||
type Box = [number, number, number, number];
|
||||
|
||||
export class FaceBoxes {
|
||||
enlarge: number;
|
||||
model: GraphModel;
|
||||
config: Config;
|
||||
inputSize: 0;
|
||||
|
||||
constructor(model, config: Config) {
|
||||
this.enlarge = 1.1;
|
||||
this.model = model;
|
||||
this.config = config;
|
||||
this.inputSize = model.inputs[0].shape ? model.inputs[0].shape[2] : 0;
|
||||
|
@ -23,6 +21,7 @@ export class FaceBoxes {
|
|||
|
||||
async estimateFaces(input, 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 resizeT = tf.image.resizeBilinear(input, [this.inputSize, this.inputSize]);
|
||||
const castT = resizeT.toInt();
|
||||
|
@ -38,7 +37,7 @@ export class FaceBoxes {
|
|||
resizeT.dispose();
|
||||
for (let i = 0; i < boxes.length; i++) {
|
||||
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 box: Box = [
|
||||
parseInt((boxRaw[0] * input.shape[2]).toString()),
|
||||
|
|
|
@ -114,7 +114,7 @@ export async function predict(input: Tensor4D, config: Config): Promise<FaceResu
|
|||
if (config.face.attention?.enabled) {
|
||||
rawCoords = await attention.augment(rawCoords, results); // augment iris results using attention model results
|
||||
} 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.meshRaw = face.mesh.map((pt) => [pt[0] / (input.shape[2] || 0), pt[1] / (input.shape[1] || 0), (pt[2] || 0) / size]);
|
||||
|
|
|
@ -11,8 +11,6 @@ import type { Point } from '../result';
|
|||
let model: GraphModel | null;
|
||||
let inputSize = 0;
|
||||
|
||||
const irisEnlarge = 2.3;
|
||||
|
||||
const leftOutline = coords.meshAnnotations.leftEyeLower0;
|
||||
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.
|
||||
export const getEyeBox = (rawCoords, face, eyeInnerCornerIndex, eyeOuterCornerIndex, meshSize, flip = false) => {
|
||||
const box = util.squarifyBox(util.enlargeBox(util.calculateLandmarksBoundingBox([rawCoords[eyeInnerCornerIndex], rawCoords[eyeOuterCornerIndex]]), irisEnlarge));
|
||||
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]]), scale));
|
||||
const boxSize = util.getBoxSize(box);
|
||||
let crop = tf.image.cropAndResize(face, [[
|
||||
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;
|
||||
const { box: leftEyeBox, boxSize: leftEyeBoxSize, crop: leftEyeCrop } = getEyeBox(rawCoords, face, eyeLandmarks.leftBounds[0], eyeLandmarks.leftBounds[1], meshSize, true);
|
||||
const { box: rightEyeBox, boxSize: rightEyeBoxSize, crop: rightEyeCrop } = getEyeBox(rawCoords, face, eyeLandmarks.rightBounds[0], eyeLandmarks.rightBounds[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, config.face.iris?.scale || 2.3);
|
||||
const combined = tf.concat([leftEyeCrop, rightEyeCrop]);
|
||||
tf.dispose(leftEyeCrop);
|
||||
tf.dispose(rightEyeCrop);
|
||||
|
|
102
test/build.log
102
test/build.log
|
@ -1,51 +1,51 @@
|
|||
2023-12-06 14:57:40 [32mDATA: [39m Build {"name":"@vladmandic/human","version":"3.2.0"}
|
||||
2023-12-06 14:57:40 [36mINFO: [39m Application: {"name":"@vladmandic/human","version":"3.2.0"}
|
||||
2023-12-06 14:57:40 [36mINFO: [39m Environment: {"profile":"production","config":".build.json","package":"package.json","tsconfig":true,"eslintrc":true,"git":true}
|
||||
2023-12-06 14:57:40 [36mINFO: [39m Toolchain: {"build":"0.9.2","esbuild":"0.19.8","typescript":"5.3.3","typedoc":"0.25.4","eslint":"8.55.0"}
|
||||
2023-12-06 14:57:40 [36mINFO: [39m Build: {"profile":"production","steps":["clean","compile","typings","typedoc","lint","changelog"]}
|
||||
2023-12-06 14:57:40 [35mSTATE:[39m Clean: {"locations":["dist/*","types/*","typedoc/*"]}
|
||||
2023-12-06 14:57:40 [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":358}
|
||||
2023-12-06 14:57:40 [35mSTATE:[39m 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 [35mSTATE:[39m Compile: {"name":"human/nodejs/cpu","format":"cjs","platform":"node","input":"src/human.ts","output":"dist/human.node.js","files":80,"inputBytes":676002,"outputBytes":320790}
|
||||
2023-12-06 14:57:40 [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":574,"outputBytes":965}
|
||||
2023-12-06 14:57:40 [35mSTATE:[39m 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}
|
||||
2023-12-06 14:57:40 [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":662,"outputBytes":2003}
|
||||
2023-12-06 14:57:40 [35mSTATE:[39m 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}
|
||||
2023-12-06 14:57:40 [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":1403,"outputBytes":690}
|
||||
2023-12-06 14:57:40 [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":675735,"outputBytes":319371}
|
||||
2023-12-06 14:57:40 [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":1403,"outputBytes":1265002}
|
||||
2023-12-06 14:57:40 [35mSTATE:[39m Compile: {"name":"human/browser/iife/bundle","format":"iife","platform":"browser","input":"src/human.ts","output":"dist/human.js","files":80,"inputBytes":1940047,"outputBytes":1580115}
|
||||
2023-12-06 14:57:40 [35mSTATE:[39m 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}
|
||||
2023-12-06 14:57:42 [35mSTATE:[39m Typings: {"input":"src/human.ts","output":"types/lib","files":14}
|
||||
2023-12-06 14:57:44 [35mSTATE:[39m TypeDoc: {"input":"src/human.ts","output":"typedoc","objects":81,"generated":true}
|
||||
2023-12-06 14:57:44 [35mSTATE:[39m 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 [35mSTATE:[39m 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 [35mSTATE:[39m 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 [35mSTATE:[39m Lint: {"locations":["**/*.json","src/**/*.ts","test/**/*.js","demo/**/*.js","**/*.md"],"files":172,"errors":0,"warnings":0}
|
||||
2023-12-06 14:57:51 [35mSTATE:[39m ChangeLog: {"repository":"https://github.com/vladmandic/human","branch":"main","output":"CHANGELOG.md"}
|
||||
2023-12-06 14:57:51 [35mSTATE:[39m Copy: {"input":"node_modules/@vladmandic/tfjs/types/tfjs-core.d.ts","output":"types/tfjs-core.d.ts"}
|
||||
2023-12-06 14:57:51 [36mINFO: [39m Done...
|
||||
2023-12-06 14:57:51 [35mSTATE:[39m Copy: {"input":"node_modules/@vladmandic/tfjs/types/tfjs.d.ts","output":"types/tfjs.esm.d.ts"}
|
||||
2023-12-06 14:57:51 [35mSTATE:[39m Copy: {"input":"src/types/tsconfig.json","output":"types/tsconfig.json"}
|
||||
2023-12-06 14:57:51 [35mSTATE:[39m Copy: {"input":"src/types/eslint.json","output":"types/.eslintrc.json"}
|
||||
2023-12-06 14:57:51 [35mSTATE:[39m Copy: {"input":"src/types/tfjs.esm.d.ts","output":"dist/tfjs.esm.d.ts"}
|
||||
2023-12-06 14:57:51 [35mSTATE:[39m Filter: {"input":"types/tfjs-core.d.ts"}
|
||||
2023-12-06 14:57:52 [31mERROR:[39m API-Extractor: {}
|
||||
2023-12-06 14:57:52 [35mSTATE:[39m Filter: {"input":"types/human.d.ts"}
|
||||
2023-12-06 14:57:52 [35mSTATE:[39m Write: {"output":"dist/human.esm-nobundle.d.ts"}
|
||||
2023-12-06 14:57:52 [35mSTATE:[39m Write: {"output":"dist/human.esm.d.ts"}
|
||||
2023-12-06 14:57:52 [35mSTATE:[39m Write: {"output":"dist/human.d.ts"}
|
||||
2023-12-06 14:57:52 [35mSTATE:[39m Write: {"output":"dist/human.node-gpu.d.ts"}
|
||||
2023-12-06 14:57:52 [35mSTATE:[39m Write: {"output":"dist/human.node.d.ts"}
|
||||
2023-12-06 14:57:52 [35mSTATE:[39m Write: {"output":"dist/human.node-wasm.d.ts"}
|
||||
2023-12-06 14:57:52 [36mINFO: [39m Analyze models: {"folders":8,"result":"models/models.json"}
|
||||
2023-12-06 14:57:52 [35mSTATE:[39m Models {"folder":"./models","models":12}
|
||||
2023-12-06 14:57:52 [35mSTATE:[39m Models {"folder":"../human-models/models","models":44}
|
||||
2023-12-06 14:57:52 [35mSTATE:[39m Models {"folder":"../blazepose/model/","models":4}
|
||||
2023-12-06 14:57:52 [35mSTATE:[39m Models {"folder":"../anti-spoofing/model","models":1}
|
||||
2023-12-06 14:57:52 [35mSTATE:[39m Models {"folder":"../efficientpose/models","models":3}
|
||||
2023-12-06 14:57:52 [35mSTATE:[39m Models {"folder":"../insightface/models","models":5}
|
||||
2023-12-06 14:57:52 [35mSTATE:[39m Models {"folder":"../movenet/models","models":3}
|
||||
2023-12-06 14:57:52 [35mSTATE:[39m Models {"folder":"../nanodet/models","models":4}
|
||||
2023-12-06 14:57:52 [35mSTATE:[39m Models: {"count":58,"totalSize":380063249}
|
||||
2023-12-06 14:57:52 [36mINFO: [39m Human Build complete... {"logFile":"test/build.log"}
|
||||
2024-02-15 12:49:25 [32mDATA: [39m Build {"name":"@vladmandic/human","version":"3.2.1"}
|
||||
2024-02-15 12:49:25 [36mINFO: [39m Application: {"name":"@vladmandic/human","version":"3.2.1"}
|
||||
2024-02-15 12:49:25 [36mINFO: [39m Environment: {"profile":"production","config":".build.json","package":"package.json","tsconfig":true,"eslintrc":true,"git":true}
|
||||
2024-02-15 12:49:25 [36mINFO: [39m Toolchain: {"build":"0.9.2","esbuild":"0.19.12","typescript":"5.3.3","typedoc":"0.25.4","eslint":"8.55.0"}
|
||||
2024-02-15 12:49:25 [36mINFO: [39m Build: {"profile":"production","steps":["clean","compile","typings","typedoc","lint","changelog"]}
|
||||
2024-02-15 12:49:25 [35mSTATE:[39m Clean: {"locations":["dist/*","types/*","typedoc/*"]}
|
||||
2024-02-15 12:49:25 [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":358}
|
||||
2024-02-15 12:49:25 [35mSTATE:[39m 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 [35mSTATE:[39m Compile: {"name":"human/nodejs/cpu","format":"cjs","platform":"node","input":"src/human.ts","output":"dist/human.node.js","files":80,"inputBytes":676266,"outputBytes":320934}
|
||||
2024-02-15 12:49:25 [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":574,"outputBytes":965}
|
||||
2024-02-15 12:49:25 [35mSTATE:[39m 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}
|
||||
2024-02-15 12:49:25 [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":662,"outputBytes":2003}
|
||||
2024-02-15 12:49:25 [35mSTATE:[39m 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}
|
||||
2024-02-15 12:49:25 [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":1403,"outputBytes":690}
|
||||
2024-02-15 12:49:25 [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":675999,"outputBytes":319515}
|
||||
2024-02-15 12:49:25 [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":1403,"outputBytes":1294474}
|
||||
2024-02-15 12:49:25 [35mSTATE:[39m Compile: {"name":"human/browser/iife/bundle","format":"iife","platform":"browser","input":"src/human.ts","output":"dist/human.js","files":80,"inputBytes":1969783,"outputBytes":1609692}
|
||||
2024-02-15 12:49:25 [35mSTATE:[39m 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}
|
||||
2024-02-15 12:49:26 [35mSTATE:[39m Typings: {"input":"src/human.ts","output":"types/lib","files":14}
|
||||
2024-02-15 12:49:28 [35mSTATE:[39m TypeDoc: {"input":"src/human.ts","output":"typedoc","objects":81,"generated":true}
|
||||
2024-02-15 12:49:28 [35mSTATE:[39m 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 [35mSTATE:[39m 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 [35mSTATE:[39m 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:35 [35mSTATE:[39m Lint: {"locations":["**/*.json","src/**/*.ts","test/**/*.js","demo/**/*.js","**/*.md"],"files":172,"errors":0,"warnings":0}
|
||||
2024-02-15 12:49:35 [35mSTATE:[39m ChangeLog: {"repository":"https://github.com/vladmandic/human","branch":"main","output":"CHANGELOG.md"}
|
||||
2024-02-15 12:49:35 [35mSTATE:[39m Copy: {"input":"node_modules/@vladmandic/tfjs/types/tfjs-core.d.ts","output":"types/tfjs-core.d.ts"}
|
||||
2024-02-15 12:49:35 [36mINFO: [39m Done...
|
||||
2024-02-15 12:49:35 [35mSTATE:[39m Copy: {"input":"node_modules/@vladmandic/tfjs/types/tfjs.d.ts","output":"types/tfjs.esm.d.ts"}
|
||||
2024-02-15 12:49:35 [35mSTATE:[39m Copy: {"input":"src/types/tsconfig.json","output":"types/tsconfig.json"}
|
||||
2024-02-15 12:49:35 [35mSTATE:[39m Copy: {"input":"src/types/eslint.json","output":"types/.eslintrc.json"}
|
||||
2024-02-15 12:49:35 [35mSTATE:[39m Copy: {"input":"src/types/tfjs.esm.d.ts","output":"dist/tfjs.esm.d.ts"}
|
||||
2024-02-15 12:49:35 [35mSTATE:[39m Filter: {"input":"types/tfjs-core.d.ts"}
|
||||
2024-02-15 12:49:36 [31mERROR:[39m API-Extractor: {}
|
||||
2024-02-15 12:49:36 [35mSTATE:[39m Filter: {"input":"types/human.d.ts"}
|
||||
2024-02-15 12:49:36 [35mSTATE:[39m Write: {"output":"dist/human.esm-nobundle.d.ts"}
|
||||
2024-02-15 12:49:36 [35mSTATE:[39m Write: {"output":"dist/human.esm.d.ts"}
|
||||
2024-02-15 12:49:36 [35mSTATE:[39m Write: {"output":"dist/human.d.ts"}
|
||||
2024-02-15 12:49:36 [35mSTATE:[39m Write: {"output":"dist/human.node-gpu.d.ts"}
|
||||
2024-02-15 12:49:36 [35mSTATE:[39m Write: {"output":"dist/human.node.d.ts"}
|
||||
2024-02-15 12:49:36 [35mSTATE:[39m Write: {"output":"dist/human.node-wasm.d.ts"}
|
||||
2024-02-15 12:49:36 [36mINFO: [39m Analyze models: {"folders":8,"result":"models/models.json"}
|
||||
2024-02-15 12:49:36 [35mSTATE:[39m Models {"folder":"./models","models":12}
|
||||
2024-02-15 12:49:36 [35mSTATE:[39m Models {"folder":"../human-models/models","models":44}
|
||||
2024-02-15 12:49:36 [35mSTATE:[39m Models {"folder":"../blazepose/model/","models":4}
|
||||
2024-02-15 12:49:36 [35mSTATE:[39m Models {"folder":"../anti-spoofing/model","models":1}
|
||||
2024-02-15 12:49:36 [35mSTATE:[39m Models {"folder":"../efficientpose/models","models":3}
|
||||
2024-02-15 12:49:36 [35mSTATE:[39m Models {"folder":"../insightface/models","models":5}
|
||||
2024-02-15 12:49:36 [35mSTATE:[39m Models {"folder":"../movenet/models","models":3}
|
||||
2024-02-15 12:49:36 [35mSTATE:[39m Models {"folder":"../nanodet/models","models":4}
|
||||
2024-02-15 12:49:36 [35mSTATE:[39m Models: {"count":58,"totalSize":380063249}
|
||||
2024-02-15 12:49:36 [36mINFO: [39m Human Build complete... {"logFile":"test/build.log"}
|
||||
|
|
1809
test/test.log
1809
test/test.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
Loading…
Reference in New Issue