fix for wasm compatibility
parent
4f17fe476b
commit
7e1de2e57b
|
@ -1,6 +1,6 @@
|
|||
{
|
||||
"name": "@vladmandic/face-api",
|
||||
"version": "0.7.4",
|
||||
"version": "0.8.1",
|
||||
"description": "JavaScript module for Face Detection and Face Recognition Using Tensorflow/JS",
|
||||
"main": "dist/face-api.cjs",
|
||||
"module": "dist/face-api.esm.js",
|
||||
|
|
|
@ -15,7 +15,7 @@ export class FaceFeatureExtractor extends NeuralNetwork {
|
|||
throw new Error('FaceFeatureExtractor - load model before inference');
|
||||
}
|
||||
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 normalized = normalize(batchTensor, meanRgb).div(tf.scalar(255));
|
||||
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');
|
||||
}
|
||||
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 normalized = normalize(batchTensor, meanRgb).div(tf.scalar(255));
|
||||
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;
|
||||
return tf.tidy(() => {
|
||||
const createInterleavedTensor = (fillX, fillY) => tf.stack([
|
||||
tf.fill([68], fillX),
|
||||
tf.fill([68], fillY)
|
||||
], 1).as2D(1, 136).as1D();
|
||||
const createInterleavedTensor = (fillX, fillY) => tf.stack([tf.fill([68], fillX, 'float32'), tf.fill([68], fillY, 'float32')], 1).as2D(1, 136).as1D();
|
||||
const getPadding = (batchIdx, cond) => {
|
||||
const { width, height } = inputDimensions[batchIdx];
|
||||
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 getPaddingY = (batchIdx) => getPadding(batchIdx, (w, h) => h < w);
|
||||
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)))))
|
||||
.div(tf.stack(Array.from(Array(batchSize), (_, batchIdx) => createInterleavedTensor(inputDimensions[batchIdx].width, inputDimensions[batchIdx].height))));
|
||||
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) {
|
||||
return tf.tidy(() => {
|
||||
const [r, g, b] = meanRgb;
|
||||
const avg_r = tf.fill([...x.shape.slice(0, 3), 1], r);
|
||||
const avg_g = tf.fill([...x.shape.slice(0, 3), 1], g);
|
||||
const avg_b = tf.fill([...x.shape.slice(0, 3), 1], b);
|
||||
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, 'float32');
|
||||
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);
|
||||
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 paddingTensorShape = imgTensor.shape.slice();
|
||||
paddingTensorShape[paddingAxis] = paddingAmount;
|
||||
return tf.fill(paddingTensorShape, 0);
|
||||
return tf.fill(paddingTensorShape, 0, 'float32');
|
||||
};
|
||||
const paddingTensorAppend = createPaddingTensor(paddingAmount);
|
||||
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');
|
||||
}
|
||||
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 normalized = normalize(batchTensor, meanRgb).div(tf.scalar(256));
|
||||
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) {
|
||||
return tf2.tidy(() => {
|
||||
const [r, g, b] = meanRgb;
|
||||
const avg_r = tf2.fill([...x.shape.slice(0, 3), 1], r);
|
||||
const avg_g = tf2.fill([...x.shape.slice(0, 3), 1], g);
|
||||
const avg_b = tf2.fill([...x.shape.slice(0, 3), 1], b);
|
||||
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, "float32");
|
||||
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);
|
||||
return tf2.sub(x, avg_rgb);
|
||||
});
|
||||
|
@ -462,7 +462,7 @@ function padToSquare(imgTensor, isCenterImage = false) {
|
|||
const createPaddingTensor = (paddingAmount2) => {
|
||||
const paddingTensorShape = imgTensor.shape.slice();
|
||||
paddingTensorShape[paddingAxis] = paddingAmount2;
|
||||
return tf3.fill(paddingTensorShape, 0);
|
||||
return tf3.fill(paddingTensorShape, 0, "float32");
|
||||
};
|
||||
const paddingTensorAppend = createPaddingTensor(paddingAmount);
|
||||
const remainingPaddingAmount = dimDiff - paddingTensorAppend.shape[paddingAxis];
|
||||
|
@ -1716,7 +1716,7 @@ class FaceFeatureExtractor extends NeuralNetwork {
|
|||
throw new Error("FaceFeatureExtractor - load model before inference");
|
||||
}
|
||||
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 normalized = normalize(batchTensor, meanRgb).div(tf15.scalar(255));
|
||||
let out = denseBlock4(normalized, params.dense0, true);
|
||||
|
@ -2153,7 +2153,7 @@ class TinyXception extends NeuralNetwork {
|
|||
throw new Error("TinyXception - load model before inference");
|
||||
}
|
||||
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 normalized = normalize(batchTensor, meanRgb).div(tf19.scalar(256));
|
||||
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;
|
||||
return tf21.tidy(() => {
|
||||
const createInterleavedTensor = (fillX, fillY) => tf21.stack([
|
||||
tf21.fill([68], fillX),
|
||||
tf21.fill([68], fillY)
|
||||
], 1).as2D(1, 136).as1D();
|
||||
const createInterleavedTensor = (fillX, fillY) => tf21.stack([tf21.fill([68], fillX, "float32"), tf21.fill([68], fillY, "float32")], 1).as2D(1, 136).as1D();
|
||||
const getPadding = (batchIdx, cond) => {
|
||||
const {width, height} = inputDimensions[batchIdx];
|
||||
return cond(width, height) ? Math.abs(width - height) / 2 : 0;
|
||||
};
|
||||
const getPaddingX = (batchIdx) => getPadding(batchIdx, (w, h) => w < h);
|
||||
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;
|
||||
});
|
||||
}
|
||||
|
@ -2430,7 +2427,7 @@ class TinyFaceFeatureExtractor extends NeuralNetwork {
|
|||
throw new Error("TinyFaceFeatureExtractor - load model before inference");
|
||||
}
|
||||
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 normalized = normalize(batchTensor, meanRgb).div(tf22.scalar(255));
|
||||
let out = denseBlock3(normalized, params.dense0, true);
|
||||
|
@ -4292,7 +4289,7 @@ function resizeResults(results, dimensions) {
|
|||
}
|
||||
|
||||
// package.json
|
||||
var version = "0.7.4";
|
||||
var version = "0.8.1";
|
||||
|
||||
// src/index.ts
|
||||
__export(exports, {
|
||||
|
|
File diff suppressed because one or more lines are too long
|
@ -447,9 +447,9 @@ import {
|
|||
function normalize(x, meanRgb) {
|
||||
return tidy(() => {
|
||||
const [r, g, b] = meanRgb;
|
||||
const avg_r = fill([...x.shape.slice(0, 3), 1], r);
|
||||
const avg_g = fill([...x.shape.slice(0, 3), 1], g);
|
||||
const avg_b = fill([...x.shape.slice(0, 3), 1], b);
|
||||
const avg_r = fill([...x.shape.slice(0, 3), 1], r, "float32");
|
||||
const avg_g = fill([...x.shape.slice(0, 3), 1], g, "float32");
|
||||
const avg_b = fill([...x.shape.slice(0, 3), 1], b, "float32");
|
||||
const avg_rgb = concat([avg_r, avg_g, avg_b], 3);
|
||||
return sub(x, avg_rgb);
|
||||
});
|
||||
|
@ -474,7 +474,7 @@ function padToSquare(imgTensor, isCenterImage = false) {
|
|||
const createPaddingTensor = (paddingAmount2) => {
|
||||
const paddingTensorShape = imgTensor.shape.slice();
|
||||
paddingTensorShape[paddingAxis] = paddingAmount2;
|
||||
return fill2(paddingTensorShape, 0);
|
||||
return fill2(paddingTensorShape, 0, "float32");
|
||||
};
|
||||
const paddingTensorAppend = createPaddingTensor(paddingAmount);
|
||||
const remainingPaddingAmount = dimDiff - paddingTensorAppend.shape[paddingAxis];
|
||||
|
@ -1762,6 +1762,7 @@ function extractParamsFromWeigthMap(weightMap) {
|
|||
// src/faceFeatureExtractor/FaceFeatureExtractor.ts
|
||||
import {
|
||||
avgPool,
|
||||
cast as cast3,
|
||||
scalar,
|
||||
tidy as tidy9
|
||||
} from "@tensorflow/tfjs/dist/tf.es2017.js";
|
||||
|
@ -1775,7 +1776,7 @@ class FaceFeatureExtractor extends NeuralNetwork {
|
|||
throw new Error("FaceFeatureExtractor - load model before inference");
|
||||
}
|
||||
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 normalized = normalize(batchTensor, meanRgb).div(scalar(255));
|
||||
let out = denseBlock4(normalized, params.dense0, true);
|
||||
|
@ -2194,6 +2195,7 @@ function extractParamsFromWeigthMap5(weightMap, numMainBlocks) {
|
|||
// src/xception/TinyXception.ts
|
||||
import {
|
||||
add as add5,
|
||||
cast as cast4,
|
||||
conv2d as conv2d3,
|
||||
maxPool,
|
||||
relu as relu3,
|
||||
|
@ -2229,7 +2231,7 @@ class TinyXception extends NeuralNetwork {
|
|||
throw new Error("TinyXception - load model before inference");
|
||||
}
|
||||
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 normalized = normalize(batchTensor, meanRgb).div(scalar2(256));
|
||||
let out = relu3(conv(normalized, params.entry_flow.conv_in, [2, 2]));
|
||||
|
@ -2411,17 +2413,14 @@ class FaceLandmark68NetBase extends FaceProcessor {
|
|||
});
|
||||
const batchSize = inputDimensions.length;
|
||||
return tidy15(() => {
|
||||
const createInterleavedTensor = (fillX, fillY) => stack2([
|
||||
fill3([68], fillX),
|
||||
fill3([68], fillY)
|
||||
], 1).as2D(1, 136).as1D();
|
||||
const createInterleavedTensor = (fillX, fillY) => stack2([fill3([68], fillX, "float32"), fill3([68], fillY, "float32")], 1).as2D(1, 136).as1D();
|
||||
const getPadding = (batchIdx, cond) => {
|
||||
const {width, height} = inputDimensions[batchIdx];
|
||||
return cond(width, height) ? Math.abs(width - height) / 2 : 0;
|
||||
};
|
||||
const getPaddingX = (batchIdx) => getPadding(batchIdx, (w, h) => w < h);
|
||||
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;
|
||||
});
|
||||
}
|
||||
|
@ -2507,6 +2506,7 @@ function extractParamsTiny(weights) {
|
|||
// src/faceFeatureExtractor/TinyFaceFeatureExtractor.ts
|
||||
import {
|
||||
avgPool as avgPool3,
|
||||
cast as cast5,
|
||||
scalar as scalar3,
|
||||
tidy as tidy16
|
||||
} from "@tensorflow/tfjs/dist/tf.es2017.js";
|
||||
|
@ -2520,7 +2520,7 @@ class TinyFaceFeatureExtractor extends NeuralNetwork {
|
|||
throw new Error("TinyFaceFeatureExtractor - load model before inference");
|
||||
}
|
||||
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 normalized = normalize(batchTensor, meanRgb).div(scalar3(255));
|
||||
let out = denseBlock3(normalized, params.dense0, true);
|
||||
|
@ -2804,7 +2804,7 @@ function residualDown(x, params) {
|
|||
|
||||
// src/faceRecognitionNet/FaceRecognitionNet.ts
|
||||
import {
|
||||
cast as cast3,
|
||||
cast as cast6,
|
||||
matMul as matMul2,
|
||||
maxPool as maxPool2,
|
||||
scalar as scalar4,
|
||||
|
@ -2821,7 +2821,7 @@ class FaceRecognitionNet extends NeuralNetwork {
|
|||
throw new Error("FaceRecognitionNet - load model before inference");
|
||||
}
|
||||
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 normalized = normalize(batchTensor, meanRgb).div(scalar4(256));
|
||||
let out = convDown(normalized, params.conv32_down);
|
||||
|
@ -3445,7 +3445,7 @@ class SsdMobilenetv1Options {
|
|||
|
||||
// src/ssdMobilenetv1/SsdMobilenetv1.ts
|
||||
import {
|
||||
cast as cast4,
|
||||
cast as cast7,
|
||||
mul as mul3,
|
||||
scalar as scalar6,
|
||||
sub as sub3,
|
||||
|
@ -3461,7 +3461,7 @@ class SsdMobilenetv1 extends NeuralNetwork {
|
|||
throw new Error("SsdMobilenetv1 - load model before inference");
|
||||
}
|
||||
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 features = mobileNetV1(x, params.mobilenetv1);
|
||||
const {
|
||||
|
@ -3791,7 +3791,7 @@ class TinyYolov2Options {
|
|||
|
||||
// src/tinyYolov2/TinyYolov2Base.ts
|
||||
import {
|
||||
cast as cast5,
|
||||
cast as cast8,
|
||||
maxPool as maxPool3,
|
||||
scalar as scalar8,
|
||||
softmax as softmax3,
|
||||
|
@ -3853,7 +3853,7 @@ class TinyYolov2Base extends NeuralNetwork {
|
|||
throw new Error("TinyYolov2 - load model before inference");
|
||||
}
|
||||
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 = batchTensor.div(scalar8(256));
|
||||
return this.config.withSeparableConvs ? this.runMobilenet(batchTensor, params) : this.runTinyYolov2(batchTensor, params);
|
||||
|
@ -4481,7 +4481,7 @@ function resizeResults(results, dimensions) {
|
|||
}
|
||||
|
||||
// package.json
|
||||
var version = "0.7.4";
|
||||
var version = "0.8.1";
|
||||
|
||||
// src/index.ts
|
||||
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(() => {
|
||||
const batchTensor = input.toBatchTensor(112, true)
|
||||
const batchTensor = tf.cast(input.toBatchTensor(112, true), 'float32');
|
||||
const meanRgb = [122.782, 117.001, 104.298]
|
||||
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(() => {
|
||||
const batchTensor = input.toBatchTensor(112, true)
|
||||
const batchTensor = tf.cast(input.toBatchTensor(112, true), 'float32');
|
||||
const meanRgb = [122.782, 117.001, 104.298]
|
||||
const normalized = normalize(batchTensor, meanRgb).div(tf.scalar(255)) as tf.Tensor4D
|
||||
|
||||
|
|
|
@ -26,10 +26,7 @@ export abstract class FaceLandmark68NetBase<
|
|||
|
||||
return tf.tidy(() => {
|
||||
const createInterleavedTensor = (fillX: number, fillY: number) =>
|
||||
tf.stack([
|
||||
tf.fill([68], fillX),
|
||||
tf.fill([68], fillY)
|
||||
], 1).as2D(1, 136).as1D()
|
||||
tf.stack([tf.fill([68], fillX, 'float32'), tf.fill([68], fillY, 'float32')], 1).as2D(1, 136).as1D()
|
||||
|
||||
const getPadding = (batchIdx: number, cond: (w: number, h: number) => boolean): number => {
|
||||
const { width, height } = inputDimensions[batchIdx]
|
||||
|
@ -39,7 +36,7 @@ export abstract class FaceLandmark68NetBase<
|
|||
const getPaddingY = (batchIdx: number) => getPadding(batchIdx, (w, h) => h < w)
|
||||
|
||||
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),
|
||||
|
|
|
@ -3,9 +3,9 @@ import * as tf from '@tensorflow/tfjs/dist/tf.es2017.js';
|
|||
export function normalize(x: tf.Tensor4D, meanRgb: number[]): tf.Tensor4D {
|
||||
return tf.tidy(() => {
|
||||
const [r, g, b] = meanRgb
|
||||
const avg_r = tf.fill([...x.shape.slice(0, 3), 1], r)
|
||||
const avg_g = tf.fill([...x.shape.slice(0, 3), 1], g)
|
||||
const avg_b = tf.fill([...x.shape.slice(0, 3), 1], b)
|
||||
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, 'float32')
|
||||
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)
|
||||
|
||||
return tf.sub(x, avg_rgb)
|
||||
|
|
|
@ -26,7 +26,7 @@ export function padToSquare(
|
|||
const createPaddingTensor = (paddingAmount: number): tf.Tensor => {
|
||||
const paddingTensorShape = imgTensor.shape.slice()
|
||||
paddingTensorShape[paddingAxis] = paddingAmount
|
||||
return tf.fill(paddingTensorShape, 0)
|
||||
return tf.fill(paddingTensorShape, 0, 'float32')
|
||||
}
|
||||
|
||||
const paddingTensorAppend = createPaddingTensor(paddingAmount)
|
||||
|
|
|
@ -48,7 +48,7 @@ export class TinyXception extends NeuralNetwork<TinyXceptionParams> {
|
|||
}
|
||||
|
||||
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 normalized = normalize(batchTensor, meanRgb).div(tf.scalar(256)) as tf.Tensor4D
|
||||
|
||||
|
|
Loading…
Reference in New Issue