fix for wasm compatibility
parent
4f17fe476b
commit
7e1de2e57b
|
@ -1,6 +1,6 @@
|
||||||
{
|
{
|
||||||
"name": "@vladmandic/face-api",
|
"name": "@vladmandic/face-api",
|
||||||
"version": "0.7.4",
|
"version": "0.8.1",
|
||||||
"description": "JavaScript module for Face Detection and Face Recognition Using Tensorflow/JS",
|
"description": "JavaScript module for Face Detection and Face Recognition Using Tensorflow/JS",
|
||||||
"main": "dist/face-api.cjs",
|
"main": "dist/face-api.cjs",
|
||||||
"module": "dist/face-api.esm.js",
|
"module": "dist/face-api.esm.js",
|
||||||
|
|
|
@ -15,7 +15,7 @@ export class FaceFeatureExtractor extends NeuralNetwork {
|
||||||
throw new Error('FaceFeatureExtractor - load model before inference');
|
throw new Error('FaceFeatureExtractor - load model before inference');
|
||||||
}
|
}
|
||||||
return tf.tidy(() => {
|
return tf.tidy(() => {
|
||||||
const batchTensor = input.toBatchTensor(112, true);
|
const batchTensor = tf.cast(input.toBatchTensor(112, true), 'float32');
|
||||||
const meanRgb = [122.782, 117.001, 104.298];
|
const meanRgb = [122.782, 117.001, 104.298];
|
||||||
const normalized = normalize(batchTensor, meanRgb).div(tf.scalar(255));
|
const normalized = normalize(batchTensor, meanRgb).div(tf.scalar(255));
|
||||||
let out = denseBlock4(normalized, params.dense0, true);
|
let out = denseBlock4(normalized, params.dense0, true);
|
||||||
|
|
|
@ -1 +1 @@
|
||||||
{"version":3,"file":"FaceFeatureExtractor.js","sourceRoot":"","sources":["../../../src/faceFeatureExtractor/FaceFeatureExtractor.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,oCAAoC,CAAC;AAEzD,OAAO,EAAuB,UAAU,EAAE,MAAM,QAAQ,CAAC;AACzD,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACjD,OAAO,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAC;AACnC,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAC3C,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,EAAE,0BAA0B,EAAE,MAAM,8BAA8B,CAAC;AAG1E,MAAM,OAAO,oBAAqB,SAAQ,aAAyC;IAEjF;QACE,KAAK,CAAC,sBAAsB,CAAC,CAAA;IAC/B,CAAC;IAEM,YAAY,CAAC,KAAe;QAEjC,MAAM,EAAE,MAAM,EAAE,GAAG,IAAI,CAAA;QAEvB,IAAI,CAAC,MAAM,EAAE;YACX,MAAM,IAAI,KAAK,CAAC,oDAAoD,CAAC,CAAA;SACtE;QAED,OAAO,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE;YAClB,MAAM,WAAW,GAAG,KAAK,CAAC,aAAa,CAAC,GAAG,EAAE,IAAI,CAAC,CAAA;YAClD,MAAM,OAAO,GAAG,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC,CAAA;YAC3C,MAAM,UAAU,GAAG,SAAS,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,CAAgB,CAAA;YAErF,IAAI,GAAG,GAAG,WAAW,CAAC,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,CAAA;YACtD,GAAG,GAAG,WAAW,CAAC,GAAG,EAAE,MAAM,CAAC,MAAM,CAAC,CAAA;YACrC,GAAG,GAAG,WAAW,CAAC,GAAG,EAAE,MAAM,CAAC,MAAM,CAAC,CAAA;YACrC,GAAG,GAAG,WAAW,CAAC,GAAG,EAAE,MAAM,CAAC,MAAM,CAAC,CAAA;YACrC,GAAG,GAAG,EAAE,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,OAAO,CAAC,CAAA;YAE9C,OAAO,GAAG,CAAA;QACZ,CAAC,CAAC,CAAA;IACJ,CAAC;IAEM,KAAK,CAAC,OAAO,CAAC,KAAgB;QACnC,OAAO,IAAI,CAAC,YAAY,CAAC,MAAM,UAAU,CAAC,KAAK,CAAC,CAAC,CAAA;IACnD,CAAC;IAES,mBAAmB;QAC3B,OAAO,8BAA8B,CAAA;IACvC,CAAC;IAES,0BAA0B,CAAC,SAA4B;QAC/D,OAAO,0BAA0B,CAAC,SAAS,CAAC,CAAA;IAC9C,CAAC;IAES,aAAa,CAAC,OAAqB;QAC3C,OAAO,aAAa,CAAC,OAAO,CAAC,CAAA;IAC/B,CAAC;CACF"}
|
{"version":3,"file":"FaceFeatureExtractor.js","sourceRoot":"","sources":["../../../src/faceFeatureExtractor/FaceFeatureExtractor.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,oCAAoC,CAAC;AAEzD,OAAO,EAAuB,UAAU,EAAE,MAAM,QAAQ,CAAC;AACzD,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACjD,OAAO,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAC;AACnC,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAC3C,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,EAAE,0BAA0B,EAAE,MAAM,8BAA8B,CAAC;AAG1E,MAAM,OAAO,oBAAqB,SAAQ,aAAyC;IAEjF;QACE,KAAK,CAAC,sBAAsB,CAAC,CAAA;IAC/B,CAAC;IAEM,YAAY,CAAC,KAAe;QAEjC,MAAM,EAAE,MAAM,EAAE,GAAG,IAAI,CAAA;QAEvB,IAAI,CAAC,MAAM,EAAE;YACX,MAAM,IAAI,KAAK,CAAC,oDAAoD,CAAC,CAAA;SACtE;QAED,OAAO,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE;YAClB,MAAM,WAAW,GAAG,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,GAAG,EAAE,IAAI,CAAC,EAAE,SAAS,CAAC,CAAC;YACvE,MAAM,OAAO,GAAG,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC,CAAA;YAC3C,MAAM,UAAU,GAAG,SAAS,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,CAAgB,CAAA;YAErF,IAAI,GAAG,GAAG,WAAW,CAAC,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,CAAA;YACtD,GAAG,GAAG,WAAW,CAAC,GAAG,EAAE,MAAM,CAAC,MAAM,CAAC,CAAA;YACrC,GAAG,GAAG,WAAW,CAAC,GAAG,EAAE,MAAM,CAAC,MAAM,CAAC,CAAA;YACrC,GAAG,GAAG,WAAW,CAAC,GAAG,EAAE,MAAM,CAAC,MAAM,CAAC,CAAA;YACrC,GAAG,GAAG,EAAE,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,OAAO,CAAC,CAAA;YAE9C,OAAO,GAAG,CAAA;QACZ,CAAC,CAAC,CAAA;IACJ,CAAC;IAEM,KAAK,CAAC,OAAO,CAAC,KAAgB;QACnC,OAAO,IAAI,CAAC,YAAY,CAAC,MAAM,UAAU,CAAC,KAAK,CAAC,CAAC,CAAA;IACnD,CAAC;IAES,mBAAmB;QAC3B,OAAO,8BAA8B,CAAA;IACvC,CAAC;IAES,0BAA0B,CAAC,SAA4B;QAC/D,OAAO,0BAA0B,CAAC,SAAS,CAAC,CAAA;IAC9C,CAAC;IAES,aAAa,CAAC,OAAqB;QAC3C,OAAO,aAAa,CAAC,OAAO,CAAC,CAAA;IAC/B,CAAC;CACF"}
|
|
@ -15,7 +15,7 @@ export class TinyFaceFeatureExtractor extends NeuralNetwork {
|
||||||
throw new Error('TinyFaceFeatureExtractor - load model before inference');
|
throw new Error('TinyFaceFeatureExtractor - load model before inference');
|
||||||
}
|
}
|
||||||
return tf.tidy(() => {
|
return tf.tidy(() => {
|
||||||
const batchTensor = input.toBatchTensor(112, true);
|
const batchTensor = tf.cast(input.toBatchTensor(112, true), 'float32');
|
||||||
const meanRgb = [122.782, 117.001, 104.298];
|
const meanRgb = [122.782, 117.001, 104.298];
|
||||||
const normalized = normalize(batchTensor, meanRgb).div(tf.scalar(255));
|
const normalized = normalize(batchTensor, meanRgb).div(tf.scalar(255));
|
||||||
let out = denseBlock3(normalized, params.dense0, true);
|
let out = denseBlock3(normalized, params.dense0, true);
|
||||||
|
|
|
@ -1 +1 @@
|
||||||
{"version":3,"file":"TinyFaceFeatureExtractor.js","sourceRoot":"","sources":["../../../src/faceFeatureExtractor/TinyFaceFeatureExtractor.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,oCAAoC,CAAC;AAEzD,OAAO,EAAuB,UAAU,EAAE,MAAM,QAAQ,CAAC;AACzD,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACjD,OAAO,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAC;AACnC,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAC3C,OAAO,EAAE,8BAA8B,EAAE,MAAM,kCAAkC,CAAC;AAClF,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAGxD,MAAM,OAAO,wBAAyB,SAAQ,aAA6C;IAEzF;QACE,KAAK,CAAC,0BAA0B,CAAC,CAAA;IACnC,CAAC;IAEM,YAAY,CAAC,KAAe;QAEjC,MAAM,EAAE,MAAM,EAAE,GAAG,IAAI,CAAA;QAEvB,IAAI,CAAC,MAAM,EAAE;YACX,MAAM,IAAI,KAAK,CAAC,wDAAwD,CAAC,CAAA;SAC1E;QAED,OAAO,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE;YAClB,MAAM,WAAW,GAAG,KAAK,CAAC,aAAa,CAAC,GAAG,EAAE,IAAI,CAAC,CAAA;YAClD,MAAM,OAAO,GAAG,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC,CAAA;YAC3C,MAAM,UAAU,GAAG,SAAS,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,CAAgB,CAAA;YAErF,IAAI,GAAG,GAAG,WAAW,CAAC,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,CAAA;YACtD,GAAG,GAAG,WAAW,CAAC,GAAG,EAAE,MAAM,CAAC,MAAM,CAAC,CAAA;YACrC,GAAG,GAAG,WAAW,CAAC,GAAG,EAAE,MAAM,CAAC,MAAM,CAAC,CAAA;YACrC,GAAG,GAAG,EAAE,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,OAAO,CAAC,CAAA;YAEhD,OAAO,GAAG,CAAA;QACZ,CAAC,CAAC,CAAA;IACJ,CAAC;IAEM,KAAK,CAAC,OAAO,CAAC,KAAgB;QACnC,OAAO,IAAI,CAAC,YAAY,CAAC,MAAM,UAAU,CAAC,KAAK,CAAC,CAAC,CAAA;IACnD,CAAC;IAES,mBAAmB;QAC3B,OAAO,mCAAmC,CAAA;IAC5C,CAAC;IAES,0BAA0B,CAAC,SAA4B;QAC/D,OAAO,8BAA8B,CAAC,SAAS,CAAC,CAAA;IAClD,CAAC;IAES,aAAa,CAAC,OAAqB;QAC3C,OAAO,iBAAiB,CAAC,OAAO,CAAC,CAAA;IACnC,CAAC;CACF"}
|
{"version":3,"file":"TinyFaceFeatureExtractor.js","sourceRoot":"","sources":["../../../src/faceFeatureExtractor/TinyFaceFeatureExtractor.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,oCAAoC,CAAC;AAEzD,OAAO,EAAuB,UAAU,EAAE,MAAM,QAAQ,CAAC;AACzD,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACjD,OAAO,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAC;AACnC,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAC3C,OAAO,EAAE,8BAA8B,EAAE,MAAM,kCAAkC,CAAC;AAClF,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAGxD,MAAM,OAAO,wBAAyB,SAAQ,aAA6C;IAEzF;QACE,KAAK,CAAC,0BAA0B,CAAC,CAAA;IACnC,CAAC;IAEM,YAAY,CAAC,KAAe;QAEjC,MAAM,EAAE,MAAM,EAAE,GAAG,IAAI,CAAA;QAEvB,IAAI,CAAC,MAAM,EAAE;YACX,MAAM,IAAI,KAAK,CAAC,wDAAwD,CAAC,CAAA;SAC1E;QAED,OAAO,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE;YAClB,MAAM,WAAW,GAAG,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,GAAG,EAAE,IAAI,CAAC,EAAE,SAAS,CAAC,CAAC;YACvE,MAAM,OAAO,GAAG,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC,CAAA;YAC3C,MAAM,UAAU,GAAG,SAAS,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,CAAgB,CAAA;YAErF,IAAI,GAAG,GAAG,WAAW,CAAC,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,CAAA;YACtD,GAAG,GAAG,WAAW,CAAC,GAAG,EAAE,MAAM,CAAC,MAAM,CAAC,CAAA;YACrC,GAAG,GAAG,WAAW,CAAC,GAAG,EAAE,MAAM,CAAC,MAAM,CAAC,CAAA;YACrC,GAAG,GAAG,EAAE,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,OAAO,CAAC,CAAA;YAEhD,OAAO,GAAG,CAAA;QACZ,CAAC,CAAC,CAAA;IACJ,CAAC;IAEM,KAAK,CAAC,OAAO,CAAC,KAAgB;QACnC,OAAO,IAAI,CAAC,YAAY,CAAC,MAAM,UAAU,CAAC,KAAK,CAAC,CAAC,CAAA;IACnD,CAAC;IAES,mBAAmB;QAC3B,OAAO,mCAAmC,CAAA;IAC5C,CAAC;IAES,0BAA0B,CAAC,SAA4B;QAC/D,OAAO,8BAA8B,CAAC,SAAS,CAAC,CAAA;IAClD,CAAC;IAES,aAAa,CAAC,OAAqB;QAC3C,OAAO,iBAAiB,CAAC,OAAO,CAAC,CAAA;IACnC,CAAC;CACF"}
|
|
@ -15,10 +15,7 @@ export class FaceLandmark68NetBase extends FaceProcessor {
|
||||||
});
|
});
|
||||||
const batchSize = inputDimensions.length;
|
const batchSize = inputDimensions.length;
|
||||||
return tf.tidy(() => {
|
return tf.tidy(() => {
|
||||||
const createInterleavedTensor = (fillX, fillY) => tf.stack([
|
const createInterleavedTensor = (fillX, fillY) => tf.stack([tf.fill([68], fillX, 'float32'), tf.fill([68], fillY, 'float32')], 1).as2D(1, 136).as1D();
|
||||||
tf.fill([68], fillX),
|
|
||||||
tf.fill([68], fillY)
|
|
||||||
], 1).as2D(1, 136).as1D();
|
|
||||||
const getPadding = (batchIdx, cond) => {
|
const getPadding = (batchIdx, cond) => {
|
||||||
const { width, height } = inputDimensions[batchIdx];
|
const { width, height } = inputDimensions[batchIdx];
|
||||||
return cond(width, height) ? Math.abs(width - height) / 2 : 0;
|
return cond(width, height) ? Math.abs(width - height) / 2 : 0;
|
||||||
|
@ -26,7 +23,7 @@ export class FaceLandmark68NetBase extends FaceProcessor {
|
||||||
const getPaddingX = (batchIdx) => getPadding(batchIdx, (w, h) => w < h);
|
const getPaddingX = (batchIdx) => getPadding(batchIdx, (w, h) => w < h);
|
||||||
const getPaddingY = (batchIdx) => getPadding(batchIdx, (w, h) => h < w);
|
const getPaddingY = (batchIdx) => getPadding(batchIdx, (w, h) => h < w);
|
||||||
const landmarkTensors = output
|
const landmarkTensors = output
|
||||||
.mul(tf.fill([batchSize, 136], inputSize))
|
.mul(tf.fill([batchSize, 136], inputSize, 'float32'))
|
||||||
.sub(tf.stack(Array.from(Array(batchSize), (_, batchIdx) => createInterleavedTensor(getPaddingX(batchIdx), getPaddingY(batchIdx)))))
|
.sub(tf.stack(Array.from(Array(batchSize), (_, batchIdx) => createInterleavedTensor(getPaddingX(batchIdx), getPaddingY(batchIdx)))))
|
||||||
.div(tf.stack(Array.from(Array(batchSize), (_, batchIdx) => createInterleavedTensor(inputDimensions[batchIdx].width, inputDimensions[batchIdx].height))));
|
.div(tf.stack(Array.from(Array(batchSize), (_, batchIdx) => createInterleavedTensor(inputDimensions[batchIdx].width, inputDimensions[batchIdx].height))));
|
||||||
return landmarkTensors;
|
return landmarkTensors;
|
||||||
|
|
|
@ -1 +1 @@
|
||||||
{"version":3,"file":"FaceLandmark68NetBase.js","sourceRoot":"","sources":["../../../src/faceLandmarkNet/FaceLandmark68NetBase.ts"],"names":[],"mappings":"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"}
|
{"version":3,"file":"FaceLandmark68NetBase.js","sourceRoot":"","sources":["../../../src/faceLandmarkNet/FaceLandmark68NetBase.ts"],"names":[],"mappings":"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"}
|
|
@ -2,9 +2,9 @@ import * as tf from '@tensorflow/tfjs/dist/tf.es2017.js';
|
||||||
export function normalize(x, meanRgb) {
|
export function normalize(x, meanRgb) {
|
||||||
return tf.tidy(() => {
|
return tf.tidy(() => {
|
||||||
const [r, g, b] = meanRgb;
|
const [r, g, b] = meanRgb;
|
||||||
const avg_r = tf.fill([...x.shape.slice(0, 3), 1], r);
|
const avg_r = tf.fill([...x.shape.slice(0, 3), 1], r, 'float32');
|
||||||
const avg_g = tf.fill([...x.shape.slice(0, 3), 1], g);
|
const avg_g = tf.fill([...x.shape.slice(0, 3), 1], g, 'float32');
|
||||||
const avg_b = tf.fill([...x.shape.slice(0, 3), 1], b);
|
const avg_b = tf.fill([...x.shape.slice(0, 3), 1], b, 'float32');
|
||||||
const avg_rgb = tf.concat([avg_r, avg_g, avg_b], 3);
|
const avg_rgb = tf.concat([avg_r, avg_g, avg_b], 3);
|
||||||
return tf.sub(x, avg_rgb);
|
return tf.sub(x, avg_rgb);
|
||||||
});
|
});
|
||||||
|
|
|
@ -1 +1 @@
|
||||||
{"version":3,"file":"normalize.js","sourceRoot":"","sources":["../../../src/ops/normalize.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,oCAAoC,CAAC;AAEzD,MAAM,UAAU,SAAS,CAAC,CAAc,EAAE,OAAiB;IACzD,OAAO,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE;QAClB,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,GAAG,OAAO,CAAA;QACzB,MAAM,KAAK,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA;QACrD,MAAM,KAAK,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA;QACrD,MAAM,KAAK,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA;QACrD,MAAM,OAAO,GAAG,EAAE,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC,EAAE,CAAC,CAAC,CAAA;QAEnD,OAAO,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,CAAC,CAAA;IAC3B,CAAC,CAAC,CAAA;AACJ,CAAC"}
|
{"version":3,"file":"normalize.js","sourceRoot":"","sources":["../../../src/ops/normalize.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,oCAAoC,CAAC;AAEzD,MAAM,UAAU,SAAS,CAAC,CAAc,EAAE,OAAiB;IACzD,OAAO,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE;QAClB,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,GAAG,OAAO,CAAA;QACzB,MAAM,KAAK,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,SAAS,CAAC,CAAA;QAChE,MAAM,KAAK,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,SAAS,CAAC,CAAA;QAChE,MAAM,KAAK,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,SAAS,CAAC,CAAA;QAChE,MAAM,OAAO,GAAG,EAAE,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC,EAAE,CAAC,CAAC,CAAA;QAEnD,OAAO,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,CAAC,CAAA;IAC3B,CAAC,CAAC,CAAA;AACJ,CAAC"}
|
|
@ -19,7 +19,7 @@ export function padToSquare(imgTensor, isCenterImage = false) {
|
||||||
const createPaddingTensor = (paddingAmount) => {
|
const createPaddingTensor = (paddingAmount) => {
|
||||||
const paddingTensorShape = imgTensor.shape.slice();
|
const paddingTensorShape = imgTensor.shape.slice();
|
||||||
paddingTensorShape[paddingAxis] = paddingAmount;
|
paddingTensorShape[paddingAxis] = paddingAmount;
|
||||||
return tf.fill(paddingTensorShape, 0);
|
return tf.fill(paddingTensorShape, 0, 'float32');
|
||||||
};
|
};
|
||||||
const paddingTensorAppend = createPaddingTensor(paddingAmount);
|
const paddingTensorAppend = createPaddingTensor(paddingAmount);
|
||||||
const remainingPaddingAmount = dimDiff - paddingTensorAppend.shape[paddingAxis];
|
const remainingPaddingAmount = dimDiff - paddingTensorAppend.shape[paddingAxis];
|
||||||
|
|
|
@ -1 +1 @@
|
||||||
{"version":3,"file":"padToSquare.js","sourceRoot":"","sources":["../../../src/ops/padToSquare.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,oCAAoC,CAAC;AAEzD;;;;;;;GAOG;AACH,MAAM,UAAU,WAAW,CACzB,SAAsB,EACtB,gBAAyB,KAAK;IAE9B,OAAO,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE;QAElB,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,GAAG,SAAS,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAA;QAChD,IAAI,MAAM,KAAK,KAAK,EAAE;YACpB,OAAO,SAAS,CAAA;SACjB;QAED,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,GAAG,KAAK,CAAC,CAAA;QACxC,MAAM,aAAa,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,GAAG,CAAC,aAAa,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;QACrE,MAAM,WAAW,GAAG,MAAM,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;QAE1C,MAAM,mBAAmB,GAAG,CAAC,aAAqB,EAAa,EAAE;YAC/D,MAAM,kBAAkB,GAAG,SAAS,CAAC,KAAK,CAAC,KAAK,EAAE,CAAA;YAClD,kBAAkB,CAAC,WAAW,CAAC,GAAG,aAAa,CAAA;YAC/C,OAAO,EAAE,CAAC,IAAI,CAAC,kBAAkB,EAAE,CAAC,CAAC,CAAA;QACvC,CAAC,CAAA;QAED,MAAM,mBAAmB,GAAG,mBAAmB,CAAC,aAAa,CAAC,CAAA;QAC9D,MAAM,sBAAsB,GAAG,OAAO,GAAI,mBAAmB,CAAC,KAAK,CAAC,WAAW,CAAY,CAAA;QAE3F,MAAM,oBAAoB,GAAG,aAAa,IAAI,sBAAsB;YAClE,CAAC,CAAC,mBAAmB,CAAC,sBAAsB,CAAC;YAC7C,CAAC,CAAC,IAAI,CAAA;QAER,MAAM,cAAc,GAAG;YACrB,oBAAoB;YACpB,SAAS;YACT,mBAAmB;SACpB;aACE,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;YACjB,uDAAuD;aACtD,GAAG,CAAC,CAAC,CAAY,EAAE,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,EAAE,SAAS,CAAC,CAAkB,CAAA;QAChE,OAAO,EAAE,CAAC,MAAM,CAAC,cAAc,EAAE,WAAW,CAAC,CAAA;IAE/C,CAAC,CAAC,CAAA;AACJ,CAAC"}
|
{"version":3,"file":"padToSquare.js","sourceRoot":"","sources":["../../../src/ops/padToSquare.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,oCAAoC,CAAC;AAEzD;;;;;;;GAOG;AACH,MAAM,UAAU,WAAW,CACzB,SAAsB,EACtB,gBAAyB,KAAK;IAE9B,OAAO,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE;QAElB,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,GAAG,SAAS,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAA;QAChD,IAAI,MAAM,KAAK,KAAK,EAAE;YACpB,OAAO,SAAS,CAAA;SACjB;QAED,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,GAAG,KAAK,CAAC,CAAA;QACxC,MAAM,aAAa,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,GAAG,CAAC,aAAa,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;QACrE,MAAM,WAAW,GAAG,MAAM,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;QAE1C,MAAM,mBAAmB,GAAG,CAAC,aAAqB,EAAa,EAAE;YAC/D,MAAM,kBAAkB,GAAG,SAAS,CAAC,KAAK,CAAC,KAAK,EAAE,CAAA;YAClD,kBAAkB,CAAC,WAAW,CAAC,GAAG,aAAa,CAAA;YAC/C,OAAO,EAAE,CAAC,IAAI,CAAC,kBAAkB,EAAE,CAAC,EAAE,SAAS,CAAC,CAAA;QAClD,CAAC,CAAA;QAED,MAAM,mBAAmB,GAAG,mBAAmB,CAAC,aAAa,CAAC,CAAA;QAC9D,MAAM,sBAAsB,GAAG,OAAO,GAAI,mBAAmB,CAAC,KAAK,CAAC,WAAW,CAAY,CAAA;QAE3F,MAAM,oBAAoB,GAAG,aAAa,IAAI,sBAAsB;YAClE,CAAC,CAAC,mBAAmB,CAAC,sBAAsB,CAAC;YAC7C,CAAC,CAAC,IAAI,CAAA;QAER,MAAM,cAAc,GAAG;YACrB,oBAAoB;YACpB,SAAS;YACT,mBAAmB;SACpB;aACE,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;YACjB,uDAAuD;aACtD,GAAG,CAAC,CAAC,CAAY,EAAE,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,EAAE,SAAS,CAAC,CAAkB,CAAA;QAChE,OAAO,EAAE,CAAC,MAAM,CAAC,cAAc,EAAE,WAAW,CAAC,CAAA;IAE/C,CAAC,CAAC,CAAA;AACJ,CAAC"}
|
|
@ -35,7 +35,7 @@ export class TinyXception extends NeuralNetwork {
|
||||||
throw new Error('TinyXception - load model before inference');
|
throw new Error('TinyXception - load model before inference');
|
||||||
}
|
}
|
||||||
return tf.tidy(() => {
|
return tf.tidy(() => {
|
||||||
const batchTensor = input.toBatchTensor(112, true);
|
const batchTensor = tf.cast(input.toBatchTensor(112, true), 'float32');
|
||||||
const meanRgb = [122.782, 117.001, 104.298];
|
const meanRgb = [122.782, 117.001, 104.298];
|
||||||
const normalized = normalize(batchTensor, meanRgb).div(tf.scalar(256));
|
const normalized = normalize(batchTensor, meanRgb).div(tf.scalar(256));
|
||||||
let out = tf.relu(conv(normalized, params.entry_flow.conv_in, [2, 2]));
|
let out = tf.relu(conv(normalized, params.entry_flow.conv_in, [2, 2]));
|
||||||
|
|
|
@ -1 +1 @@
|
||||||
{"version":3,"file":"TinyXception.js","sourceRoot":"","sources":["../../../src/xception/TinyXception.ts"],"names":[],"mappings":"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"}
|
{"version":3,"file":"TinyXception.js","sourceRoot":"","sources":["../../../src/xception/TinyXception.ts"],"names":[],"mappings":"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"}
|
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
|
@ -440,9 +440,9 @@ const tf2 = __toModule(require("@tensorflow/tfjs/dist/tf.es2017.js"));
|
||||||
function normalize(x, meanRgb) {
|
function normalize(x, meanRgb) {
|
||||||
return tf2.tidy(() => {
|
return tf2.tidy(() => {
|
||||||
const [r, g, b] = meanRgb;
|
const [r, g, b] = meanRgb;
|
||||||
const avg_r = tf2.fill([...x.shape.slice(0, 3), 1], r);
|
const avg_r = tf2.fill([...x.shape.slice(0, 3), 1], r, "float32");
|
||||||
const avg_g = tf2.fill([...x.shape.slice(0, 3), 1], g);
|
const avg_g = tf2.fill([...x.shape.slice(0, 3), 1], g, "float32");
|
||||||
const avg_b = tf2.fill([...x.shape.slice(0, 3), 1], b);
|
const avg_b = tf2.fill([...x.shape.slice(0, 3), 1], b, "float32");
|
||||||
const avg_rgb = tf2.concat([avg_r, avg_g, avg_b], 3);
|
const avg_rgb = tf2.concat([avg_r, avg_g, avg_b], 3);
|
||||||
return tf2.sub(x, avg_rgb);
|
return tf2.sub(x, avg_rgb);
|
||||||
});
|
});
|
||||||
|
@ -462,7 +462,7 @@ function padToSquare(imgTensor, isCenterImage = false) {
|
||||||
const createPaddingTensor = (paddingAmount2) => {
|
const createPaddingTensor = (paddingAmount2) => {
|
||||||
const paddingTensorShape = imgTensor.shape.slice();
|
const paddingTensorShape = imgTensor.shape.slice();
|
||||||
paddingTensorShape[paddingAxis] = paddingAmount2;
|
paddingTensorShape[paddingAxis] = paddingAmount2;
|
||||||
return tf3.fill(paddingTensorShape, 0);
|
return tf3.fill(paddingTensorShape, 0, "float32");
|
||||||
};
|
};
|
||||||
const paddingTensorAppend = createPaddingTensor(paddingAmount);
|
const paddingTensorAppend = createPaddingTensor(paddingAmount);
|
||||||
const remainingPaddingAmount = dimDiff - paddingTensorAppend.shape[paddingAxis];
|
const remainingPaddingAmount = dimDiff - paddingTensorAppend.shape[paddingAxis];
|
||||||
|
@ -1716,7 +1716,7 @@ class FaceFeatureExtractor extends NeuralNetwork {
|
||||||
throw new Error("FaceFeatureExtractor - load model before inference");
|
throw new Error("FaceFeatureExtractor - load model before inference");
|
||||||
}
|
}
|
||||||
return tf15.tidy(() => {
|
return tf15.tidy(() => {
|
||||||
const batchTensor = input.toBatchTensor(112, true);
|
const batchTensor = tf15.cast(input.toBatchTensor(112, true), "float32");
|
||||||
const meanRgb = [122.782, 117.001, 104.298];
|
const meanRgb = [122.782, 117.001, 104.298];
|
||||||
const normalized = normalize(batchTensor, meanRgb).div(tf15.scalar(255));
|
const normalized = normalize(batchTensor, meanRgb).div(tf15.scalar(255));
|
||||||
let out = denseBlock4(normalized, params.dense0, true);
|
let out = denseBlock4(normalized, params.dense0, true);
|
||||||
|
@ -2153,7 +2153,7 @@ class TinyXception extends NeuralNetwork {
|
||||||
throw new Error("TinyXception - load model before inference");
|
throw new Error("TinyXception - load model before inference");
|
||||||
}
|
}
|
||||||
return tf19.tidy(() => {
|
return tf19.tidy(() => {
|
||||||
const batchTensor = input.toBatchTensor(112, true);
|
const batchTensor = tf19.cast(input.toBatchTensor(112, true), "float32");
|
||||||
const meanRgb = [122.782, 117.001, 104.298];
|
const meanRgb = [122.782, 117.001, 104.298];
|
||||||
const normalized = normalize(batchTensor, meanRgb).div(tf19.scalar(256));
|
const normalized = normalize(batchTensor, meanRgb).div(tf19.scalar(256));
|
||||||
let out = tf19.relu(conv(normalized, params.entry_flow.conv_in, [2, 2]));
|
let out = tf19.relu(conv(normalized, params.entry_flow.conv_in, [2, 2]));
|
||||||
|
@ -2325,17 +2325,14 @@ class FaceLandmark68NetBase extends FaceProcessor {
|
||||||
});
|
});
|
||||||
const batchSize = inputDimensions.length;
|
const batchSize = inputDimensions.length;
|
||||||
return tf21.tidy(() => {
|
return tf21.tidy(() => {
|
||||||
const createInterleavedTensor = (fillX, fillY) => tf21.stack([
|
const createInterleavedTensor = (fillX, fillY) => tf21.stack([tf21.fill([68], fillX, "float32"), tf21.fill([68], fillY, "float32")], 1).as2D(1, 136).as1D();
|
||||||
tf21.fill([68], fillX),
|
|
||||||
tf21.fill([68], fillY)
|
|
||||||
], 1).as2D(1, 136).as1D();
|
|
||||||
const getPadding = (batchIdx, cond) => {
|
const getPadding = (batchIdx, cond) => {
|
||||||
const {width, height} = inputDimensions[batchIdx];
|
const {width, height} = inputDimensions[batchIdx];
|
||||||
return cond(width, height) ? Math.abs(width - height) / 2 : 0;
|
return cond(width, height) ? Math.abs(width - height) / 2 : 0;
|
||||||
};
|
};
|
||||||
const getPaddingX = (batchIdx) => getPadding(batchIdx, (w, h) => w < h);
|
const getPaddingX = (batchIdx) => getPadding(batchIdx, (w, h) => w < h);
|
||||||
const getPaddingY = (batchIdx) => getPadding(batchIdx, (w, h) => h < w);
|
const getPaddingY = (batchIdx) => getPadding(batchIdx, (w, h) => h < w);
|
||||||
const landmarkTensors = output.mul(tf21.fill([batchSize, 136], inputSize)).sub(tf21.stack(Array.from(Array(batchSize), (_, batchIdx) => createInterleavedTensor(getPaddingX(batchIdx), getPaddingY(batchIdx))))).div(tf21.stack(Array.from(Array(batchSize), (_, batchIdx) => createInterleavedTensor(inputDimensions[batchIdx].width, inputDimensions[batchIdx].height))));
|
const landmarkTensors = output.mul(tf21.fill([batchSize, 136], inputSize, "float32")).sub(tf21.stack(Array.from(Array(batchSize), (_, batchIdx) => createInterleavedTensor(getPaddingX(batchIdx), getPaddingY(batchIdx))))).div(tf21.stack(Array.from(Array(batchSize), (_, batchIdx) => createInterleavedTensor(inputDimensions[batchIdx].width, inputDimensions[batchIdx].height))));
|
||||||
return landmarkTensors;
|
return landmarkTensors;
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
@ -2430,7 +2427,7 @@ class TinyFaceFeatureExtractor extends NeuralNetwork {
|
||||||
throw new Error("TinyFaceFeatureExtractor - load model before inference");
|
throw new Error("TinyFaceFeatureExtractor - load model before inference");
|
||||||
}
|
}
|
||||||
return tf22.tidy(() => {
|
return tf22.tidy(() => {
|
||||||
const batchTensor = input.toBatchTensor(112, true);
|
const batchTensor = tf22.cast(input.toBatchTensor(112, true), "float32");
|
||||||
const meanRgb = [122.782, 117.001, 104.298];
|
const meanRgb = [122.782, 117.001, 104.298];
|
||||||
const normalized = normalize(batchTensor, meanRgb).div(tf22.scalar(255));
|
const normalized = normalize(batchTensor, meanRgb).div(tf22.scalar(255));
|
||||||
let out = denseBlock3(normalized, params.dense0, true);
|
let out = denseBlock3(normalized, params.dense0, true);
|
||||||
|
@ -4292,7 +4289,7 @@ function resizeResults(results, dimensions) {
|
||||||
}
|
}
|
||||||
|
|
||||||
// package.json
|
// package.json
|
||||||
var version = "0.7.4";
|
var version = "0.8.1";
|
||||||
|
|
||||||
// src/index.ts
|
// src/index.ts
|
||||||
__export(exports, {
|
__export(exports, {
|
||||||
|
|
File diff suppressed because one or more lines are too long
|
@ -447,9 +447,9 @@ import {
|
||||||
function normalize(x, meanRgb) {
|
function normalize(x, meanRgb) {
|
||||||
return tidy(() => {
|
return tidy(() => {
|
||||||
const [r, g, b] = meanRgb;
|
const [r, g, b] = meanRgb;
|
||||||
const avg_r = fill([...x.shape.slice(0, 3), 1], r);
|
const avg_r = fill([...x.shape.slice(0, 3), 1], r, "float32");
|
||||||
const avg_g = fill([...x.shape.slice(0, 3), 1], g);
|
const avg_g = fill([...x.shape.slice(0, 3), 1], g, "float32");
|
||||||
const avg_b = fill([...x.shape.slice(0, 3), 1], b);
|
const avg_b = fill([...x.shape.slice(0, 3), 1], b, "float32");
|
||||||
const avg_rgb = concat([avg_r, avg_g, avg_b], 3);
|
const avg_rgb = concat([avg_r, avg_g, avg_b], 3);
|
||||||
return sub(x, avg_rgb);
|
return sub(x, avg_rgb);
|
||||||
});
|
});
|
||||||
|
@ -474,7 +474,7 @@ function padToSquare(imgTensor, isCenterImage = false) {
|
||||||
const createPaddingTensor = (paddingAmount2) => {
|
const createPaddingTensor = (paddingAmount2) => {
|
||||||
const paddingTensorShape = imgTensor.shape.slice();
|
const paddingTensorShape = imgTensor.shape.slice();
|
||||||
paddingTensorShape[paddingAxis] = paddingAmount2;
|
paddingTensorShape[paddingAxis] = paddingAmount2;
|
||||||
return fill2(paddingTensorShape, 0);
|
return fill2(paddingTensorShape, 0, "float32");
|
||||||
};
|
};
|
||||||
const paddingTensorAppend = createPaddingTensor(paddingAmount);
|
const paddingTensorAppend = createPaddingTensor(paddingAmount);
|
||||||
const remainingPaddingAmount = dimDiff - paddingTensorAppend.shape[paddingAxis];
|
const remainingPaddingAmount = dimDiff - paddingTensorAppend.shape[paddingAxis];
|
||||||
|
@ -1762,6 +1762,7 @@ function extractParamsFromWeigthMap(weightMap) {
|
||||||
// src/faceFeatureExtractor/FaceFeatureExtractor.ts
|
// src/faceFeatureExtractor/FaceFeatureExtractor.ts
|
||||||
import {
|
import {
|
||||||
avgPool,
|
avgPool,
|
||||||
|
cast as cast3,
|
||||||
scalar,
|
scalar,
|
||||||
tidy as tidy9
|
tidy as tidy9
|
||||||
} from "@tensorflow/tfjs/dist/tf.es2017.js";
|
} from "@tensorflow/tfjs/dist/tf.es2017.js";
|
||||||
|
@ -1775,7 +1776,7 @@ class FaceFeatureExtractor extends NeuralNetwork {
|
||||||
throw new Error("FaceFeatureExtractor - load model before inference");
|
throw new Error("FaceFeatureExtractor - load model before inference");
|
||||||
}
|
}
|
||||||
return tidy9(() => {
|
return tidy9(() => {
|
||||||
const batchTensor = input.toBatchTensor(112, true);
|
const batchTensor = cast3(input.toBatchTensor(112, true), "float32");
|
||||||
const meanRgb = [122.782, 117.001, 104.298];
|
const meanRgb = [122.782, 117.001, 104.298];
|
||||||
const normalized = normalize(batchTensor, meanRgb).div(scalar(255));
|
const normalized = normalize(batchTensor, meanRgb).div(scalar(255));
|
||||||
let out = denseBlock4(normalized, params.dense0, true);
|
let out = denseBlock4(normalized, params.dense0, true);
|
||||||
|
@ -2194,6 +2195,7 @@ function extractParamsFromWeigthMap5(weightMap, numMainBlocks) {
|
||||||
// src/xception/TinyXception.ts
|
// src/xception/TinyXception.ts
|
||||||
import {
|
import {
|
||||||
add as add5,
|
add as add5,
|
||||||
|
cast as cast4,
|
||||||
conv2d as conv2d3,
|
conv2d as conv2d3,
|
||||||
maxPool,
|
maxPool,
|
||||||
relu as relu3,
|
relu as relu3,
|
||||||
|
@ -2229,7 +2231,7 @@ class TinyXception extends NeuralNetwork {
|
||||||
throw new Error("TinyXception - load model before inference");
|
throw new Error("TinyXception - load model before inference");
|
||||||
}
|
}
|
||||||
return tidy13(() => {
|
return tidy13(() => {
|
||||||
const batchTensor = input.toBatchTensor(112, true);
|
const batchTensor = cast4(input.toBatchTensor(112, true), "float32");
|
||||||
const meanRgb = [122.782, 117.001, 104.298];
|
const meanRgb = [122.782, 117.001, 104.298];
|
||||||
const normalized = normalize(batchTensor, meanRgb).div(scalar2(256));
|
const normalized = normalize(batchTensor, meanRgb).div(scalar2(256));
|
||||||
let out = relu3(conv(normalized, params.entry_flow.conv_in, [2, 2]));
|
let out = relu3(conv(normalized, params.entry_flow.conv_in, [2, 2]));
|
||||||
|
@ -2411,17 +2413,14 @@ class FaceLandmark68NetBase extends FaceProcessor {
|
||||||
});
|
});
|
||||||
const batchSize = inputDimensions.length;
|
const batchSize = inputDimensions.length;
|
||||||
return tidy15(() => {
|
return tidy15(() => {
|
||||||
const createInterleavedTensor = (fillX, fillY) => stack2([
|
const createInterleavedTensor = (fillX, fillY) => stack2([fill3([68], fillX, "float32"), fill3([68], fillY, "float32")], 1).as2D(1, 136).as1D();
|
||||||
fill3([68], fillX),
|
|
||||||
fill3([68], fillY)
|
|
||||||
], 1).as2D(1, 136).as1D();
|
|
||||||
const getPadding = (batchIdx, cond) => {
|
const getPadding = (batchIdx, cond) => {
|
||||||
const {width, height} = inputDimensions[batchIdx];
|
const {width, height} = inputDimensions[batchIdx];
|
||||||
return cond(width, height) ? Math.abs(width - height) / 2 : 0;
|
return cond(width, height) ? Math.abs(width - height) / 2 : 0;
|
||||||
};
|
};
|
||||||
const getPaddingX = (batchIdx) => getPadding(batchIdx, (w, h) => w < h);
|
const getPaddingX = (batchIdx) => getPadding(batchIdx, (w, h) => w < h);
|
||||||
const getPaddingY = (batchIdx) => getPadding(batchIdx, (w, h) => h < w);
|
const getPaddingY = (batchIdx) => getPadding(batchIdx, (w, h) => h < w);
|
||||||
const landmarkTensors = output.mul(fill3([batchSize, 136], inputSize)).sub(stack2(Array.from(Array(batchSize), (_, batchIdx) => createInterleavedTensor(getPaddingX(batchIdx), getPaddingY(batchIdx))))).div(stack2(Array.from(Array(batchSize), (_, batchIdx) => createInterleavedTensor(inputDimensions[batchIdx].width, inputDimensions[batchIdx].height))));
|
const landmarkTensors = output.mul(fill3([batchSize, 136], inputSize, "float32")).sub(stack2(Array.from(Array(batchSize), (_, batchIdx) => createInterleavedTensor(getPaddingX(batchIdx), getPaddingY(batchIdx))))).div(stack2(Array.from(Array(batchSize), (_, batchIdx) => createInterleavedTensor(inputDimensions[batchIdx].width, inputDimensions[batchIdx].height))));
|
||||||
return landmarkTensors;
|
return landmarkTensors;
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
@ -2507,6 +2506,7 @@ function extractParamsTiny(weights) {
|
||||||
// src/faceFeatureExtractor/TinyFaceFeatureExtractor.ts
|
// src/faceFeatureExtractor/TinyFaceFeatureExtractor.ts
|
||||||
import {
|
import {
|
||||||
avgPool as avgPool3,
|
avgPool as avgPool3,
|
||||||
|
cast as cast5,
|
||||||
scalar as scalar3,
|
scalar as scalar3,
|
||||||
tidy as tidy16
|
tidy as tidy16
|
||||||
} from "@tensorflow/tfjs/dist/tf.es2017.js";
|
} from "@tensorflow/tfjs/dist/tf.es2017.js";
|
||||||
|
@ -2520,7 +2520,7 @@ class TinyFaceFeatureExtractor extends NeuralNetwork {
|
||||||
throw new Error("TinyFaceFeatureExtractor - load model before inference");
|
throw new Error("TinyFaceFeatureExtractor - load model before inference");
|
||||||
}
|
}
|
||||||
return tidy16(() => {
|
return tidy16(() => {
|
||||||
const batchTensor = input.toBatchTensor(112, true);
|
const batchTensor = cast5(input.toBatchTensor(112, true), "float32");
|
||||||
const meanRgb = [122.782, 117.001, 104.298];
|
const meanRgb = [122.782, 117.001, 104.298];
|
||||||
const normalized = normalize(batchTensor, meanRgb).div(scalar3(255));
|
const normalized = normalize(batchTensor, meanRgb).div(scalar3(255));
|
||||||
let out = denseBlock3(normalized, params.dense0, true);
|
let out = denseBlock3(normalized, params.dense0, true);
|
||||||
|
@ -2804,7 +2804,7 @@ function residualDown(x, params) {
|
||||||
|
|
||||||
// src/faceRecognitionNet/FaceRecognitionNet.ts
|
// src/faceRecognitionNet/FaceRecognitionNet.ts
|
||||||
import {
|
import {
|
||||||
cast as cast3,
|
cast as cast6,
|
||||||
matMul as matMul2,
|
matMul as matMul2,
|
||||||
maxPool as maxPool2,
|
maxPool as maxPool2,
|
||||||
scalar as scalar4,
|
scalar as scalar4,
|
||||||
|
@ -2821,7 +2821,7 @@ class FaceRecognitionNet extends NeuralNetwork {
|
||||||
throw new Error("FaceRecognitionNet - load model before inference");
|
throw new Error("FaceRecognitionNet - load model before inference");
|
||||||
}
|
}
|
||||||
return tidy18(() => {
|
return tidy18(() => {
|
||||||
const batchTensor = cast3(input.toBatchTensor(150, true), "float32");
|
const batchTensor = cast6(input.toBatchTensor(150, true), "float32");
|
||||||
const meanRgb = [122.782, 117.001, 104.298];
|
const meanRgb = [122.782, 117.001, 104.298];
|
||||||
const normalized = normalize(batchTensor, meanRgb).div(scalar4(256));
|
const normalized = normalize(batchTensor, meanRgb).div(scalar4(256));
|
||||||
let out = convDown(normalized, params.conv32_down);
|
let out = convDown(normalized, params.conv32_down);
|
||||||
|
@ -3445,7 +3445,7 @@ class SsdMobilenetv1Options {
|
||||||
|
|
||||||
// src/ssdMobilenetv1/SsdMobilenetv1.ts
|
// src/ssdMobilenetv1/SsdMobilenetv1.ts
|
||||||
import {
|
import {
|
||||||
cast as cast4,
|
cast as cast7,
|
||||||
mul as mul3,
|
mul as mul3,
|
||||||
scalar as scalar6,
|
scalar as scalar6,
|
||||||
sub as sub3,
|
sub as sub3,
|
||||||
|
@ -3461,7 +3461,7 @@ class SsdMobilenetv1 extends NeuralNetwork {
|
||||||
throw new Error("SsdMobilenetv1 - load model before inference");
|
throw new Error("SsdMobilenetv1 - load model before inference");
|
||||||
}
|
}
|
||||||
return tidy24(() => {
|
return tidy24(() => {
|
||||||
const batchTensor = cast4(input.toBatchTensor(512, false), "float32");
|
const batchTensor = cast7(input.toBatchTensor(512, false), "float32");
|
||||||
const x = sub3(mul3(batchTensor, scalar6(0.007843137718737125)), scalar6(1));
|
const x = sub3(mul3(batchTensor, scalar6(0.007843137718737125)), scalar6(1));
|
||||||
const features = mobileNetV1(x, params.mobilenetv1);
|
const features = mobileNetV1(x, params.mobilenetv1);
|
||||||
const {
|
const {
|
||||||
|
@ -3791,7 +3791,7 @@ class TinyYolov2Options {
|
||||||
|
|
||||||
// src/tinyYolov2/TinyYolov2Base.ts
|
// src/tinyYolov2/TinyYolov2Base.ts
|
||||||
import {
|
import {
|
||||||
cast as cast5,
|
cast as cast8,
|
||||||
maxPool as maxPool3,
|
maxPool as maxPool3,
|
||||||
scalar as scalar8,
|
scalar as scalar8,
|
||||||
softmax as softmax3,
|
softmax as softmax3,
|
||||||
|
@ -3853,7 +3853,7 @@ class TinyYolov2Base extends NeuralNetwork {
|
||||||
throw new Error("TinyYolov2 - load model before inference");
|
throw new Error("TinyYolov2 - load model before inference");
|
||||||
}
|
}
|
||||||
return tidy28(() => {
|
return tidy28(() => {
|
||||||
let batchTensor = cast5(input.toBatchTensor(inputSize, false), "float32");
|
let batchTensor = cast8(input.toBatchTensor(inputSize, false), "float32");
|
||||||
batchTensor = this.config.meanRgb ? normalize(batchTensor, this.config.meanRgb) : batchTensor;
|
batchTensor = this.config.meanRgb ? normalize(batchTensor, this.config.meanRgb) : batchTensor;
|
||||||
batchTensor = batchTensor.div(scalar8(256));
|
batchTensor = batchTensor.div(scalar8(256));
|
||||||
return this.config.withSeparableConvs ? this.runMobilenet(batchTensor, params) : this.runTinyYolov2(batchTensor, params);
|
return this.config.withSeparableConvs ? this.runMobilenet(batchTensor, params) : this.runTinyYolov2(batchTensor, params);
|
||||||
|
@ -4481,7 +4481,7 @@ function resizeResults(results, dimensions) {
|
||||||
}
|
}
|
||||||
|
|
||||||
// package.json
|
// package.json
|
||||||
var version = "0.7.4";
|
var version = "0.8.1";
|
||||||
|
|
||||||
// src/index.ts
|
// src/index.ts
|
||||||
import * as tf42 from "@tensorflow/tfjs/dist/tf.es2017.js";
|
import * as tf42 from "@tensorflow/tfjs/dist/tf.es2017.js";
|
||||||
|
|
File diff suppressed because one or more lines are too long
|
@ -23,7 +23,7 @@ export class FaceFeatureExtractor extends NeuralNetwork<FaceFeatureExtractorPara
|
||||||
}
|
}
|
||||||
|
|
||||||
return tf.tidy(() => {
|
return tf.tidy(() => {
|
||||||
const batchTensor = input.toBatchTensor(112, true)
|
const batchTensor = tf.cast(input.toBatchTensor(112, true), 'float32');
|
||||||
const meanRgb = [122.782, 117.001, 104.298]
|
const meanRgb = [122.782, 117.001, 104.298]
|
||||||
const normalized = normalize(batchTensor, meanRgb).div(tf.scalar(255)) as tf.Tensor4D
|
const normalized = normalize(batchTensor, meanRgb).div(tf.scalar(255)) as tf.Tensor4D
|
||||||
|
|
||||||
|
|
|
@ -23,7 +23,7 @@ export class TinyFaceFeatureExtractor extends NeuralNetwork<TinyFaceFeatureExtra
|
||||||
}
|
}
|
||||||
|
|
||||||
return tf.tidy(() => {
|
return tf.tidy(() => {
|
||||||
const batchTensor = input.toBatchTensor(112, true)
|
const batchTensor = tf.cast(input.toBatchTensor(112, true), 'float32');
|
||||||
const meanRgb = [122.782, 117.001, 104.298]
|
const meanRgb = [122.782, 117.001, 104.298]
|
||||||
const normalized = normalize(batchTensor, meanRgb).div(tf.scalar(255)) as tf.Tensor4D
|
const normalized = normalize(batchTensor, meanRgb).div(tf.scalar(255)) as tf.Tensor4D
|
||||||
|
|
||||||
|
|
|
@ -26,10 +26,7 @@ export abstract class FaceLandmark68NetBase<
|
||||||
|
|
||||||
return tf.tidy(() => {
|
return tf.tidy(() => {
|
||||||
const createInterleavedTensor = (fillX: number, fillY: number) =>
|
const createInterleavedTensor = (fillX: number, fillY: number) =>
|
||||||
tf.stack([
|
tf.stack([tf.fill([68], fillX, 'float32'), tf.fill([68], fillY, 'float32')], 1).as2D(1, 136).as1D()
|
||||||
tf.fill([68], fillX),
|
|
||||||
tf.fill([68], fillY)
|
|
||||||
], 1).as2D(1, 136).as1D()
|
|
||||||
|
|
||||||
const getPadding = (batchIdx: number, cond: (w: number, h: number) => boolean): number => {
|
const getPadding = (batchIdx: number, cond: (w: number, h: number) => boolean): number => {
|
||||||
const { width, height } = inputDimensions[batchIdx]
|
const { width, height } = inputDimensions[batchIdx]
|
||||||
|
@ -39,7 +36,7 @@ export abstract class FaceLandmark68NetBase<
|
||||||
const getPaddingY = (batchIdx: number) => getPadding(batchIdx, (w, h) => h < w)
|
const getPaddingY = (batchIdx: number) => getPadding(batchIdx, (w, h) => h < w)
|
||||||
|
|
||||||
const landmarkTensors = output
|
const landmarkTensors = output
|
||||||
.mul(tf.fill([batchSize, 136], inputSize))
|
.mul(tf.fill([batchSize, 136], inputSize, 'float32'))
|
||||||
.sub(tf.stack(Array.from(Array(batchSize), (_, batchIdx) =>
|
.sub(tf.stack(Array.from(Array(batchSize), (_, batchIdx) =>
|
||||||
createInterleavedTensor(
|
createInterleavedTensor(
|
||||||
getPaddingX(batchIdx),
|
getPaddingX(batchIdx),
|
||||||
|
|
|
@ -3,9 +3,9 @@ import * as tf from '@tensorflow/tfjs/dist/tf.es2017.js';
|
||||||
export function normalize(x: tf.Tensor4D, meanRgb: number[]): tf.Tensor4D {
|
export function normalize(x: tf.Tensor4D, meanRgb: number[]): tf.Tensor4D {
|
||||||
return tf.tidy(() => {
|
return tf.tidy(() => {
|
||||||
const [r, g, b] = meanRgb
|
const [r, g, b] = meanRgb
|
||||||
const avg_r = tf.fill([...x.shape.slice(0, 3), 1], r)
|
const avg_r = tf.fill([...x.shape.slice(0, 3), 1], r, 'float32')
|
||||||
const avg_g = tf.fill([...x.shape.slice(0, 3), 1], g)
|
const avg_g = tf.fill([...x.shape.slice(0, 3), 1], g, 'float32')
|
||||||
const avg_b = tf.fill([...x.shape.slice(0, 3), 1], b)
|
const avg_b = tf.fill([...x.shape.slice(0, 3), 1], b, 'float32')
|
||||||
const avg_rgb = tf.concat([avg_r, avg_g, avg_b], 3)
|
const avg_rgb = tf.concat([avg_r, avg_g, avg_b], 3)
|
||||||
|
|
||||||
return tf.sub(x, avg_rgb)
|
return tf.sub(x, avg_rgb)
|
||||||
|
|
|
@ -26,7 +26,7 @@ export function padToSquare(
|
||||||
const createPaddingTensor = (paddingAmount: number): tf.Tensor => {
|
const createPaddingTensor = (paddingAmount: number): tf.Tensor => {
|
||||||
const paddingTensorShape = imgTensor.shape.slice()
|
const paddingTensorShape = imgTensor.shape.slice()
|
||||||
paddingTensorShape[paddingAxis] = paddingAmount
|
paddingTensorShape[paddingAxis] = paddingAmount
|
||||||
return tf.fill(paddingTensorShape, 0)
|
return tf.fill(paddingTensorShape, 0, 'float32')
|
||||||
}
|
}
|
||||||
|
|
||||||
const paddingTensorAppend = createPaddingTensor(paddingAmount)
|
const paddingTensorAppend = createPaddingTensor(paddingAmount)
|
||||||
|
|
|
@ -48,7 +48,7 @@ export class TinyXception extends NeuralNetwork<TinyXceptionParams> {
|
||||||
}
|
}
|
||||||
|
|
||||||
return tf.tidy(() => {
|
return tf.tidy(() => {
|
||||||
const batchTensor = input.toBatchTensor(112, true)
|
const batchTensor = tf.cast(input.toBatchTensor(112, true), 'float32');
|
||||||
const meanRgb = [122.782, 117.001, 104.298]
|
const meanRgb = [122.782, 117.001, 104.298]
|
||||||
const normalized = normalize(batchTensor, meanRgb).div(tf.scalar(256)) as tf.Tensor4D
|
const normalized = normalize(batchTensor, meanRgb).div(tf.scalar(256)) as tf.Tensor4D
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue