mirror of https://github.com/vladmandic/human
update iris distance calculations
parent
4ed9e9f3a1
commit
53d2241036
|
@ -9,13 +9,14 @@ Repository: **<git+https://github.com/vladmandic/human.git>**
|
||||||
|
|
||||||
## Changelog
|
## Changelog
|
||||||
|
|
||||||
|
### **HEAD -> main** 2021/05/23 mandic00@live.com
|
||||||
|
|
||||||
|
|
||||||
### **1.9.3** 2021/05/23 mandic00@live.com
|
### **1.9.3** 2021/05/23 mandic00@live.com
|
||||||
|
|
||||||
- use green weighted for input diff calculation
|
- use green weighted for input diff calculation
|
||||||
- implement experimental drawoptions.bufferedoutput and bufferedfactor
|
- implement experimental drawoptions.bufferedoutput and bufferedfactor
|
||||||
|
- use explicit tensor interface
|
||||||
### **origin/main** 2021/05/22 mandic00@live.com
|
|
||||||
|
|
||||||
- add tfjs types and remove all instances of any
|
- add tfjs types and remove all instances of any
|
||||||
- enhance strong typing
|
- enhance strong typing
|
||||||
- rebuild all for release
|
- rebuild all for release
|
||||||
|
|
|
@ -18,18 +18,18 @@ const userConfig = {
|
||||||
enabled: false,
|
enabled: false,
|
||||||
flip: false,
|
flip: false,
|
||||||
},
|
},
|
||||||
face: { enabled: false,
|
face: { enabled: true,
|
||||||
detector: { return: false },
|
detector: { return: true },
|
||||||
mesh: { enabled: true },
|
mesh: { enabled: true },
|
||||||
iris: { enabled: true },
|
iris: { enabled: true },
|
||||||
description: { enabled: false },
|
description: { enabled: false },
|
||||||
emotion: { enabled: false },
|
emotion: { enabled: false },
|
||||||
},
|
},
|
||||||
hand: { enabled: true },
|
hand: { enabled: false },
|
||||||
gesture: { enabled: true },
|
body: { enabled: false, modelPath: 'posenet.json' },
|
||||||
body: { enabled: true, modelPath: 'posenet.json' },
|
|
||||||
// body: { enabled: true, modelPath: 'blazepose.json' },
|
// body: { enabled: true, modelPath: 'blazepose.json' },
|
||||||
object: { enabled: false },
|
object: { enabled: false },
|
||||||
|
gesture: { enabled: 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
|
@ -4453,7 +4453,7 @@ var detectFace = async (parent, input) => {
|
||||||
delete faces[i].annotations.leftEyeIris;
|
delete faces[i].annotations.leftEyeIris;
|
||||||
delete faces[i].annotations.rightEyeIris;
|
delete faces[i].annotations.rightEyeIris;
|
||||||
}
|
}
|
||||||
const irisSize = ((_e = faces[i].annotations) == null ? void 0 : _e.leftEyeIris) && ((_f = faces[i].annotations) == null ? void 0 : _f.rightEyeIris) ? 11.7 * Math.max(Math.abs(faces[i].annotations.leftEyeIris[3][0] - faces[i].annotations.leftEyeIris[1][0]), Math.abs(faces[i].annotations.rightEyeIris[4][1] - faces[i].annotations.rightEyeIris[2][1])) : 0;
|
const irisSize = ((_e = faces[i].annotations) == null ? void 0 : _e.leftEyeIris) && ((_f = faces[i].annotations) == null ? void 0 : _f.rightEyeIris) ? Math.max(Math.abs(faces[i].annotations.leftEyeIris[3][0] - faces[i].annotations.leftEyeIris[1][0]), Math.abs(faces[i].annotations.rightEyeIris[4][1] - faces[i].annotations.rightEyeIris[2][1])) / input.shape[2] : 0;
|
||||||
faceRes.push({
|
faceRes.push({
|
||||||
id: i,
|
id: i,
|
||||||
...faces[i],
|
...faces[i],
|
||||||
|
@ -4462,7 +4462,7 @@ var detectFace = async (parent, input) => {
|
||||||
genderConfidence: descRes.genderConfidence,
|
genderConfidence: descRes.genderConfidence,
|
||||||
embedding: descRes.descriptor,
|
embedding: descRes.descriptor,
|
||||||
emotion: emotionRes,
|
emotion: emotionRes,
|
||||||
iris: irisSize !== 0 ? Math.trunc(irisSize) / 100 : 0,
|
iris: irisSize !== 0 ? Math.trunc(500 / irisSize / 11.7) / 100 : 0,
|
||||||
rotation,
|
rotation,
|
||||||
tensor: parent.config.face.detector.return ? (_g = faces[i].image) == null ? void 0 : _g.squeeze() : null
|
tensor: parent.config.face.detector.return ? (_g = faces[i].image) == null ? void 0 : _g.squeeze() : null
|
||||||
});
|
});
|
||||||
|
@ -17399,6 +17399,7 @@ async function process3(res, inputSize, outputShape, config3) {
|
||||||
classesT.dispose();
|
classesT.dispose();
|
||||||
const nms = nmsT.dataSync();
|
const nms = nmsT.dataSync();
|
||||||
nmsT.dispose();
|
nmsT.dispose();
|
||||||
|
let i = 0;
|
||||||
for (const id of nms) {
|
for (const id of nms) {
|
||||||
const score = detections[0][id][4];
|
const score = detections[0][id][4];
|
||||||
const classVal = detections[0][id][5];
|
const classVal = detections[0][id][5];
|
||||||
|
@ -17415,7 +17416,7 @@ async function process3(res, inputSize, outputShape, config3) {
|
||||||
Math.trunc(boxRaw[2] * outputShape[0]),
|
Math.trunc(boxRaw[2] * outputShape[0]),
|
||||||
Math.trunc(boxRaw[3] * outputShape[1])
|
Math.trunc(boxRaw[3] * outputShape[1])
|
||||||
];
|
];
|
||||||
results.push({ score, class: classVal, label, box: box4, boxRaw });
|
results.push({ id: i++, score, class: classVal, label, box: box4, boxRaw });
|
||||||
}
|
}
|
||||||
return results;
|
return results;
|
||||||
}
|
}
|
||||||
|
|
|
@ -4454,7 +4454,7 @@ var detectFace = async (parent, input) => {
|
||||||
delete faces[i].annotations.leftEyeIris;
|
delete faces[i].annotations.leftEyeIris;
|
||||||
delete faces[i].annotations.rightEyeIris;
|
delete faces[i].annotations.rightEyeIris;
|
||||||
}
|
}
|
||||||
const irisSize = ((_e = faces[i].annotations) == null ? void 0 : _e.leftEyeIris) && ((_f = faces[i].annotations) == null ? void 0 : _f.rightEyeIris) ? 11.7 * Math.max(Math.abs(faces[i].annotations.leftEyeIris[3][0] - faces[i].annotations.leftEyeIris[1][0]), Math.abs(faces[i].annotations.rightEyeIris[4][1] - faces[i].annotations.rightEyeIris[2][1])) : 0;
|
const irisSize = ((_e = faces[i].annotations) == null ? void 0 : _e.leftEyeIris) && ((_f = faces[i].annotations) == null ? void 0 : _f.rightEyeIris) ? Math.max(Math.abs(faces[i].annotations.leftEyeIris[3][0] - faces[i].annotations.leftEyeIris[1][0]), Math.abs(faces[i].annotations.rightEyeIris[4][1] - faces[i].annotations.rightEyeIris[2][1])) / input.shape[2] : 0;
|
||||||
faceRes.push({
|
faceRes.push({
|
||||||
id: i,
|
id: i,
|
||||||
...faces[i],
|
...faces[i],
|
||||||
|
@ -4463,7 +4463,7 @@ var detectFace = async (parent, input) => {
|
||||||
genderConfidence: descRes.genderConfidence,
|
genderConfidence: descRes.genderConfidence,
|
||||||
embedding: descRes.descriptor,
|
embedding: descRes.descriptor,
|
||||||
emotion: emotionRes,
|
emotion: emotionRes,
|
||||||
iris: irisSize !== 0 ? Math.trunc(irisSize) / 100 : 0,
|
iris: irisSize !== 0 ? Math.trunc(500 / irisSize / 11.7) / 100 : 0,
|
||||||
rotation,
|
rotation,
|
||||||
tensor: parent.config.face.detector.return ? (_g = faces[i].image) == null ? void 0 : _g.squeeze() : null
|
tensor: parent.config.face.detector.return ? (_g = faces[i].image) == null ? void 0 : _g.squeeze() : null
|
||||||
});
|
});
|
||||||
|
@ -17400,6 +17400,7 @@ async function process3(res, inputSize, outputShape, config3) {
|
||||||
classesT.dispose();
|
classesT.dispose();
|
||||||
const nms = nmsT.dataSync();
|
const nms = nmsT.dataSync();
|
||||||
nmsT.dispose();
|
nmsT.dispose();
|
||||||
|
let i = 0;
|
||||||
for (const id of nms) {
|
for (const id of nms) {
|
||||||
const score = detections[0][id][4];
|
const score = detections[0][id][4];
|
||||||
const classVal = detections[0][id][5];
|
const classVal = detections[0][id][5];
|
||||||
|
@ -17416,7 +17417,7 @@ async function process3(res, inputSize, outputShape, config3) {
|
||||||
Math.trunc(boxRaw[2] * outputShape[0]),
|
Math.trunc(boxRaw[2] * outputShape[0]),
|
||||||
Math.trunc(boxRaw[3] * outputShape[1])
|
Math.trunc(boxRaw[3] * outputShape[1])
|
||||||
];
|
];
|
||||||
results.push({ score, class: classVal, label, box: box4, boxRaw });
|
results.push({ id: i++, score, class: classVal, label, box: box4, boxRaw });
|
||||||
}
|
}
|
||||||
return results;
|
return results;
|
||||||
}
|
}
|
||||||
|
|
|
@ -4453,7 +4453,7 @@ var detectFace = async (parent, input) => {
|
||||||
delete faces[i].annotations.leftEyeIris;
|
delete faces[i].annotations.leftEyeIris;
|
||||||
delete faces[i].annotations.rightEyeIris;
|
delete faces[i].annotations.rightEyeIris;
|
||||||
}
|
}
|
||||||
const irisSize = ((_e = faces[i].annotations) == null ? void 0 : _e.leftEyeIris) && ((_f = faces[i].annotations) == null ? void 0 : _f.rightEyeIris) ? 11.7 * Math.max(Math.abs(faces[i].annotations.leftEyeIris[3][0] - faces[i].annotations.leftEyeIris[1][0]), Math.abs(faces[i].annotations.rightEyeIris[4][1] - faces[i].annotations.rightEyeIris[2][1])) : 0;
|
const irisSize = ((_e = faces[i].annotations) == null ? void 0 : _e.leftEyeIris) && ((_f = faces[i].annotations) == null ? void 0 : _f.rightEyeIris) ? Math.max(Math.abs(faces[i].annotations.leftEyeIris[3][0] - faces[i].annotations.leftEyeIris[1][0]), Math.abs(faces[i].annotations.rightEyeIris[4][1] - faces[i].annotations.rightEyeIris[2][1])) / input.shape[2] : 0;
|
||||||
faceRes.push({
|
faceRes.push({
|
||||||
id: i,
|
id: i,
|
||||||
...faces[i],
|
...faces[i],
|
||||||
|
@ -4462,7 +4462,7 @@ var detectFace = async (parent, input) => {
|
||||||
genderConfidence: descRes.genderConfidence,
|
genderConfidence: descRes.genderConfidence,
|
||||||
embedding: descRes.descriptor,
|
embedding: descRes.descriptor,
|
||||||
emotion: emotionRes,
|
emotion: emotionRes,
|
||||||
iris: irisSize !== 0 ? Math.trunc(irisSize) / 100 : 0,
|
iris: irisSize !== 0 ? Math.trunc(500 / irisSize / 11.7) / 100 : 0,
|
||||||
rotation,
|
rotation,
|
||||||
tensor: parent.config.face.detector.return ? (_g = faces[i].image) == null ? void 0 : _g.squeeze() : null
|
tensor: parent.config.face.detector.return ? (_g = faces[i].image) == null ? void 0 : _g.squeeze() : null
|
||||||
});
|
});
|
||||||
|
@ -17399,6 +17399,7 @@ async function process3(res, inputSize, outputShape, config3) {
|
||||||
classesT.dispose();
|
classesT.dispose();
|
||||||
const nms = nmsT.dataSync();
|
const nms = nmsT.dataSync();
|
||||||
nmsT.dispose();
|
nmsT.dispose();
|
||||||
|
let i = 0;
|
||||||
for (const id of nms) {
|
for (const id of nms) {
|
||||||
const score = detections[0][id][4];
|
const score = detections[0][id][4];
|
||||||
const classVal = detections[0][id][5];
|
const classVal = detections[0][id][5];
|
||||||
|
@ -17415,7 +17416,7 @@ async function process3(res, inputSize, outputShape, config3) {
|
||||||
Math.trunc(boxRaw[2] * outputShape[0]),
|
Math.trunc(boxRaw[2] * outputShape[0]),
|
||||||
Math.trunc(boxRaw[3] * outputShape[1])
|
Math.trunc(boxRaw[3] * outputShape[1])
|
||||||
];
|
];
|
||||||
results.push({ score, class: classVal, label, box: box4, boxRaw });
|
results.push({ id: i++, score, class: classVal, label, box: box4, boxRaw });
|
||||||
}
|
}
|
||||||
return results;
|
return results;
|
||||||
}
|
}
|
||||||
|
|
|
@ -103,3 +103,20 @@
|
||||||
2021-05-23 13:54:50 [36mINFO: [39m Generate types: ["src/human.ts"]
|
2021-05-23 13:54:50 [36mINFO: [39m Generate types: ["src/human.ts"]
|
||||||
2021-05-23 13:54:56 [36mINFO: [39m Update Change log: ["/home/vlado/dev/human/CHANGELOG.md"]
|
2021-05-23 13:54:56 [36mINFO: [39m Update Change log: ["/home/vlado/dev/human/CHANGELOG.md"]
|
||||||
2021-05-23 13:54:56 [36mINFO: [39m Generate TypeDocs: ["src/human.ts"]
|
2021-05-23 13:54:56 [36mINFO: [39m Generate TypeDocs: ["src/human.ts"]
|
||||||
|
2021-05-24 07:15:57 [36mINFO: [39m @vladmandic/human version 1.9.3
|
||||||
|
2021-05-24 07:15:57 [36mINFO: [39m User: vlado Platform: linux Arch: x64 Node: v16.0.0
|
||||||
|
2021-05-24 07:15:57 [36mINFO: [39m Build: file startup all type: production config: {"minifyWhitespace":true,"minifyIdentifiers":true,"minifySyntax":true}
|
||||||
|
2021-05-24 07:15:57 [35mSTATE:[39m Build for: node type: tfjs: {"imports":1,"importBytes":39,"outputBytes":1292,"outputFiles":"dist/tfjs.esm.js"}
|
||||||
|
2021-05-24 07:15:57 [35mSTATE:[39m Build for: node type: node: {"imports":36,"importBytes":424920,"outputBytes":381396,"outputFiles":"dist/human.node.js"}
|
||||||
|
2021-05-24 07:15:57 [35mSTATE:[39m Build for: nodeGPU type: tfjs: {"imports":1,"importBytes":43,"outputBytes":1300,"outputFiles":"dist/tfjs.esm.js"}
|
||||||
|
2021-05-24 07:15:57 [35mSTATE:[39m Build for: nodeGPU type: node: {"imports":36,"importBytes":424928,"outputBytes":381400,"outputFiles":"dist/human.node-gpu.js"}
|
||||||
|
2021-05-24 07:15:57 [35mSTATE:[39m Build for: nodeWASM type: tfjs: {"imports":1,"importBytes":81,"outputBytes":1367,"outputFiles":"dist/tfjs.esm.js"}
|
||||||
|
2021-05-24 07:15:57 [35mSTATE:[39m Build for: nodeWASM type: node: {"imports":36,"importBytes":424995,"outputBytes":381472,"outputFiles":"dist/human.node-wasm.js"}
|
||||||
|
2021-05-24 07:15:57 [35mSTATE:[39m Build for: browserNoBundle type: tfjs: {"imports":1,"importBytes":2488,"outputBytes":1394,"outputFiles":"dist/tfjs.esm.js"}
|
||||||
|
2021-05-24 07:15:57 [35mSTATE:[39m Build for: browserNoBundle type: esm: {"imports":36,"importBytes":425022,"outputBytes":234163,"outputFiles":"dist/human.esm-nobundle.js"}
|
||||||
|
2021-05-24 07:15:59 [35mSTATE:[39m Build for: browserBundle type: tfjs: {"modules":1274,"moduleBytes":4114813,"imports":7,"importBytes":2488,"outputBytes":1111414,"outputFiles":"dist/tfjs.esm.js"}
|
||||||
|
2021-05-24 07:15:59 [35mSTATE:[39m Build for: browserBundle type: iife: {"imports":36,"importBytes":1535042,"outputBytes":1342052,"outputFiles":"dist/human.js"}
|
||||||
|
2021-05-24 07:16:00 [35mSTATE:[39m Build for: browserBundle type: esm: {"imports":36,"importBytes":1535042,"outputBytes":1342044,"outputFiles":"dist/human.esm.js"}
|
||||||
|
2021-05-24 07:16:00 [36mINFO: [39m Generate types: ["src/human.ts"]
|
||||||
|
2021-05-24 07:16:07 [36mINFO: [39m Update Change log: ["/home/vlado/dev/human/CHANGELOG.md"]
|
||||||
|
2021-05-24 07:16:07 [36mINFO: [39m Generate TypeDocs: ["src/human.ts"]
|
||||||
|
|
|
@ -161,8 +161,8 @@ export const detectFace = async (parent, input): Promise<Face[]> => {
|
||||||
delete faces[i].annotations.rightEyeIris;
|
delete faces[i].annotations.rightEyeIris;
|
||||||
}
|
}
|
||||||
const irisSize = (faces[i].annotations?.leftEyeIris && faces[i].annotations?.rightEyeIris)
|
const irisSize = (faces[i].annotations?.leftEyeIris && faces[i].annotations?.rightEyeIris)
|
||||||
/* average human iris size is 11.7mm */
|
/* note: average human iris size is 11.7mm */
|
||||||
? 11.7 * Math.max(Math.abs(faces[i].annotations.leftEyeIris[3][0] - faces[i].annotations.leftEyeIris[1][0]), Math.abs(faces[i].annotations.rightEyeIris[4][1] - faces[i].annotations.rightEyeIris[2][1]))
|
? Math.max(Math.abs(faces[i].annotations.leftEyeIris[3][0] - faces[i].annotations.leftEyeIris[1][0]), Math.abs(faces[i].annotations.rightEyeIris[4][1] - faces[i].annotations.rightEyeIris[2][1])) / input.shape[2]
|
||||||
: 0;
|
: 0;
|
||||||
|
|
||||||
// combine results
|
// combine results
|
||||||
|
@ -174,7 +174,7 @@ export const detectFace = async (parent, input): Promise<Face[]> => {
|
||||||
genderConfidence: descRes.genderConfidence,
|
genderConfidence: descRes.genderConfidence,
|
||||||
embedding: descRes.descriptor,
|
embedding: descRes.descriptor,
|
||||||
emotion: emotionRes,
|
emotion: emotionRes,
|
||||||
iris: (irisSize !== 0) ? Math.trunc(irisSize) / 100 : 0,
|
iris: irisSize !== 0 ? Math.trunc(500 / irisSize / 11.7) / 100 : 0,
|
||||||
rotation,
|
rotation,
|
||||||
tensor: parent.config.face.detector.return ? faces[i].image?.squeeze() : null,
|
tensor: parent.config.face.detector.return ? faces[i].image?.squeeze() : null,
|
||||||
});
|
});
|
||||||
|
|
|
@ -20,7 +20,7 @@ export async function load(config) {
|
||||||
}
|
}
|
||||||
|
|
||||||
async function process(res, inputSize, outputShape, config) {
|
async function process(res, inputSize, outputShape, config) {
|
||||||
const results: Array<{ score: number, class: number, label: string, box: number[], boxRaw: number[] }> = [];
|
const results: Array<Item> = [];
|
||||||
const detections = res.arraySync();
|
const detections = res.arraySync();
|
||||||
const squeezeT = tf.squeeze(res);
|
const squeezeT = tf.squeeze(res);
|
||||||
res.dispose();
|
res.dispose();
|
||||||
|
@ -38,6 +38,7 @@ async function process(res, inputSize, outputShape, config) {
|
||||||
classesT.dispose();
|
classesT.dispose();
|
||||||
const nms = nmsT.dataSync();
|
const nms = nmsT.dataSync();
|
||||||
nmsT.dispose();
|
nmsT.dispose();
|
||||||
|
let i = 0;
|
||||||
for (const id of nms) {
|
for (const id of nms) {
|
||||||
const score = detections[0][id][4];
|
const score = detections[0][id][4];
|
||||||
const classVal = detections[0][id][5];
|
const classVal = detections[0][id][5];
|
||||||
|
@ -54,7 +55,7 @@ async function process(res, inputSize, outputShape, config) {
|
||||||
Math.trunc(boxRaw[2] * outputShape[0]),
|
Math.trunc(boxRaw[2] * outputShape[0]),
|
||||||
Math.trunc(boxRaw[3] * outputShape[1]),
|
Math.trunc(boxRaw[3] * outputShape[1]),
|
||||||
];
|
];
|
||||||
results.push({ score, class: classVal, label, box, boxRaw });
|
results.push({ id: i++, score, class: classVal, label, box, boxRaw });
|
||||||
}
|
}
|
||||||
return results;
|
return results;
|
||||||
}
|
}
|
||||||
|
|
|
@ -23,7 +23,7 @@ export async function load(config) {
|
||||||
|
|
||||||
async function process(res, inputSize, outputShape, config) {
|
async function process(res, inputSize, outputShape, config) {
|
||||||
let id = 0;
|
let id = 0;
|
||||||
let results: Array<{ score: number, strideSize: number, class: number, label: string, center: number[], centerRaw: number[], box: number[], boxRaw: number[] }> = [];
|
let results: Array<Item> = [];
|
||||||
for (const strideSize of [1, 2, 4]) { // try each stride size as it detects large/medium/small objects
|
for (const strideSize of [1, 2, 4]) { // try each stride size as it detects large/medium/small objects
|
||||||
// find scores, boxes, classes
|
// find scores, boxes, classes
|
||||||
tf.tidy(() => { // wrap in tidy to automatically deallocate temp tensors
|
tf.tidy(() => { // wrap in tidy to automatically deallocate temp tensors
|
||||||
|
|
|
@ -1,8 +1,4 @@
|
||||||
/**
|
import { Tensor } from '../dist/tfjs.esm.js';
|
||||||
* Result interface definition for **Human** library
|
|
||||||
*
|
|
||||||
* Contains all possible detection results
|
|
||||||
*/
|
|
||||||
|
|
||||||
/** Face results
|
/** Face results
|
||||||
* Combined results of face detector, face mesh, age, gender, emotion, embedding, iris models
|
* Combined results of face detector, face mesh, age, gender, emotion, embedding, iris models
|
||||||
|
@ -30,8 +26,6 @@
|
||||||
* - matrix: 3d transofrmation matrix as array of numeric values
|
* - matrix: 3d transofrmation matrix as array of numeric values
|
||||||
* - tensor: face tensor as Tensor object which contains detected face
|
* - tensor: face tensor as Tensor object which contains detected face
|
||||||
*/
|
*/
|
||||||
import { Tensor } from '../dist/tfjs.esm.js';
|
|
||||||
|
|
||||||
export interface Face {
|
export interface Face {
|
||||||
id: number
|
id: number
|
||||||
confidence: number,
|
confidence: number,
|
||||||
|
@ -69,7 +63,6 @@ export interface Face {
|
||||||
* - score: body part score value
|
* - score: body part score value
|
||||||
* - presence: body part presence value
|
* - presence: body part presence value
|
||||||
*/
|
*/
|
||||||
|
|
||||||
export interface Body {
|
export interface Body {
|
||||||
id: number,
|
id: number,
|
||||||
score: number,
|
score: number,
|
||||||
|
@ -115,6 +108,7 @@ export interface Hand {
|
||||||
* - boxRaw as array of [x, y, width, height], normalized to range 0..1
|
* - boxRaw as array of [x, y, width, height], normalized to range 0..1
|
||||||
*/
|
*/
|
||||||
export interface Item {
|
export interface Item {
|
||||||
|
id: number,
|
||||||
score: number,
|
score: number,
|
||||||
strideSize?: number,
|
strideSize?: number,
|
||||||
class: number,
|
class: number,
|
||||||
|
@ -138,6 +132,11 @@ export type Gesture =
|
||||||
| { 'body': number, gesture: string }
|
| { 'body': number, gesture: string }
|
||||||
| { 'hand': number, gesture: string }
|
| { 'hand': number, gesture: string }
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Result interface definition for **Human** library
|
||||||
|
*
|
||||||
|
* Contains all possible detection results
|
||||||
|
*/
|
||||||
export interface Result {
|
export interface Result {
|
||||||
/** {@link Face}: detection & analysis results */
|
/** {@link Face}: detection & analysis results */
|
||||||
face: Array<Face>,
|
face: Array<Face>,
|
||||||
|
|
File diff suppressed because one or more lines are too long
|
@ -63,6 +63,38 @@
|
||||||
<div class="container container-main">
|
<div class="container container-main">
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col-8 col-content">
|
<div class="col-8 col-content">
|
||||||
|
<section class="tsd-panel tsd-comment">
|
||||||
|
<div class="tsd-comment tsd-typography">
|
||||||
|
<div class="lead">
|
||||||
|
<p>Face results
|
||||||
|
Combined results of face detector, face mesh, age, gender, emotion, embedding, iris models
|
||||||
|
Some values may be null if specific model is not enabled</p>
|
||||||
|
</div>
|
||||||
|
<p>Array of individual results with one object per detected face
|
||||||
|
Each result has:</p>
|
||||||
|
<ul>
|
||||||
|
<li>id: face number</li>
|
||||||
|
<li>confidence: overal detection confidence value</li>
|
||||||
|
<li>boxConfidence: face box detection confidence value</li>
|
||||||
|
<li>faceConfidence: face keypoints detection confidence value</li>
|
||||||
|
<li>box: face bounding box as array of [x, y, width, height], normalized to image resolution</li>
|
||||||
|
<li>boxRaw: face bounding box as array of [x, y, width, height], normalized to range 0..1</li>
|
||||||
|
<li>mesh: face keypoints as array of [x, y, z] points of face mesh, normalized to image resolution</li>
|
||||||
|
<li>meshRaw: face keypoints as array of [x, y, z] points of face mesh, normalized to range 0..1</li>
|
||||||
|
<li>annotations: annotated face keypoints as array of annotated face mesh points</li>
|
||||||
|
<li>age: age as value</li>
|
||||||
|
<li>gender: gender as value</li>
|
||||||
|
<li>genderConfidence: gender detection confidence as value</li>
|
||||||
|
<li>emotion: emotions as array of possible emotions with their individual scores</li>
|
||||||
|
<li>embedding: facial descriptor as array of numerical elements</li>
|
||||||
|
<li>iris: iris distance from current viewpoint as distance value</li>
|
||||||
|
<li>rotation: face rotiation that contains both angles and matrix used for 3d transformations</li>
|
||||||
|
<li>angle: face angle as object with values for roll, yaw and pitch angles</li>
|
||||||
|
<li>matrix: 3d transofrmation matrix as array of numeric values</li>
|
||||||
|
<li>tensor: face tensor as Tensor object which contains detected face</li>
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
</section>
|
||||||
<section class="tsd-panel tsd-hierarchy">
|
<section class="tsd-panel tsd-hierarchy">
|
||||||
<h3>Hierarchy</h3>
|
<h3>Hierarchy</h3>
|
||||||
<ul class="tsd-hierarchy">
|
<ul class="tsd-hierarchy">
|
||||||
|
|
|
@ -100,6 +100,7 @@
|
||||||
<li class="tsd-kind-property tsd-parent-kind-interface"><a href="item.html#center" class="tsd-kind-icon">center</a></li>
|
<li class="tsd-kind-property tsd-parent-kind-interface"><a href="item.html#center" class="tsd-kind-icon">center</a></li>
|
||||||
<li class="tsd-kind-property tsd-parent-kind-interface"><a href="item.html#centerraw" class="tsd-kind-icon">center<wbr>Raw</a></li>
|
<li class="tsd-kind-property tsd-parent-kind-interface"><a href="item.html#centerraw" class="tsd-kind-icon">center<wbr>Raw</a></li>
|
||||||
<li class="tsd-kind-property tsd-parent-kind-interface"><a href="item.html#class" class="tsd-kind-icon">class</a></li>
|
<li class="tsd-kind-property tsd-parent-kind-interface"><a href="item.html#class" class="tsd-kind-icon">class</a></li>
|
||||||
|
<li class="tsd-kind-property tsd-parent-kind-interface"><a href="item.html#id" class="tsd-kind-icon">id</a></li>
|
||||||
<li class="tsd-kind-property tsd-parent-kind-interface"><a href="item.html#label" class="tsd-kind-icon">label</a></li>
|
<li class="tsd-kind-property tsd-parent-kind-interface"><a href="item.html#label" class="tsd-kind-icon">label</a></li>
|
||||||
<li class="tsd-kind-property tsd-parent-kind-interface"><a href="item.html#score" class="tsd-kind-icon">score</a></li>
|
<li class="tsd-kind-property tsd-parent-kind-interface"><a href="item.html#score" class="tsd-kind-icon">score</a></li>
|
||||||
<li class="tsd-kind-property tsd-parent-kind-interface"><a href="item.html#stridesize" class="tsd-kind-icon">stride<wbr>Size</a></li>
|
<li class="tsd-kind-property tsd-parent-kind-interface"><a href="item.html#stridesize" class="tsd-kind-icon">stride<wbr>Size</a></li>
|
||||||
|
@ -145,6 +146,13 @@
|
||||||
<aside class="tsd-sources">
|
<aside class="tsd-sources">
|
||||||
</aside>
|
</aside>
|
||||||
</section>
|
</section>
|
||||||
|
<section class="tsd-panel tsd-member tsd-kind-property tsd-parent-kind-interface">
|
||||||
|
<a name="id" class="tsd-anchor"></a>
|
||||||
|
<h3>id</h3>
|
||||||
|
<div class="tsd-signature tsd-kind-icon">id<span class="tsd-signature-symbol">:</span> <span class="tsd-signature-type">number</span></div>
|
||||||
|
<aside class="tsd-sources">
|
||||||
|
</aside>
|
||||||
|
</section>
|
||||||
<section class="tsd-panel tsd-member tsd-kind-property tsd-parent-kind-interface">
|
<section class="tsd-panel tsd-member tsd-kind-property tsd-parent-kind-interface">
|
||||||
<a name="label" class="tsd-anchor"></a>
|
<a name="label" class="tsd-anchor"></a>
|
||||||
<h3>label</h3>
|
<h3>label</h3>
|
||||||
|
@ -219,6 +227,9 @@
|
||||||
<li class=" tsd-kind-property tsd-parent-kind-interface">
|
<li class=" tsd-kind-property tsd-parent-kind-interface">
|
||||||
<a href="item.html#class" class="tsd-kind-icon">class</a>
|
<a href="item.html#class" class="tsd-kind-icon">class</a>
|
||||||
</li>
|
</li>
|
||||||
|
<li class=" tsd-kind-property tsd-parent-kind-interface">
|
||||||
|
<a href="item.html#id" class="tsd-kind-icon">id</a>
|
||||||
|
</li>
|
||||||
<li class=" tsd-kind-property tsd-parent-kind-interface">
|
<li class=" tsd-kind-property tsd-parent-kind-interface">
|
||||||
<a href="item.html#label" class="tsd-kind-icon">label</a>
|
<a href="item.html#label" class="tsd-kind-icon">label</a>
|
||||||
</li>
|
</li>
|
||||||
|
|
|
@ -63,6 +63,14 @@
|
||||||
<div class="container container-main">
|
<div class="container container-main">
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col-8 col-content">
|
<div class="col-8 col-content">
|
||||||
|
<section class="tsd-panel tsd-comment">
|
||||||
|
<div class="tsd-comment tsd-typography">
|
||||||
|
<div class="lead">
|
||||||
|
<p>Result interface definition for <strong>Human</strong> library</p>
|
||||||
|
</div>
|
||||||
|
<p>Contains all possible detection results</p>
|
||||||
|
</div>
|
||||||
|
</section>
|
||||||
<section class="tsd-panel tsd-hierarchy">
|
<section class="tsd-panel tsd-hierarchy">
|
||||||
<h3>Hierarchy</h3>
|
<h3>Hierarchy</h3>
|
||||||
<ul class="tsd-hierarchy">
|
<ul class="tsd-hierarchy">
|
||||||
|
|
|
@ -1,8 +1,4 @@
|
||||||
/**
|
import { Tensor } from '../dist/tfjs.esm.js';
|
||||||
* Result interface definition for **Human** library
|
|
||||||
*
|
|
||||||
* Contains all possible detection results
|
|
||||||
*/
|
|
||||||
/** Face results
|
/** Face results
|
||||||
* Combined results of face detector, face mesh, age, gender, emotion, embedding, iris models
|
* Combined results of face detector, face mesh, age, gender, emotion, embedding, iris models
|
||||||
* Some values may be null if specific model is not enabled
|
* Some values may be null if specific model is not enabled
|
||||||
|
@ -29,7 +25,6 @@
|
||||||
* - matrix: 3d transofrmation matrix as array of numeric values
|
* - matrix: 3d transofrmation matrix as array of numeric values
|
||||||
* - tensor: face tensor as Tensor object which contains detected face
|
* - tensor: face tensor as Tensor object which contains detected face
|
||||||
*/
|
*/
|
||||||
import { Tensor } from '../dist/tfjs.esm.js';
|
|
||||||
export interface Face {
|
export interface Face {
|
||||||
id: number;
|
id: number;
|
||||||
confidence: number;
|
confidence: number;
|
||||||
|
@ -130,6 +125,7 @@ export interface Hand {
|
||||||
* - boxRaw as array of [x, y, width, height], normalized to range 0..1
|
* - boxRaw as array of [x, y, width, height], normalized to range 0..1
|
||||||
*/
|
*/
|
||||||
export interface Item {
|
export interface Item {
|
||||||
|
id: number;
|
||||||
score: number;
|
score: number;
|
||||||
strideSize?: number;
|
strideSize?: number;
|
||||||
class: number;
|
class: number;
|
||||||
|
@ -159,6 +155,11 @@ export declare type Gesture = {
|
||||||
'hand': number;
|
'hand': number;
|
||||||
gesture: string;
|
gesture: string;
|
||||||
};
|
};
|
||||||
|
/**
|
||||||
|
* Result interface definition for **Human** library
|
||||||
|
*
|
||||||
|
* Contains all possible detection results
|
||||||
|
*/
|
||||||
export interface Result {
|
export interface Result {
|
||||||
/** {@link Face}: detection & analysis results */
|
/** {@link Face}: detection & analysis results */
|
||||||
face: Array<Face>;
|
face: Array<Face>;
|
||||||
|
|
Loading…
Reference in New Issue