Commit 5c7e120f by vincent

check in latest build

parent e1d7085e
import * as tf from '@tensorflow/tfjs-core';
import { NetInput, NeuralNetwork, TNetInput } from 'tfjs-image-recognition-base';
import { TinyXception } from '../xception/TinyXception';
import { AgeAndGenderPrediction, NetOutput, NetParams } from './types';
export declare class AgeGenderNet extends NeuralNetwork<NetParams> {
private _faceFeatureExtractor;
constructor(faceFeatureExtractor?: TinyXception);
readonly faceFeatureExtractor: TinyXception;
runNet(input: NetInput | tf.Tensor4D): NetOutput;
forwardInput(input: NetInput | tf.Tensor4D): NetOutput;
forward(input: TNetInput): Promise<NetOutput>;
predictAgeAndGender(input: TNetInput): Promise<AgeAndGenderPrediction | AgeAndGenderPrediction[]>;
protected getDefaultModelName(): string;
dispose(throwOnRedispose?: boolean): void;
loadClassifierParams(weights: Float32Array): void;
extractClassifierParams(weights: Float32Array): {
params: NetParams;
paramMappings: import("tfjs-image-recognition-base/build/commonjs/common").ParamMapping[];
};
protected extractParamsFromWeigthMap(weightMap: tf.NamedTensorMap): {
params: NetParams;
paramMappings: import("tfjs-image-recognition-base/build/commonjs/common").ParamMapping[];
};
protected extractParams(weights: Float32Array): {
params: NetParams;
paramMappings: import("tfjs-image-recognition-base/build/commonjs/common").ParamMapping[];
};
}
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
var tslib_1 = require("tslib");
var tf = require("@tensorflow/tfjs-core");
var tfjs_image_recognition_base_1 = require("tfjs-image-recognition-base");
var fullyConnectedLayer_1 = require("../common/fullyConnectedLayer");
var util_1 = require("../faceProcessor/util");
var TinyXception_1 = require("../xception/TinyXception");
var extractParams_1 = require("./extractParams");
var extractParamsFromWeigthMap_1 = require("./extractParamsFromWeigthMap");
var types_1 = require("./types");
var AgeGenderNet = /** @class */ (function (_super) {
tslib_1.__extends(AgeGenderNet, _super);
function AgeGenderNet(faceFeatureExtractor) {
if (faceFeatureExtractor === void 0) { faceFeatureExtractor = new TinyXception_1.TinyXception(2); }
var _this = _super.call(this, 'AgeGenderNet') || this;
_this._faceFeatureExtractor = faceFeatureExtractor;
return _this;
}
Object.defineProperty(AgeGenderNet.prototype, "faceFeatureExtractor", {
get: function () {
return this._faceFeatureExtractor;
},
enumerable: true,
configurable: true
});
AgeGenderNet.prototype.runNet = function (input) {
var _this = this;
var params = this.params;
if (!params) {
throw new Error(this._name + " - load model before inference");
}
return tf.tidy(function () {
var bottleneckFeatures = input instanceof tfjs_image_recognition_base_1.NetInput
? _this.faceFeatureExtractor.forwardInput(input)
: input;
var pooled = tf.avgPool(bottleneckFeatures, [7, 7], [2, 2], 'valid').as2D(bottleneckFeatures.shape[0], -1);
var age = fullyConnectedLayer_1.fullyConnectedLayer(pooled, params.fc.age).as1D();
var gender = fullyConnectedLayer_1.fullyConnectedLayer(pooled, params.fc.gender);
return { age: age, gender: gender };
});
};
AgeGenderNet.prototype.forwardInput = function (input) {
var _this = this;
return tf.tidy(function () {
var _a = _this.runNet(input), age = _a.age, gender = _a.gender;
return { age: age, gender: tf.softmax(gender) };
});
};
AgeGenderNet.prototype.forward = function (input) {
return tslib_1.__awaiter(this, void 0, void 0, function () {
var _a;
return tslib_1.__generator(this, function (_b) {
switch (_b.label) {
case 0:
_a = this.forwardInput;
return [4 /*yield*/, tfjs_image_recognition_base_1.toNetInput(input)];
case 1: return [2 /*return*/, _a.apply(this, [_b.sent()])];
}
});
});
};
AgeGenderNet.prototype.predictAgeAndGender = function (input) {
return tslib_1.__awaiter(this, void 0, void 0, function () {
var netInput, out, ages, genders, ageAndGenderTensors, predictionsByBatch;
var _this = this;
return tslib_1.__generator(this, function (_a) {
switch (_a.label) {
case 0: return [4 /*yield*/, tfjs_image_recognition_base_1.toNetInput(input)];
case 1:
netInput = _a.sent();
return [4 /*yield*/, this.forwardInput(netInput)];
case 2:
out = _a.sent();
ages = tf.unstack(out.age);
genders = tf.unstack(out.gender);
ageAndGenderTensors = ages.map(function (ageTensor, i) { return ({
ageTensor: ageTensor,
genderTensor: genders[i]
}); });
return [4 /*yield*/, Promise.all(ageAndGenderTensors.map(function (_a) {
var ageTensor = _a.ageTensor, genderTensor = _a.genderTensor;
return tslib_1.__awaiter(_this, void 0, void 0, function () {
var age, probMale, isMale, gender, genderProbability;
return tslib_1.__generator(this, function (_b) {
switch (_b.label) {
case 0: return [4 /*yield*/, ageTensor.data()];
case 1:
age = (_b.sent())[0];
return [4 /*yield*/, genderTensor.data()];
case 2:
probMale = (_b.sent())[0];
isMale = probMale > 0.5;
gender = isMale ? types_1.Gender.MALE : types_1.Gender.FEMALE;
genderProbability = isMale ? probMale : (1 - probMale);
ageTensor.dispose();
genderTensor.dispose();
return [2 /*return*/, { age: age, gender: gender, genderProbability: genderProbability }];
}
});
});
}))];
case 3:
predictionsByBatch = _a.sent();
out.age.dispose();
out.gender.dispose();
return [2 /*return*/, netInput.isBatchInput
? predictionsByBatch
: predictionsByBatch[0]];
}
});
});
};
AgeGenderNet.prototype.getDefaultModelName = function () {
return 'age_gender_model';
};
AgeGenderNet.prototype.dispose = function (throwOnRedispose) {
if (throwOnRedispose === void 0) { throwOnRedispose = true; }
this.faceFeatureExtractor.dispose(throwOnRedispose);
_super.prototype.dispose.call(this, throwOnRedispose);
};
AgeGenderNet.prototype.loadClassifierParams = function (weights) {
var _a = this.extractClassifierParams(weights), params = _a.params, paramMappings = _a.paramMappings;
this._params = params;
this._paramMappings = paramMappings;
};
AgeGenderNet.prototype.extractClassifierParams = function (weights) {
return extractParams_1.extractParams(weights);
};
AgeGenderNet.prototype.extractParamsFromWeigthMap = function (weightMap) {
var _a = util_1.seperateWeightMaps(weightMap), featureExtractorMap = _a.featureExtractorMap, classifierMap = _a.classifierMap;
this.faceFeatureExtractor.loadFromWeightMap(featureExtractorMap);
return extractParamsFromWeigthMap_1.extractParamsFromWeigthMap(classifierMap);
};
AgeGenderNet.prototype.extractParams = function (weights) {
var classifierWeightSize = (512 * 1 + 1) + (512 * 2 + 2);
var featureExtractorWeights = weights.slice(0, weights.length - classifierWeightSize);
var classifierWeights = weights.slice(weights.length - classifierWeightSize);
this.faceFeatureExtractor.extractWeights(featureExtractorWeights);
return this.extractClassifierParams(classifierWeights);
};
return AgeGenderNet;
}(tfjs_image_recognition_base_1.NeuralNetwork));
exports.AgeGenderNet = AgeGenderNet;
//# sourceMappingURL=AgeGenderNet.js.map
\ No newline at end of file
{"version":3,"file":"AgeGenderNet.js","sourceRoot":"","sources":["../../../src/ageGenderNet/AgeGenderNet.ts"],"names":[],"mappings":"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"}
\ No newline at end of file
import { TfjsImageRecognitionBase } from 'tfjs-image-recognition-base';
import { NetParams } from './types';
export declare function extractParams(weights: Float32Array): {
params: NetParams;
paramMappings: TfjsImageRecognitionBase.ParamMapping[];
};
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
var tfjs_image_recognition_base_1 = require("tfjs-image-recognition-base");
function extractParams(weights) {
var paramMappings = [];
var _a = tfjs_image_recognition_base_1.TfjsImageRecognitionBase.extractWeightsFactory(weights), extractWeights = _a.extractWeights, getRemainingWeights = _a.getRemainingWeights;
var extractFCParams = tfjs_image_recognition_base_1.TfjsImageRecognitionBase.extractFCParamsFactory(extractWeights, paramMappings);
var age = extractFCParams(512, 1, 'fc/age');
var gender = extractFCParams(512, 2, 'fc/gender');
if (getRemainingWeights().length !== 0) {
throw new Error("weights remaing after extract: " + getRemainingWeights().length);
}
return {
paramMappings: paramMappings,
params: { fc: { age: age, gender: gender } }
};
}
exports.extractParams = extractParams;
//# sourceMappingURL=extractParams.js.map
\ No newline at end of file
{"version":3,"file":"extractParams.js","sourceRoot":"","sources":["../../../src/ageGenderNet/extractParams.ts"],"names":[],"mappings":";;AAAA,2EAAuE;AAIvE,SAAgB,aAAa,CAAC,OAAqB;IAEjD,IAAM,aAAa,GAA4C,EAAE,CAAA;IAE3D,IAAA,0FAGqD,EAFzD,kCAAc,EACd,4CACyD,CAAA;IAE3D,IAAM,eAAe,GAAG,sDAAwB,CAAC,sBAAsB,CAAC,cAAc,EAAE,aAAa,CAAC,CAAA;IAEtG,IAAM,GAAG,GAAG,eAAe,CAAC,GAAG,EAAE,CAAC,EAAE,QAAQ,CAAC,CAAA;IAC7C,IAAM,MAAM,GAAG,eAAe,CAAC,GAAG,EAAE,CAAC,EAAE,WAAW,CAAC,CAAA;IAEnD,IAAI,mBAAmB,EAAE,CAAC,MAAM,KAAK,CAAC,EAAE;QACtC,MAAM,IAAI,KAAK,CAAC,oCAAkC,mBAAmB,EAAE,CAAC,MAAQ,CAAC,CAAA;KAClF;IAED,OAAO;QACL,aAAa,eAAA;QACb,MAAM,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,KAAA,EAAE,MAAM,QAAA,EAAE,EAAE;KAChC,CAAA;AACH,CAAC;AAtBD,sCAsBC"}
\ No newline at end of file
import * as tf from '@tensorflow/tfjs-core';
import { TfjsImageRecognitionBase } from 'tfjs-image-recognition-base';
import { NetParams } from './types';
export declare function extractParamsFromWeigthMap(weightMap: tf.NamedTensorMap): {
params: NetParams;
paramMappings: TfjsImageRecognitionBase.ParamMapping[];
};
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
var tfjs_image_recognition_base_1 = require("tfjs-image-recognition-base");
function extractParamsFromWeigthMap(weightMap) {
var paramMappings = [];
var extractWeightEntry = tfjs_image_recognition_base_1.TfjsImageRecognitionBase.extractWeightEntryFactory(weightMap, paramMappings);
function extractFcParams(prefix) {
var weights = extractWeightEntry(prefix + "/weights", 2);
var bias = extractWeightEntry(prefix + "/bias", 1);
return { weights: weights, bias: bias };
}
var params = {
fc: {
age: extractFcParams('fc/age'),
gender: extractFcParams('fc/gender')
}
};
tfjs_image_recognition_base_1.TfjsImageRecognitionBase.disposeUnusedWeightTensors(weightMap, paramMappings);
return { params: params, paramMappings: paramMappings };
}
exports.extractParamsFromWeigthMap = extractParamsFromWeigthMap;
//# sourceMappingURL=extractParamsFromWeigthMap.js.map
\ No newline at end of file
{"version":3,"file":"extractParamsFromWeigthMap.js","sourceRoot":"","sources":["../../../src/ageGenderNet/extractParamsFromWeigthMap.ts"],"names":[],"mappings":";;AACA,2EAAuE;AAIvE,SAAgB,0BAA0B,CACxC,SAA4B;IAG5B,IAAM,aAAa,GAA4C,EAAE,CAAA;IAEjE,IAAM,kBAAkB,GAAG,sDAAwB,CAAC,yBAAyB,CAAC,SAAS,EAAE,aAAa,CAAC,CAAA;IAEvG,SAAS,eAAe,CAAC,MAAc;QACrC,IAAM,OAAO,GAAG,kBAAkB,CAAiB,MAAM,aAAU,EAAE,CAAC,CAAC,CAAA;QACvE,IAAM,IAAI,GAAG,kBAAkB,CAAiB,MAAM,UAAO,EAAE,CAAC,CAAC,CAAA;QACjE,OAAO,EAAE,OAAO,SAAA,EAAE,IAAI,MAAA,EAAE,CAAA;IAC1B,CAAC;IAED,IAAM,MAAM,GAAG;QACb,EAAE,EAAE;YACF,GAAG,EAAE,eAAe,CAAC,QAAQ,CAAC;YAC9B,MAAM,EAAE,eAAe,CAAC,WAAW,CAAC;SACrC;KACF,CAAA;IAED,sDAAwB,CAAC,0BAA0B,CAAC,SAAS,EAAE,aAAa,CAAC,CAAA;IAE7E,OAAO,EAAE,MAAM,QAAA,EAAE,aAAa,eAAA,EAAE,CAAA;AAClC,CAAC;AAxBD,gEAwBC"}
\ No newline at end of file
export * from './AgeGenderNet';
export * from './types';
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
var tslib_1 = require("tslib");
tslib_1.__exportStar(require("./AgeGenderNet"), exports);
tslib_1.__exportStar(require("./types"), exports);
//# sourceMappingURL=index.js.map
\ No newline at end of file
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/ageGenderNet/index.ts"],"names":[],"mappings":";;;AAAA,yDAA+B;AAC/B,kDAAwB"}
\ No newline at end of file
import * as tf from '@tensorflow/tfjs-core';
import { TfjsImageRecognitionBase } from 'tfjs-image-recognition-base';
export declare type AgeAndGenderPrediction = {
age: number;
gender: Gender;
genderProbability: number;
};
export declare enum Gender {
FEMALE = "female",
MALE = "male"
}
export declare type NetOutput = {
age: tf.Tensor1D;
gender: tf.Tensor2D;
};
export declare type NetParams = {
fc: {
age: TfjsImageRecognitionBase.FCParams;
gender: TfjsImageRecognitionBase.FCParams;
};
};
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
var Gender;
(function (Gender) {
Gender["FEMALE"] = "female";
Gender["MALE"] = "male";
})(Gender = exports.Gender || (exports.Gender = {}));
//# sourceMappingURL=types.js.map
\ No newline at end of file
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/ageGenderNet/types.ts"],"names":[],"mappings":";;AASA,IAAY,MAGX;AAHD,WAAY,MAAM;IAChB,2BAAiB,CAAA;IACjB,uBAAa,CAAA;AACf,CAAC,EAHW,MAAM,GAAN,cAAM,KAAN,cAAM,QAGjB"}
\ No newline at end of file
......@@ -8,7 +8,8 @@ var FaceDetection = /** @class */ (function (_super) {
return _super.call(this, score, score, '', relativeBox, imageDims) || this;
}
FaceDetection.prototype.forSize = function (width, height) {
return _super.prototype.forSize.call(this, width, height);
var _a = _super.prototype.forSize.call(this, width, height), score = _a.score, relativeBox = _a.relativeBox, imageDims = _a.imageDims;
return new FaceDetection(score, relativeBox, imageDims);
};
return FaceDetection;
}(tfjs_image_recognition_base_1.ObjectDetection));
......
{"version":3,"file":"FaceDetection.js","sourceRoot":"","sources":["../../../src/classes/FaceDetection.ts"],"names":[],"mappings":";;;AAAA,2EAAsF;AAOtF;IAAmC,yCAAe;IAChD,uBACE,KAAa,EACb,WAAiB,EACjB,SAAsB;eAEtB,kBAAM,KAAK,EAAE,KAAK,EAAE,EAAE,EAAE,WAAW,EAAE,SAAS,CAAC;IACjD,CAAC;IAEM,+BAAO,GAAd,UAAe,KAAa,EAAE,MAAc;QAC1C,OAAO,iBAAM,OAAO,YAAC,KAAK,EAAE,MAAM,CAAC,CAAA;IACrC,CAAC;IACH,oBAAC;AAAD,CAAC,AAZD,CAAmC,6CAAe,GAYjD;AAZY,sCAAa"}
\ No newline at end of file
{"version":3,"file":"FaceDetection.js","sourceRoot":"","sources":["../../../src/classes/FaceDetection.ts"],"names":[],"mappings":";;;AAAA,2EAAsF;AAOtF;IAAmC,yCAAe;IAChD,uBACE,KAAa,EACb,WAAiB,EACjB,SAAsB;eAEtB,kBAAM,KAAK,EAAE,KAAK,EAAE,EAAE,EAAE,WAAW,EAAE,SAAS,CAAC;IACjD,CAAC;IAEM,+BAAO,GAAd,UAAe,KAAa,EAAE,MAAc;QACpC,IAAA,uDAAgE,EAA9D,gBAAK,EAAE,4BAAW,EAAE,wBAA0C,CAAA;QACtE,OAAO,IAAI,aAAa,CAAC,KAAK,EAAE,WAAW,EAAE,SAAS,CAAC,CAAA;IACzD,CAAC;IACH,oBAAC;AAAD,CAAC,AAbD,CAAmC,6CAAe,GAajD;AAbY,sCAAa"}
\ No newline at end of file
import { Dimensions, IDimensions, Point, Rect } from 'tfjs-image-recognition-base';
import { Box, Dimensions, IBoundingBox, IDimensions, IRect, Point } from 'tfjs-image-recognition-base';
import { FaceDetection } from './FaceDetection';
export interface IFaceLandmarks {
positions: Point[];
......@@ -28,6 +28,11 @@ export declare class FaceLandmarks implements IFaceLandmarks {
* it's current shift.
* @returns The bounding box of the aligned face.
*/
align(detection?: FaceDetection | Rect): Rect;
align(detection?: FaceDetection | IRect | IBoundingBox | null, options?: {
useDlibAlignment?: boolean;
minBoxPadding?: number;
}): Box;
private alignDlib;
private alignMinBbox;
protected getRefPointsForAlignment(): Point[];
}
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
var tfjs_image_recognition_base_1 = require("tfjs-image-recognition-base");
var minBbox_1 = require("../minBbox");
var FaceDetection_1 = require("./FaceDetection");
// face alignment constants
var relX = 0.5;
......@@ -62,13 +63,21 @@ var FaceLandmarks = /** @class */ (function () {
* it's current shift.
* @returns The bounding box of the aligned face.
*/
FaceLandmarks.prototype.align = function (detection) {
FaceLandmarks.prototype.align = function (detection, options) {
if (options === void 0) { options = {}; }
if (detection) {
var box = detection instanceof FaceDetection_1.FaceDetection
? detection.box.floor()
: detection;
return this.shiftBy(box.x, box.y).align();
: new tfjs_image_recognition_base_1.Box(detection);
return this.shiftBy(box.x, box.y).align(null, options);
}
var _a = Object.assign({}, { useDlibAlignment: false, minBoxPadding: 0.2 }, options), useDlibAlignment = _a.useDlibAlignment, minBoxPadding = _a.minBoxPadding;
if (useDlibAlignment) {
return this.alignDlib();
}
return this.alignMinBbox(minBoxPadding);
};
FaceLandmarks.prototype.alignDlib = function () {
var centers = this.getRefPointsForAlignment();
var leftEyeCenter = centers[0], rightEyeCenter = centers[1], mouthCenter = centers[2];
var distToMouth = function (pt) { return mouthCenter.sub(pt).magnitude(); };
......@@ -80,6 +89,10 @@ var FaceLandmarks = /** @class */ (function () {
var y = Math.floor(Math.max(0, refPoint.y - (relY * size)));
return new tfjs_image_recognition_base_1.Rect(x, y, Math.min(size, this.imageWidth + x), Math.min(size, this.imageHeight + y));
};
FaceLandmarks.prototype.alignMinBbox = function (padding) {
var box = minBbox_1.minBbox(this.positions);
return box.pad(box.width * padding, box.height * padding);
};
FaceLandmarks.prototype.getRefPointsForAlignment = function () {
throw new Error('getRefPointsForAlignment not implemented by base class');
};
......
{"version":3,"file":"FaceLandmarks.js","sourceRoot":"","sources":["../../../src/classes/FaceLandmarks.ts"],"names":[],"mappings":"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"}
\ No newline at end of file
{"version":3,"file":"FaceLandmarks.js","sourceRoot":"","sources":["../../../src/classes/FaceLandmarks.ts"],"names":[],"mappings":"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"}
\ No newline at end of file
{"version":3,"file":"depthwiseSeparableConv.js","sourceRoot":"","sources":["../../../src/common/depthwiseSeparableConv.ts"],"names":[],"mappings":";;AAAA,0CAA4C;AAG5C,SAAgB,sBAAsB,CACpC,CAAc,EACd,MAAoD,EACpD,MAAwB;IAExB,OAAO,EAAE,CAAC,IAAI,CAAC;QACb,IAAI,GAAG,GAAG,EAAE,CAAC,eAAe,CAAC,CAAC,EAAE,MAAM,CAAC,gBAAgB,EAAE,MAAM,CAAC,gBAAgB,EAAE,MAAM,EAAE,MAAM,CAAC,CAAA;QACjG,GAAG,GAAG,EAAE,CAAC,GAAG,CAAC,GAAG,EAAE,MAAM,CAAC,IAAI,CAAC,CAAA;QAC9B,OAAO,GAAG,CAAA;IACZ,CAAC,CAAC,CAAA;AACJ,CAAC;AAVD,wDAUC"}
\ No newline at end of file
import { TfjsImageRecognitionBase } from 'tfjs-image-recognition-base';
export declare function loadConvParamsFactory(extractWeightEntry: <T>(originalPath: string, paramRank: number) => T): (prefix: string) => TfjsImageRecognitionBase.ConvParams;
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
function loadConvParamsFactory(extractWeightEntry) {
return function (prefix) {
var filters = extractWeightEntry(prefix + "/filters", 4);
var bias = extractWeightEntry(prefix + "/bias", 1);
return { filters: filters, bias: bias };
};
}
exports.loadConvParamsFactory = loadConvParamsFactory;
//# sourceMappingURL=loadConvParamsFactory.js.map
\ No newline at end of file
{"version":3,"file":"loadConvParamsFactory.js","sourceRoot":"","sources":["../../../src/common/loadConvParamsFactory.ts"],"names":[],"mappings":";;AAGA,SAAgB,qBAAqB,CAAC,kBAAqE;IACzG,OAAO,UAAS,MAAc;QAC5B,IAAM,OAAO,GAAG,kBAAkB,CAAiB,MAAM,aAAU,EAAE,CAAC,CAAC,CAAA;QACvE,IAAM,IAAI,GAAG,kBAAkB,CAAiB,MAAM,UAAO,EAAE,CAAC,CAAC,CAAA;QAEjE,OAAO,EAAE,OAAO,SAAA,EAAE,IAAI,MAAA,EAAE,CAAA;IAC1B,CAAC,CAAA;AACH,CAAC;AAPD,sDAOC"}
\ No newline at end of file
{"version":3,"file":"drawContour.js","sourceRoot":"","sources":["../../../src/dom/drawContour.ts"],"names":[],"mappings":";;AAEA,SAAgB,WAAW,CACzB,GAA6B,EAC7B,MAAe,EACf,QAAyB;IAAzB,yBAAA,EAAA,gBAAyB;IAEzB,GAAG,CAAC,SAAS,EAAE,CAAA;IAEf,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,UAAC,EAAQ,EAAE,OAAO;YAAf,QAAC,EAAE,QAAC;QAC7B,IAAM,IAAI,GAAG,MAAM,CAAC,OAAO,CAAC,CAAA;QAC5B,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,CAAA;QAC1B,GAAG,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA;IAClB,CAAC,CAAC,CAAA;IAEF,IAAI,QAAQ,EAAE;QACZ,IAAM,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAA;QACtC,IAAM,EAAE,GAAG,MAAM,CAAC,CAAC,CAAC,CAAA;QACpB,IAAI,CAAC,IAAI,IAAI,CAAC,EAAE,EAAE;YAChB,OAAM;SACP;QAED,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,CAAA;QAC1B,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAA;KACvB;IAED,GAAG,CAAC,MAAM,EAAE,CAAA;AACd,CAAC;AAzBD,kCAyBC"}
\ No newline at end of file
import { DrawFaceExpressionsInput, DrawFaceExpressionsOptions } from './types';
export declare function drawFaceExpressions(canvasArg: string | HTMLCanvasElement, faceExpressions: DrawFaceExpressionsInput | DrawFaceExpressionsInput[], options?: DrawFaceExpressionsOptions): void;
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
var tfjs_image_recognition_base_1 = require("tfjs-image-recognition-base");
function drawFaceExpressions(canvasArg, faceExpressions, options) {
var canvas = tfjs_image_recognition_base_1.resolveInput(canvasArg);
if (!(canvas instanceof tfjs_image_recognition_base_1.env.getEnv().Canvas)) {
throw new Error('drawFaceExpressions - expected canvas to be of type: HTMLCanvasElement');
}
var drawOptions = Object.assign(tfjs_image_recognition_base_1.getDefaultDrawOptions(options), (options || {}));
var ctx = tfjs_image_recognition_base_1.getContext2dOrThrow(canvas);
var _a = drawOptions.primaryColor, primaryColor = _a === void 0 ? 'red' : _a, _b = drawOptions.secondaryColor, secondaryColor = _b === void 0 ? 'blue' : _b, _c = drawOptions.primaryFontSize, primaryFontSize = _c === void 0 ? 22 : _c, _d = drawOptions.secondaryFontSize, secondaryFontSize = _d === void 0 ? 16 : _d, _e = drawOptions.minConfidence, minConfidence = _e === void 0 ? 0.2 : _e;
var faceExpressionsArray = Array.isArray(faceExpressions)
? faceExpressions
: [faceExpressions];
faceExpressionsArray.forEach(function (_a) {
var position = _a.position, expressions = _a.expressions;
var x = position.x, y = position.y;
var height = position.height || 0;
var sorted = expressions.sort(function (a, b) { return b.probability - a.probability; });
var resultsToDisplay = sorted.filter(function (expr) { return expr.probability > minConfidence; });
var offset = (y + height + resultsToDisplay.length * primaryFontSize) > canvas.height
? -(resultsToDisplay.length * primaryFontSize)
: 0;
resultsToDisplay.forEach(function (expr, i) {
var text = expr.expression + " (" + tfjs_image_recognition_base_1.round(expr.probability) + ")";
tfjs_image_recognition_base_1.drawText(ctx, x, y + height + (i * primaryFontSize) + offset, text, {
textColor: i === 0 ? primaryColor : secondaryColor,
fontSize: i === 0 ? primaryFontSize : secondaryFontSize
});
});
});
}
exports.drawFaceExpressions = drawFaceExpressions;
//# sourceMappingURL=drawFaceExpressions.js.map
\ No newline at end of file
{"version":3,"file":"drawFaceExpressions.js","sourceRoot":"","sources":["../../../src/dom/drawFaceExpressions.ts"],"names":[],"mappings":";;AAAA,2EAA6H;AAK7H,SAAgB,mBAAmB,CACjC,SAAqC,EACrC,eAAsE,EACtE,OAAoC;IAEpC,IAAM,MAAM,GAAG,0CAAY,CAAC,SAAS,CAAC,CAAA;IACtC,IAAI,CAAC,CAAC,MAAM,YAAY,iCAAG,CAAC,MAAM,EAAE,CAAC,MAAM,CAAC,EAAE;QAC5C,MAAM,IAAI,KAAK,CAAC,wEAAwE,CAAC,CAAA;KAC1F;IAED,IAAM,WAAW,GAAG,MAAM,CAAC,MAAM,CAC/B,mDAAqB,CAAC,OAAO,CAAC,EAC9B,CAAC,OAAO,IAAI,EAAE,CAAC,CAChB,CAAA;IAED,IAAM,GAAG,GAAG,iDAAmB,CAAC,MAAM,CAAC,CAAA;IAErC,IAAA,6BAAoB,EAApB,yCAAoB,EACpB,+BAAuB,EAAvB,4CAAuB,EACvB,gCAAoB,EAApB,yCAAoB,EACpB,kCAAsB,EAAtB,2CAAsB,EACtB,8BAAmB,EAAnB,wCAAmB,CACN;IAEf,IAAM,oBAAoB,GAAG,KAAK,CAAC,OAAO,CAAC,eAAe,CAAC;QACzD,CAAC,CAAC,eAAe;QACjB,CAAC,CAAC,CAAC,eAAe,CAAC,CAAA;IAErB,oBAAoB,CAAC,OAAO,CAAC,UAAC,EAAyB;YAAvB,sBAAQ,EAAE,4BAAW;QAC3C,IAAA,cAAC,EAAE,cAAC,CAAa;QACzB,IAAM,MAAM,GAAI,QAAkB,CAAC,MAAM,IAAI,CAAC,CAAA;QAC9C,IAAM,MAAM,GAAG,WAAW,CAAC,IAAI,CAAC,UAAC,CAAC,EAAE,CAAC,IAAK,OAAA,CAAC,CAAC,WAAW,GAAG,CAAC,CAAC,WAAW,EAA7B,CAA6B,CAAC,CAAA;QACxE,IAAM,gBAAgB,GAAG,MAAM,CAAC,MAAM,CAAC,UAAA,IAAI,IAAI,OAAA,IAAI,CAAC,WAAW,GAAG,aAAa,EAAhC,CAAgC,CAAC,CAAA;QAEhF,IAAI,MAAM,GAAG,CAAC,CAAC,GAAG,MAAM,GAAG,gBAAgB,CAAC,MAAM,GAAG,eAAe,CAAC,GAAG,MAAM,CAAC,MAAM;YACnF,CAAC,CAAC,CAAC,CAAC,gBAAgB,CAAC,MAAM,GAAG,eAAe,CAAC;YAC9C,CAAC,CAAC,CAAC,CAAA;QACL,gBAAgB,CAAC,OAAO,CAAC,UAAC,IAAI,EAAE,CAAC;YAC/B,IAAM,IAAI,GAAM,IAAI,CAAC,UAAU,UAAK,mCAAK,CAAC,IAAI,CAAC,WAAW,CAAC,MAAG,CAAA;YAC9D,sCAAQ,CACN,GAAG,EACH,CAAC,EACD,CAAC,GAAG,MAAM,GAAG,CAAC,CAAC,GAAG,eAAe,CAAC,GAAG,MAAM,EAC3C,IAAI,EACJ;gBACE,SAAS,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,cAAc;gBAClD,QAAQ,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,iBAAiB;aACxD,CACF,CAAA;QACH,CAAC,CAAC,CAAA;IACJ,CAAC,CAAC,CAAA;AAGJ,CAAC;AArDD,kDAqDC"}
\ No newline at end of file
import { FaceLandmarks } from '../classes/FaceLandmarks';
import { DrawLandmarksOptions } from './types';
export declare function drawLandmarks(canvasArg: string | HTMLCanvasElement, faceLandmarks: FaceLandmarks | FaceLandmarks[], options?: DrawLandmarksOptions): void;
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
var tfjs_image_recognition_base_1 = require("tfjs-image-recognition-base");
var FaceLandmarks68_1 = require("../classes/FaceLandmarks68");
var drawContour_1 = require("./drawContour");
function drawLandmarks(canvasArg, faceLandmarks, options) {
var canvas = tfjs_image_recognition_base_1.resolveInput(canvasArg);
if (!(canvas instanceof tfjs_image_recognition_base_1.env.getEnv().Canvas)) {
throw new Error('drawLandmarks - expected canvas to be of type: HTMLCanvasElement');
}
var drawOptions = Object.assign(tfjs_image_recognition_base_1.getDefaultDrawOptions(options), (options || {}));
var drawLines = Object.assign({ drawLines: false }, (options || {})).drawLines;
var ctx = tfjs_image_recognition_base_1.getContext2dOrThrow(canvas);
var lineWidth = drawOptions.lineWidth, _a = drawOptions.color, color = _a === void 0 ? 'blue' : _a;
var faceLandmarksArray = Array.isArray(faceLandmarks) ? faceLandmarks : [faceLandmarks];
faceLandmarksArray.forEach(function (landmarks) {
if (drawLines && landmarks instanceof FaceLandmarks68_1.FaceLandmarks68) {
ctx.strokeStyle = color;
ctx.lineWidth = lineWidth;
drawContour_1.drawContour(ctx, landmarks.getJawOutline());
drawContour_1.drawContour(ctx, landmarks.getLeftEyeBrow());
drawContour_1.drawContour(ctx, landmarks.getRightEyeBrow());
drawContour_1.drawContour(ctx, landmarks.getNose());
drawContour_1.drawContour(ctx, landmarks.getLeftEye(), true);
drawContour_1.drawContour(ctx, landmarks.getRightEye(), true);
drawContour_1.drawContour(ctx, landmarks.getMouth(), true);
return;
}
// else draw points
var ptOffset = lineWidth / 2;
ctx.fillStyle = color;
landmarks.positions.forEach(function (pt) { return ctx.fillRect(pt.x - ptOffset, pt.y - ptOffset, lineWidth, lineWidth); });
});
}
exports.drawLandmarks = drawLandmarks;
//# sourceMappingURL=drawLandmarks.js.map
\ No newline at end of file
{"version":3,"file":"drawLandmarks.js","sourceRoot":"","sources":["../../../src/dom/drawLandmarks.ts"],"names":[],"mappings":";;AAAA,2EAA4G;AAG5G,8DAA6D;AAC7D,6CAA4C;AAG5C,SAAgB,aAAa,CAC3B,SAAqC,EACrC,aAA8C,EAC9C,OAA8B;IAE9B,IAAM,MAAM,GAAG,0CAAY,CAAC,SAAS,CAAC,CAAA;IACtC,IAAI,CAAC,CAAC,MAAM,YAAY,iCAAG,CAAC,MAAM,EAAE,CAAC,MAAM,CAAC,EAAE;QAC5C,MAAM,IAAI,KAAK,CAAC,kEAAkE,CAAC,CAAA;KACpF;IAED,IAAM,WAAW,GAAG,MAAM,CAAC,MAAM,CAC/B,mDAAqB,CAAC,OAAO,CAAC,EAC9B,CAAC,OAAO,IAAI,EAAE,CAAC,CAChB,CAAA;IAEO,IAAA,0EAAS,CAAyD;IAE1E,IAAM,GAAG,GAAG,iDAAmB,CAAC,MAAM,CAAC,CAAA;IAC/B,IAAA,iCAAS,EAAE,sBAAc,EAAd,mCAAc,CAAgB;IAEjD,IAAM,kBAAkB,GAAG,KAAK,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,CAAA;IAEzF,kBAAkB,CAAC,OAAO,CAAC,UAAA,SAAS;QAClC,IAAI,SAAS,IAAI,SAAS,YAAY,iCAAe,EAAE;YACrD,GAAG,CAAC,WAAW,GAAG,KAAK,CAAA;YACvB,GAAG,CAAC,SAAS,GAAG,SAAS,CAAA;YACzB,yBAAW,CAAC,GAAG,EAAE,SAAS,CAAC,aAAa,EAAE,CAAC,CAAA;YAC3C,yBAAW,CAAC,GAAG,EAAE,SAAS,CAAC,cAAc,EAAE,CAAC,CAAA;YAC5C,yBAAW,CAAC,GAAG,EAAE,SAAS,CAAC,eAAe,EAAE,CAAC,CAAA;YAC7C,yBAAW,CAAC,GAAG,EAAE,SAAS,CAAC,OAAO,EAAE,CAAC,CAAA;YACrC,yBAAW,CAAC,GAAG,EAAE,SAAS,CAAC,UAAU,EAAE,EAAE,IAAI,CAAC,CAAA;YAC9C,yBAAW,CAAC,GAAG,EAAE,SAAS,CAAC,WAAW,EAAE,EAAE,IAAI,CAAC,CAAA;YAC/C,yBAAW,CAAC,GAAG,EAAE,SAAS,CAAC,QAAQ,EAAE,EAAE,IAAI,CAAC,CAAA;YAC5C,OAAM;SACP;QAED,mBAAmB;QACnB,IAAM,QAAQ,GAAG,SAAS,GAAG,CAAC,CAAA;QAC9B,GAAG,CAAC,SAAS,GAAG,KAAK,CAAA;QACrB,SAAS,CAAC,SAAS,CAAC,OAAO,CAAC,UAAA,EAAE,IAAI,OAAA,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,GAAG,QAAQ,EAAE,EAAE,CAAC,CAAC,GAAG,QAAQ,EAAE,SAAS,EAAE,SAAS,CAAC,EAApE,CAAoE,CAAC,CAAA;IACzG,CAAC,CAAC,CAAA;AACJ,CAAC;AAzCD,sCAyCC"}
\ No newline at end of file
export * from './drawContour';
export * from './drawLandmarks';
export * from './drawFaceExpressions';
export * from './extractFaces';
export * from './extractFaceTensors';
export * from './types';
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
var tslib_1 = require("tslib");
tslib_1.__exportStar(require("./drawContour"), exports);
tslib_1.__exportStar(require("./drawLandmarks"), exports);
tslib_1.__exportStar(require("./drawFaceExpressions"), exports);
tslib_1.__exportStar(require("./extractFaces"), exports);
tslib_1.__exportStar(require("./extractFaceTensors"), exports);
//# sourceMappingURL=index.js.map
\ No newline at end of file
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/dom/index.ts"],"names":[],"mappings":";;;AAAA,wDAA6B;AAC7B,0DAA+B;AAC/B,gEAAqC;AACrC,yDAA8B;AAC9B,+DAAoC"}
\ No newline at end of file
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/dom/index.ts"],"names":[],"mappings":";;;AAAA,yDAA8B;AAC9B,+DAAoC"}
\ No newline at end of file
import { IPoint, IRect } from 'tfjs-image-recognition-base';
import { WithFaceExpressions } from '../factories/WithFaceExpressions';
export declare type DrawLandmarksOptions = {
lineWidth?: number;
color?: string;
drawLines?: boolean;
};
export declare type DrawFaceExpressionsOptions = {
primaryColor?: string;
secondaryColor?: string;
primaryFontSize?: number;
secondaryFontSize?: number;
minConfidence?: number;
};
export declare type DrawFaceExpressionsInput = WithFaceExpressions<{
position: IPoint | IRect;
}>;
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/dom/types.ts"],"names":[],"mappings":""}
\ No newline at end of file
import { FaceLandmarks } from '../classes/FaceLandmarks';
import { WithFaceDetection } from '../factories/WithFaceDetection';
import { WithFaceLandmarks } from '../factories/WithFaceLandmarks';
export interface IDrawFaceLandmarksOptions {
drawLines?: boolean;
drawPoints?: boolean;
lineWidth?: number;
pointSize?: number;
lineColor?: string;
pointColor?: string;
}
export declare class DrawFaceLandmarksOptions {
drawLines: boolean;
drawPoints: boolean;
lineWidth: number;
pointSize: number;
lineColor: string;
pointColor: string;
constructor(options?: IDrawFaceLandmarksOptions);
}
export declare class DrawFaceLandmarks {
faceLandmarks: FaceLandmarks;
options: DrawFaceLandmarksOptions;
constructor(faceLandmarks: FaceLandmarks, options?: IDrawFaceLandmarksOptions);
draw(canvasArg: string | HTMLCanvasElement | CanvasRenderingContext2D): void;
}
export declare type DrawFaceLandmarksInput = FaceLandmarks | WithFaceLandmarks<WithFaceDetection<{}>>;
export declare function drawFaceLandmarks(canvasArg: string | HTMLCanvasElement, faceLandmarks: DrawFaceLandmarksInput | Array<DrawFaceLandmarksInput>): void;
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
var tfjs_image_recognition_base_1 = require("tfjs-image-recognition-base");
var FaceLandmarks_1 = require("../classes/FaceLandmarks");
var FaceLandmarks68_1 = require("../classes/FaceLandmarks68");
var WithFaceLandmarks_1 = require("../factories/WithFaceLandmarks");
var drawContour_1 = require("./drawContour");
var DrawFaceLandmarksOptions = /** @class */ (function () {
function DrawFaceLandmarksOptions(options) {
if (options === void 0) { options = {}; }
var _a = options.drawLines, drawLines = _a === void 0 ? true : _a, _b = options.drawPoints, drawPoints = _b === void 0 ? true : _b, lineWidth = options.lineWidth, lineColor = options.lineColor, pointSize = options.pointSize, pointColor = options.pointColor;
this.drawLines = drawLines;
this.drawPoints = drawPoints;
this.lineWidth = lineWidth || 1;
this.pointSize = pointSize || 2;
this.lineColor = lineColor || 'rgba(0, 255, 255, 1)';
this.pointColor = pointColor || 'rgba(255, 0, 255, 1)';
}
return DrawFaceLandmarksOptions;
}());
exports.DrawFaceLandmarksOptions = DrawFaceLandmarksOptions;
var DrawFaceLandmarks = /** @class */ (function () {
function DrawFaceLandmarks(faceLandmarks, options) {
if (options === void 0) { options = {}; }
this.faceLandmarks = faceLandmarks;
this.options = new DrawFaceLandmarksOptions(options);
}
DrawFaceLandmarks.prototype.draw = function (canvasArg) {
var ctx = tfjs_image_recognition_base_1.getContext2dOrThrow(canvasArg);
var _a = this.options, drawLines = _a.drawLines, drawPoints = _a.drawPoints, lineWidth = _a.lineWidth, lineColor = _a.lineColor, pointSize = _a.pointSize, pointColor = _a.pointColor;
if (drawLines && this.faceLandmarks instanceof FaceLandmarks68_1.FaceLandmarks68) {
ctx.strokeStyle = lineColor;
ctx.lineWidth = lineWidth;
drawContour_1.drawContour(ctx, this.faceLandmarks.getJawOutline());
drawContour_1.drawContour(ctx, this.faceLandmarks.getLeftEyeBrow());
drawContour_1.drawContour(ctx, this.faceLandmarks.getRightEyeBrow());
drawContour_1.drawContour(ctx, this.faceLandmarks.getNose());
drawContour_1.drawContour(ctx, this.faceLandmarks.getLeftEye(), true);
drawContour_1.drawContour(ctx, this.faceLandmarks.getRightEye(), true);
drawContour_1.drawContour(ctx, this.faceLandmarks.getMouth(), true);
}
if (drawPoints) {
ctx.strokeStyle = pointColor;
ctx.fillStyle = pointColor;
var drawPoint = function (pt) {
ctx.beginPath();
ctx.arc(pt.x, pt.y, pointSize, 0, 2 * Math.PI);
ctx.fill();
};
this.faceLandmarks.positions.forEach(drawPoint);
}
};
return DrawFaceLandmarks;
}());
exports.DrawFaceLandmarks = DrawFaceLandmarks;
function drawFaceLandmarks(canvasArg, faceLandmarks) {
var faceLandmarksArray = Array.isArray(faceLandmarks) ? faceLandmarks : [faceLandmarks];
faceLandmarksArray.forEach(function (f) {
var landmarks = f instanceof FaceLandmarks_1.FaceLandmarks
? f
: (WithFaceLandmarks_1.isWithFaceLandmarks(f) ? f.landmarks : undefined);
if (!landmarks) {
throw new Error('drawFaceLandmarks - expected faceExpressions to be FaceLandmarks | WithFaceLandmarks<WithFaceDetection<{}>> or array thereof');
}
new DrawFaceLandmarks(landmarks).draw(canvasArg);
});
}
exports.drawFaceLandmarks = drawFaceLandmarks;
//# sourceMappingURL=DrawFaceLandmarks.js.map
\ No newline at end of file
{"version":3,"file":"DrawFaceLandmarks.js","sourceRoot":"","sources":["../../../src/draw/DrawFaceLandmarks.ts"],"names":[],"mappings":"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"}
\ No newline at end of file
{"version":3,"file":"drawContour.js","sourceRoot":"","sources":["../../../src/draw/drawContour.ts"],"names":[],"mappings":";;AAEA,SAAgB,WAAW,CACzB,GAA6B,EAC7B,MAAe,EACf,QAAyB;IAAzB,yBAAA,EAAA,gBAAyB;IAEzB,GAAG,CAAC,SAAS,EAAE,CAAA;IAEf,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,UAAC,EAAQ,EAAE,OAAO;YAAf,QAAC,EAAE,QAAC;QAC7B,IAAM,IAAI,GAAG,MAAM,CAAC,OAAO,CAAC,CAAA;QAC5B,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,CAAA;QAC1B,GAAG,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA;IAClB,CAAC,CAAC,CAAA;IAEF,IAAI,QAAQ,EAAE;QACZ,IAAM,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAA;QACtC,IAAM,EAAE,GAAG,MAAM,CAAC,CAAC,CAAC,CAAA;QACpB,IAAI,CAAC,IAAI,IAAI,CAAC,EAAE,EAAE;YAChB,OAAM;SACP;QAED,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,CAAA;QAC1B,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAA;KACvB;IAED,GAAG,CAAC,MAAM,EAAE,CAAA;AACd,CAAC;AAzBD,kCAyBC"}
\ No newline at end of file
import { IBoundingBox, IRect } from 'tfjs-image-recognition-base';
import { FaceDetection } from '../classes/FaceDetection';
import { WithFaceDetection } from '../factories/WithFaceDetection';
export declare type TDrawDetectionsInput = IRect | IBoundingBox | FaceDetection | WithFaceDetection<{}>;
export declare function drawDetections(canvasArg: string | HTMLCanvasElement, detections: TDrawDetectionsInput | Array<TDrawDetectionsInput>): void;
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
var tfjs_image_recognition_base_1 = require("tfjs-image-recognition-base");
var FaceDetection_1 = require("../classes/FaceDetection");
var WithFaceDetection_1 = require("../factories/WithFaceDetection");
function drawDetections(canvasArg, detections) {
var detectionsArray = Array.isArray(detections) ? detections : [detections];
detectionsArray.forEach(function (det) {
var score = det instanceof FaceDetection_1.FaceDetection
? det.score
: (WithFaceDetection_1.isWithFaceDetection(det) ? det.detection.score : undefined);
var box = det instanceof FaceDetection_1.FaceDetection
? det.box
: (WithFaceDetection_1.isWithFaceDetection(det) ? det.detection.box : new tfjs_image_recognition_base_1.Box(det));
var label = score ? "" + tfjs_image_recognition_base_1.round(score) : undefined;
new tfjs_image_recognition_base_1.draw.DrawBox(box, { label: label }).draw(canvasArg);
});
}
exports.drawDetections = drawDetections;
//# sourceMappingURL=drawDetections.js.map
\ No newline at end of file
{"version":3,"file":"drawDetections.js","sourceRoot":"","sources":["../../../src/draw/drawDetections.ts"],"names":[],"mappings":";;AAAA,2EAAoF;AAEpF,0DAAyD;AACzD,oEAAwF;AAIxF,SAAgB,cAAc,CAC5B,SAAqC,EACrC,UAA8D;IAE9D,IAAM,eAAe,GAAG,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAA;IAE7E,eAAe,CAAC,OAAO,CAAC,UAAA,GAAG;QACzB,IAAM,KAAK,GAAG,GAAG,YAAY,6BAAa;YACxC,CAAC,CAAC,GAAG,CAAC,KAAK;YACX,CAAC,CAAC,CAAC,uCAAmB,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC,CAAA;QAEhE,IAAM,GAAG,GAAG,GAAG,YAAY,6BAAa;YACtC,CAAC,CAAC,GAAG,CAAC,GAAG;YACT,CAAC,CAAC,CAAC,uCAAmB,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,iCAAG,CAAC,GAAG,CAAC,CAAC,CAAA;QAEjE,IAAM,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC,KAAG,mCAAK,CAAC,KAAK,CAAG,CAAC,CAAC,CAAC,SAAS,CAAA;QACnD,IAAI,kCAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,KAAK,OAAA,EAAE,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAA;IAClD,CAAC,CAAC,CAAA;AACJ,CAAC;AAlBD,wCAkBC"}
\ No newline at end of file
import { IPoint } from 'tfjs-image-recognition-base';
import { FaceExpressions } from '../faceExpressionNet';
import { WithFaceExpressions } from '../factories/WithFaceExpressions';
export declare type DrawFaceExpressionsInput = FaceExpressions | WithFaceExpressions<{}>;
export declare function drawFaceExpressions(canvasArg: string | HTMLCanvasElement, faceExpressions: DrawFaceExpressionsInput | Array<DrawFaceExpressionsInput>, minConfidence?: number, textFieldAnchor?: IPoint): void;
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
var tfjs_image_recognition_base_1 = require("tfjs-image-recognition-base");
var faceExpressionNet_1 = require("../faceExpressionNet");
var WithFaceDetection_1 = require("../factories/WithFaceDetection");
var WithFaceExpressions_1 = require("../factories/WithFaceExpressions");
function drawFaceExpressions(canvasArg, faceExpressions, minConfidence, textFieldAnchor) {
if (minConfidence === void 0) { minConfidence = 0.1; }
var faceExpressionsArray = Array.isArray(faceExpressions) ? faceExpressions : [faceExpressions];
faceExpressionsArray.forEach(function (e) {
var expr = e instanceof faceExpressionNet_1.FaceExpressions
? e
: (WithFaceExpressions_1.isWithFaceExpressions(e) ? e.expressions : undefined);
if (!expr) {
throw new Error('drawFaceExpressions - expected faceExpressions to be FaceExpressions | WithFaceExpressions<{}> or array thereof');
}
var sorted = expr.asSortedArray();
var resultsToDisplay = sorted.filter(function (expr) { return expr.probability > minConfidence; });
var anchor = WithFaceDetection_1.isWithFaceDetection(e)
? e.detection.box.bottomLeft
: (textFieldAnchor || new tfjs_image_recognition_base_1.Point(0, 0));
var drawTextField = new tfjs_image_recognition_base_1.draw.DrawTextField(resultsToDisplay.map(function (expr) { return expr.expression + " (" + tfjs_image_recognition_base_1.round(expr.probability) + ")"; }), anchor);
drawTextField.draw(canvasArg);
});
}
exports.drawFaceExpressions = drawFaceExpressions;
//# sourceMappingURL=drawFaceExpressions.js.map
\ No newline at end of file
{"version":3,"file":"drawFaceExpressions.js","sourceRoot":"","sources":["../../../src/draw/drawFaceExpressions.ts"],"names":[],"mappings":";;AAAA,2EAAyE;AAEzE,0DAAuD;AACvD,oEAAqE;AACrE,wEAA8F;AAI9F,SAAgB,mBAAmB,CACjC,SAAqC,EACrC,eAA2E,EAC3E,aAAmB,EACnB,eAAwB;IADxB,8BAAA,EAAA,mBAAmB;IAGnB,IAAM,oBAAoB,GAAG,KAAK,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,eAAe,CAAC,CAAA;IAEjG,oBAAoB,CAAC,OAAO,CAAC,UAAA,CAAC;QAC5B,IAAM,IAAI,GAAG,CAAC,YAAY,mCAAe;YACvC,CAAC,CAAC,CAAC;YACH,CAAC,CAAC,CAAC,2CAAqB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,SAAS,CAAC,CAAA;QAC1D,IAAI,CAAC,IAAI,EAAE;YACT,MAAM,IAAI,KAAK,CAAC,iHAAiH,CAAC,CAAA;SACnI;QAED,IAAM,MAAM,GAAG,IAAI,CAAC,aAAa,EAAE,CAAA;QACnC,IAAM,gBAAgB,GAAG,MAAM,CAAC,MAAM,CAAC,UAAA,IAAI,IAAI,OAAA,IAAI,CAAC,WAAW,GAAG,aAAa,EAAhC,CAAgC,CAAC,CAAA;QAEhF,IAAM,MAAM,GAAG,uCAAmB,CAAC,CAAC,CAAC;YACnC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,GAAG,CAAC,UAAU;YAC5B,CAAC,CAAC,CAAC,eAAe,IAAI,IAAI,mCAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAA;QAExC,IAAM,aAAa,GAAG,IAAI,kCAAI,CAAC,aAAa,CAC1C,gBAAgB,CAAC,GAAG,CAAC,UAAA,IAAI,IAAI,OAAG,IAAI,CAAC,UAAU,UAAK,mCAAK,CAAC,IAAI,CAAC,WAAW,CAAC,MAAG,EAAjD,CAAiD,CAAC,EAC/E,MAAM,CACP,CAAA;QACD,aAAa,CAAC,IAAI,CAAC,SAAS,CAAC,CAAA;IAC/B,CAAC,CAAC,CAAA;AACJ,CAAC;AA7BD,kDA6BC"}
\ No newline at end of file
export * from './drawContour';
export * from './drawDetections';
export * from './drawFaceExpressions';
export * from './DrawFaceLandmarks';
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
var tslib_1 = require("tslib");
tslib_1.__exportStar(require("./drawContour"), exports);
tslib_1.__exportStar(require("./drawDetections"), exports);
tslib_1.__exportStar(require("./drawFaceExpressions"), exports);
tslib_1.__exportStar(require("./DrawFaceLandmarks"), exports);
//# sourceMappingURL=index.js.map
\ No newline at end of file
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/draw/index.ts"],"names":[],"mappings":";;;AAAA,wDAA6B;AAC7B,2DAAgC;AAChC,gEAAqC;AACrC,8DAAmC"}
\ No newline at end of file
......@@ -3,14 +3,12 @@ import { NetInput, TNetInput } from 'tfjs-image-recognition-base';
import { FaceFeatureExtractor } from '../faceFeatureExtractor/FaceFeatureExtractor';
import { FaceFeatureExtractorParams } from '../faceFeatureExtractor/types';
import { FaceProcessor } from '../faceProcessor/FaceProcessor';
import { FaceExpressionPrediction } from './types';
import { FaceExpressions } from './FaceExpressions';
export declare class FaceExpressionNet extends FaceProcessor<FaceFeatureExtractorParams> {
static getFaceExpressionLabel(faceExpression: string): number;
static decodeProbabilites(probabilities: number[] | Float32Array): FaceExpressionPrediction[];
constructor(faceFeatureExtractor?: FaceFeatureExtractor);
forwardInput(input: NetInput | tf.Tensor4D): tf.Tensor2D;
forward(input: TNetInput): Promise<tf.Tensor2D>;
predictExpressions(input: TNetInput): Promise<FaceExpressionPrediction[] | FaceExpressionPrediction[][]>;
predictExpressions(input: TNetInput): Promise<FaceExpressions | FaceExpressions[]>;
protected getDefaultModelName(): string;
protected getClassifierChannelsIn(): number;
protected getClassifierChannelsOut(): number;
......
......@@ -5,27 +5,13 @@ var tf = require("@tensorflow/tfjs-core");
var tfjs_image_recognition_base_1 = require("tfjs-image-recognition-base");
var FaceFeatureExtractor_1 = require("../faceFeatureExtractor/FaceFeatureExtractor");
var FaceProcessor_1 = require("../faceProcessor/FaceProcessor");
var types_1 = require("./types");
var FaceExpressions_1 = require("./FaceExpressions");
var FaceExpressionNet = /** @class */ (function (_super) {
tslib_1.__extends(FaceExpressionNet, _super);
function FaceExpressionNet(faceFeatureExtractor) {
if (faceFeatureExtractor === void 0) { faceFeatureExtractor = new FaceFeatureExtractor_1.FaceFeatureExtractor(); }
return _super.call(this, 'FaceExpressionNet', faceFeatureExtractor) || this;
}
FaceExpressionNet.getFaceExpressionLabel = function (faceExpression) {
var label = types_1.faceExpressionLabels[faceExpression];
if (typeof label !== 'number') {
throw new Error("getFaceExpressionLabel - no label for faceExpression: " + faceExpression);
}
return label;
};
FaceExpressionNet.decodeProbabilites = function (probabilities) {
if (probabilities.length !== 7) {
throw new Error("decodeProbabilites - expected probabilities.length to be 7, have: " + probabilities.length);
}
return Object.keys(types_1.faceExpressionLabels)
.map(function (expression) { return ({ expression: expression, probability: probabilities[types_1.faceExpressionLabels[expression]] }); });
};
FaceExpressionNet.prototype.forwardInput = function (input) {
var _this = this;
return tf.tidy(function () { return tf.softmax(_this.runNet(input)); });
......@@ -71,7 +57,7 @@ var FaceExpressionNet = /** @class */ (function (_super) {
probabilitesByBatch = _a.sent();
out.dispose();
predictionsByBatch = probabilitesByBatch
.map(function (propablities) { return FaceExpressionNet.decodeProbabilites(propablities); });
.map(function (probabilites) { return new FaceExpressions_1.FaceExpressions(probabilites); });
return [2 /*return*/, netInput.isBatchInput
? predictionsByBatch
: predictionsByBatch[0]];
......
{"version":3,"file":"FaceExpressionNet.js","sourceRoot":"","sources":["../../../src/faceExpressionNet/FaceExpressionNet.ts"],"names":[],"mappings":";;;AAAA,0CAA4C;AAC5C,2EAA8E;AAE9E,qFAAoF;AAEpF,gEAA+D;AAC/D,iCAAyF;AAEzF;IAAuC,6CAAyC;IAqB9E,2BAAY,oBAAuE;QAAvE,qCAAA,EAAA,2BAAiD,2CAAoB,EAAE;eACjF,kBAAM,mBAAmB,EAAE,oBAAoB,CAAC;IAClD,CAAC;IArBa,wCAAsB,GAApC,UAAqC,cAAsB;QACzD,IAAM,KAAK,GAAG,4BAAoB,CAAC,cAAc,CAAC,CAAA;QAElD,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;YAC7B,MAAM,IAAI,KAAK,CAAC,2DAAyD,cAAgB,CAAC,CAAA;SAC3F;QAED,OAAO,KAAK,CAAA;IACd,CAAC;IAEa,oCAAkB,GAAhC,UAAiC,aAAsC;QACrE,IAAI,aAAa,CAAC,MAAM,KAAK,CAAC,EAAE;YAC9B,MAAM,IAAI,KAAK,CAAC,uEAAqE,aAAa,CAAC,MAAQ,CAAC,CAAA;SAC7G;QAED,OAAQ,MAAM,CAAC,IAAI,CAAC,4BAAoB,CAAsB;aAC3D,GAAG,CAAC,UAAA,UAAU,IAAI,OAAA,CAAC,EAAE,UAAU,YAAA,EAAE,WAAW,EAAE,aAAa,CAAC,4BAAoB,CAAC,UAAU,CAAC,CAAC,EAAE,CAAC,EAA9E,CAA8E,CAAC,CAAA;IACtG,CAAC;IAMM,wCAAY,GAAnB,UAAoB,KAA6B;QAAjD,iBAEC;QADC,OAAO,EAAE,CAAC,IAAI,CAAC,cAAM,OAAA,EAAE,CAAC,OAAO,CAAC,KAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EAA9B,CAA8B,CAAC,CAAA;IACtD,CAAC;IAEY,mCAAO,GAApB,UAAqB,KAAgB;;;;;;wBAC5B,KAAA,IAAI,CAAC,YAAY,CAAA;wBAAC,qBAAM,wCAAU,CAAC,KAAK,CAAC,EAAA;4BAAhD,sBAAO,SAAA,IAAI,GAAc,SAAuB,EAAC,EAAA;;;;KAClD;IAEY,8CAAkB,GAA/B,UAAgC,KAAgB;;;;;;4BAC7B,qBAAM,wCAAU,CAAC,KAAK,CAAC,EAAA;;wBAAlC,QAAQ,GAAG,SAAuB;wBAC5B,qBAAM,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,EAAA;;wBAAvC,GAAG,GAAG,SAAiC;wBACjB,qBAAM,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,UAAM,CAAC;;;;gDAC1D,qBAAM,CAAC,CAAC,IAAI,EAAE,EAAA;;4CAArB,IAAI,GAAG,SAAc;4CAC3B,CAAC,CAAC,OAAO,EAAE,CAAA;4CACX,sBAAO,IAAI,EAAA;;;iCACZ,CAAC,CAAC,EAAA;;wBAJG,mBAAmB,GAAG,SAIzB;wBACH,GAAG,CAAC,OAAO,EAAE,CAAA;wBAEP,kBAAkB,GAAG,mBAAmB;6BAC3C,GAAG,CAAC,UAAA,YAAY,IAAI,OAAA,iBAAiB,CAAC,kBAAkB,CAAC,YAA4B,CAAC,EAAlE,CAAkE,CAAC,CAAA;wBAE1F,sBAAO,QAAQ,CAAC,YAAY;gCAC1B,CAAC,CAAC,kBAAkB;gCACpB,CAAC,CAAC,kBAAkB,CAAC,CAAC,CAAC,EAAA;;;;KAC1B;IAES,+CAAmB,GAA7B;QACE,OAAO,uBAAuB,CAAA;IAChC,CAAC;IAES,mDAAuB,GAAjC;QACE,OAAO,GAAG,CAAA;IACZ,CAAC;IAES,oDAAwB,GAAlC;QACE,OAAO,CAAC,CAAA;IACV,CAAC;IACH,wBAAC;AAAD,CAAC,AA9DD,CAAuC,6BAAa,GA8DnD;AA9DY,8CAAiB"}
\ No newline at end of file
{"version":3,"file":"FaceExpressionNet.js","sourceRoot":"","sources":["../../../src/faceExpressionNet/FaceExpressionNet.ts"],"names":[],"mappings":";;;AAAA,0CAA4C;AAC5C,2EAA8E;AAE9E,qFAAoF;AAEpF,gEAA+D;AAC/D,qDAAoD;AAEpD;IAAuC,6CAAyC;IAE9E,2BAAY,oBAAuE;QAAvE,qCAAA,EAAA,2BAAiD,2CAAoB,EAAE;eACjF,kBAAM,mBAAmB,EAAE,oBAAoB,CAAC;IAClD,CAAC;IAEM,wCAAY,GAAnB,UAAoB,KAA6B;QAAjD,iBAEC;QADC,OAAO,EAAE,CAAC,IAAI,CAAC,cAAM,OAAA,EAAE,CAAC,OAAO,CAAC,KAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EAA9B,CAA8B,CAAC,CAAA;IACtD,CAAC;IAEY,mCAAO,GAApB,UAAqB,KAAgB;;;;;;wBAC5B,KAAA,IAAI,CAAC,YAAY,CAAA;wBAAC,qBAAM,wCAAU,CAAC,KAAK,CAAC,EAAA;4BAAhD,sBAAO,SAAA,IAAI,GAAc,SAAuB,EAAC,EAAA;;;;KAClD;IAEY,8CAAkB,GAA/B,UAAgC,KAAgB;;;;;;4BAC7B,qBAAM,wCAAU,CAAC,KAAK,CAAC,EAAA;;wBAAlC,QAAQ,GAAG,SAAuB;wBAC5B,qBAAM,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,EAAA;;wBAAvC,GAAG,GAAG,SAAiC;wBACjB,qBAAM,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,UAAM,CAAC;;;;gDAC1D,qBAAM,CAAC,CAAC,IAAI,EAAE,EAAA;;4CAArB,IAAI,GAAG,SAAc;4CAC3B,CAAC,CAAC,OAAO,EAAE,CAAA;4CACX,sBAAO,IAAI,EAAA;;;iCACZ,CAAC,CAAC,EAAA;;wBAJG,mBAAmB,GAAG,SAIzB;wBACH,GAAG,CAAC,OAAO,EAAE,CAAA;wBAEP,kBAAkB,GAAG,mBAAmB;6BAC3C,GAAG,CAAC,UAAA,YAAY,IAAI,OAAA,IAAI,iCAAe,CAAC,YAA4B,CAAC,EAAjD,CAAiD,CAAC,CAAA;wBAEzE,sBAAO,QAAQ,CAAC,YAAY;gCAC1B,CAAC,CAAC,kBAAkB;gCACpB,CAAC,CAAC,kBAAkB,CAAC,CAAC,CAAC,EAAA;;;;KAC1B;IAES,+CAAmB,GAA7B;QACE,OAAO,uBAAuB,CAAA;IAChC,CAAC;IAES,mDAAuB,GAAjC;QACE,OAAO,GAAG,CAAA;IACZ,CAAC;IAES,oDAAwB,GAAlC;QACE,OAAO,CAAC,CAAA;IACV,CAAC;IACH,wBAAC;AAAD,CAAC,AA3CD,CAAuC,6BAAa,GA2CnD;AA3CY,8CAAiB"}
\ No newline at end of file
export declare const faceExpressionLabels: {
export declare const FACE_EXPRESSION_LABELS: string[];
export declare class FaceExpressions {
neutral: number;
happy: number;
sad: number;
......@@ -6,9 +7,9 @@ export declare const faceExpressionLabels: {
fearful: number;
disgusted: number;
surprised: number;
};
export declare type FaceExpression = 'neutral' | 'happy' | 'sad' | 'angry' | 'fearful' | 'disgusted' | 'surprised';
export declare type FaceExpressionPrediction = {
expression: FaceExpression;
probability: number;
};
constructor(probabilities: number[] | Float32Array);
asSortedArray(): {
expression: string;
probability: number;
}[];
}
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.FACE_EXPRESSION_LABELS = ['neutral', 'happy', 'sad', 'angry', 'fearful', 'disgusted', 'surprised'];
var FaceExpressions = /** @class */ (function () {
function FaceExpressions(probabilities) {
var _this = this;
if (probabilities.length !== 7) {
throw new Error("FaceExpressions.constructor - expected probabilities.length to be 7, have: " + probabilities.length);
}
exports.FACE_EXPRESSION_LABELS.forEach(function (expression, idx) {
_this[expression] = probabilities[idx];
});
}
FaceExpressions.prototype.asSortedArray = function () {
var _this = this;
return exports.FACE_EXPRESSION_LABELS
.map(function (expression) { return ({ expression: expression, probability: _this[expression] }); })
.sort(function (e0, e1) { return e1.probability - e0.probability; });
};
return FaceExpressions;
}());
exports.FaceExpressions = FaceExpressions;
//# sourceMappingURL=FaceExpressions.js.map
\ No newline at end of file
{"version":3,"file":"FaceExpressions.js","sourceRoot":"","sources":["../../../src/faceExpressionNet/FaceExpressions.ts"],"names":[],"mappings":";;AAAa,QAAA,sBAAsB,GAAG,CAAC,SAAS,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,WAAW,CAAC,CAAA;AAE/G;IASE,yBAAY,aAAsC;QAAlD,iBAQC;QAPC,IAAI,aAAa,CAAC,MAAM,KAAK,CAAC,EAAE;YAC9B,MAAM,IAAI,KAAK,CAAC,gFAA8E,aAAa,CAAC,MAAQ,CAAC,CAAA;SACtH;QAED,8BAAsB,CAAC,OAAO,CAAC,UAAC,UAAU,EAAE,GAAG;YAC7C,KAAI,CAAC,UAAU,CAAC,GAAG,aAAa,CAAC,GAAG,CAAC,CAAA;QACvC,CAAC,CAAC,CAAA;IACJ,CAAC;IAED,uCAAa,GAAb;QAAA,iBAIC;QAHC,OAAO,8BAAsB;aAC1B,GAAG,CAAC,UAAA,UAAU,IAAI,OAAA,CAAC,EAAE,UAAU,YAAA,EAAE,WAAW,EAAE,KAAI,CAAC,UAAU,CAAW,EAAE,CAAC,EAAzD,CAAyD,CAAC;aAC5E,IAAI,CAAC,UAAC,EAAE,EAAE,EAAE,IAAK,OAAA,EAAE,CAAC,WAAW,GAAG,EAAE,CAAC,WAAW,EAA/B,CAA+B,CAAC,CAAA;IACtD,CAAC;IACH,sBAAC;AAAD,CAAC,AAxBD,IAwBC;AAxBY,0CAAe"}
\ No newline at end of file
export * from './FaceExpressionNet';
export * from './types';
export * from './FaceExpressions';
......@@ -2,5 +2,5 @@
Object.defineProperty(exports, "__esModule", { value: true });
var tslib_1 = require("tslib");
tslib_1.__exportStar(require("./FaceExpressionNet"), exports);
tslib_1.__exportStar(require("./types"), exports);
tslib_1.__exportStar(require("./FaceExpressions"), exports);
//# sourceMappingURL=index.js.map
\ No newline at end of file
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/faceExpressionNet/index.ts"],"names":[],"mappings":";;;AAAA,8DAAoC;AACpC,kDAAwB"}
\ No newline at end of file
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/faceExpressionNet/index.ts"],"names":[],"mappings":";;;AAAA,8DAAoC;AACpC,4DAAkC"}
\ No newline at end of file
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.faceExpressionLabels = {
neutral: 0,
happy: 1,
sad: 2,
angry: 3,
fearful: 4,
disgusted: 5,
surprised: 6
};
//# sourceMappingURL=types.js.map
\ No newline at end of file
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/faceExpressionNet/types.ts"],"names":[],"mappings":";;AAAa,QAAA,oBAAoB,GAAG;IAClC,OAAO,EAAE,CAAC;IACV,KAAK,EAAE,CAAC;IACR,GAAG,EAAE,CAAC;IACN,KAAK,EAAE,CAAC;IACR,OAAO,EAAE,CAAC;IACV,SAAS,EAAE,CAAC;IACZ,SAAS,EAAC,CAAC;CACZ,CAAA"}
\ No newline at end of file
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
var tf = require("@tensorflow/tfjs-core");
var depthwiseSeparableConv_1 = require("./depthwiseSeparableConv");
var depthwiseSeparableConv_1 = require("../common/depthwiseSeparableConv");
function denseBlock3(x, denseBlockParams, isFirstLayer) {
if (isFirstLayer === void 0) { isFirstLayer = false; }
return tf.tidy(function () {
......
{"version":3,"file":"denseBlock.js","sourceRoot":"","sources":["../../../src/faceFeatureExtractor/denseBlock.ts"],"names":[],"mappings":"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"}
\ No newline at end of file
{"version":3,"file":"denseBlock.js","sourceRoot":"","sources":["../../../src/faceFeatureExtractor/denseBlock.ts"],"names":[],"mappings":"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"}
\ No newline at end of file
{"version":3,"file":"depthwiseSeparableConv.js","sourceRoot":"","sources":["../../../src/faceFeatureExtractor/depthwiseSeparableConv.ts"],"names":[],"mappings":";;AAAA,0CAA4C;AAG5C,SAAgB,sBAAsB,CACpC,CAAc,EACd,MAAoD,EACpD,MAAwB;IAExB,OAAO,EAAE,CAAC,IAAI,CAAC;QACb,IAAI,GAAG,GAAG,EAAE,CAAC,eAAe,CAAC,CAAC,EAAE,MAAM,CAAC,gBAAgB,EAAE,MAAM,CAAC,gBAAgB,EAAE,MAAM,EAAE,MAAM,CAAC,CAAA;QACjG,GAAG,GAAG,EAAE,CAAC,GAAG,CAAC,GAAG,EAAE,MAAM,CAAC,IAAI,CAAC,CAAA;QAC9B,OAAO,GAAG,CAAA;IACZ,CAAC,CAAC,CAAA;AACJ,CAAC;AAVD,wDAUC"}
\ No newline at end of file
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
var tf = require("@tensorflow/tfjs-core");
var tfjs_image_recognition_base_1 = require("tfjs-image-recognition-base");
function extractorsFactory(extractWeights, paramMappings) {
function extractSeparableConvParams(channelsIn, channelsOut, mappedPrefix) {
var depthwise_filter = tf.tensor4d(extractWeights(3 * 3 * channelsIn), [3, 3, channelsIn, 1]);
var pointwise_filter = tf.tensor4d(extractWeights(channelsIn * channelsOut), [1, 1, channelsIn, channelsOut]);
var bias = tf.tensor1d(extractWeights(channelsOut));
paramMappings.push({ paramPath: mappedPrefix + "/depthwise_filter" }, { paramPath: mappedPrefix + "/pointwise_filter" }, { paramPath: mappedPrefix + "/bias" });
return new tfjs_image_recognition_base_1.TfjsImageRecognitionBase.SeparableConvParams(depthwise_filter, pointwise_filter, bias);
}
var extractConvParams = tfjs_image_recognition_base_1.TfjsImageRecognitionBase.extractConvParamsFactory(extractWeights, paramMappings);
var extractSeparableConvParams = tfjs_image_recognition_base_1.TfjsImageRecognitionBase.extractSeparableConvParamsFactory(extractWeights, paramMappings);
function extractDenseBlock3Params(channelsIn, channelsOut, mappedPrefix, isFirstLayer) {
if (isFirstLayer === void 0) { isFirstLayer = false; }
var conv0 = isFirstLayer
......
{"version":3,"file":"extractorsFactory.js","sourceRoot":"","sources":["../../../src/faceFeatureExtractor/extractorsFactory.ts"],"names":[],"mappings":";;AAAA,0CAA4C;AAC5C,2EAAuE;AAIvE,SAAgB,iBAAiB,CAAC,cAA+D,EAAE,aAAsD;IAEvJ,SAAS,0BAA0B,CAAC,UAAkB,EAAE,WAAmB,EAAE,YAAoB;QAC/F,IAAM,gBAAgB,GAAG,EAAE,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAC,GAAG,CAAC,GAAG,UAAU,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,UAAU,EAAE,CAAC,CAAC,CAAC,CAAA;QAC/F,IAAM,gBAAgB,GAAG,EAAE,CAAC,QAAQ,CAAC,cAAc,CAAC,UAAU,GAAG,WAAW,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,UAAU,EAAE,WAAW,CAAC,CAAC,CAAA;QAC/G,IAAM,IAAI,GAAG,EAAE,CAAC,QAAQ,CAAC,cAAc,CAAC,WAAW,CAAC,CAAC,CAAA;QAErD,aAAa,CAAC,IAAI,CAChB,EAAE,SAAS,EAAK,YAAY,sBAAmB,EAAE,EACjD,EAAE,SAAS,EAAK,YAAY,sBAAmB,EAAE,EACjD,EAAE,SAAS,EAAK,YAAY,UAAO,EAAE,CACtC,CAAA;QAED,OAAO,IAAI,sDAAwB,CAAC,mBAAmB,CACrD,gBAAgB,EAChB,gBAAgB,EAChB,IAAI,CACL,CAAA;IACH,CAAC;IAED,IAAM,iBAAiB,GAAG,sDAAwB,CAAC,wBAAwB,CAAC,cAAc,EAAE,aAAa,CAAC,CAAA;IAE1G,SAAS,wBAAwB,CAAC,UAAkB,EAAE,WAAmB,EAAE,YAAoB,EAAE,YAA6B;QAA7B,6BAAA,EAAA,oBAA6B;QAE5H,IAAM,KAAK,GAAG,YAAY;YACxB,CAAC,CAAC,iBAAiB,CAAC,UAAU,EAAE,WAAW,EAAE,CAAC,EAAK,YAAY,WAAQ,CAAC;YACxE,CAAC,CAAC,0BAA0B,CAAC,UAAU,EAAE,WAAW,EAAK,YAAY,WAAQ,CAAC,CAAA;QAChF,IAAM,KAAK,GAAG,0BAA0B,CAAC,WAAW,EAAE,WAAW,EAAK,YAAY,WAAQ,CAAC,CAAA;QAC3F,IAAM,KAAK,GAAG,0BAA0B,CAAC,WAAW,EAAE,WAAW,EAAK,YAAY,WAAQ,CAAC,CAAA;QAE3F,OAAO,EAAE,KAAK,OAAA,EAAE,KAAK,OAAA,EAAE,KAAK,OAAA,EAAE,CAAA;IAChC,CAAC;IAED,SAAS,wBAAwB,CAAC,UAAkB,EAAE,WAAmB,EAAE,YAAoB,EAAE,YAA6B;QAA7B,6BAAA,EAAA,oBAA6B;QAEtH,IAAA,kFAAuG,EAArG,gBAAK,EAAE,gBAAK,EAAE,gBAAuF,CAAA;QAC7G,IAAM,KAAK,GAAG,0BAA0B,CAAC,WAAW,EAAE,WAAW,EAAK,YAAY,WAAQ,CAAC,CAAA;QAE3F,OAAO,EAAE,KAAK,OAAA,EAAE,KAAK,OAAA,EAAE,KAAK,OAAA,EAAE,KAAK,OAAA,EAAE,CAAA;IACvC,CAAC;IAED,OAAO;QACL,wBAAwB,0BAAA;QACxB,wBAAwB,0BAAA;KACzB,CAAA;AAEH,CAAC;AA9CD,8CA8CC"}
\ No newline at end of file
{"version":3,"file":"extractorsFactory.js","sourceRoot":"","sources":["../../../src/faceFeatureExtractor/extractorsFactory.ts"],"names":[],"mappings":";;AAAA,2EAAuE;AAIvE,SAAgB,iBAAiB,CAAC,cAA+D,EAAE,aAAsD;IAEvJ,IAAM,iBAAiB,GAAG,sDAAwB,CAAC,wBAAwB,CAAC,cAAc,EAAE,aAAa,CAAC,CAAA;IAC1G,IAAM,0BAA0B,GAAG,sDAAwB,CAAC,iCAAiC,CAAC,cAAc,EAAE,aAAa,CAAC,CAAA;IAE5H,SAAS,wBAAwB,CAAC,UAAkB,EAAE,WAAmB,EAAE,YAAoB,EAAE,YAA6B;QAA7B,6BAAA,EAAA,oBAA6B;QAE5H,IAAM,KAAK,GAAG,YAAY;YACxB,CAAC,CAAC,iBAAiB,CAAC,UAAU,EAAE,WAAW,EAAE,CAAC,EAAK,YAAY,WAAQ,CAAC;YACxE,CAAC,CAAC,0BAA0B,CAAC,UAAU,EAAE,WAAW,EAAK,YAAY,WAAQ,CAAC,CAAA;QAChF,IAAM,KAAK,GAAG,0BAA0B,CAAC,WAAW,EAAE,WAAW,EAAK,YAAY,WAAQ,CAAC,CAAA;QAC3F,IAAM,KAAK,GAAG,0BAA0B,CAAC,WAAW,EAAE,WAAW,EAAK,YAAY,WAAQ,CAAC,CAAA;QAE3F,OAAO,EAAE,KAAK,OAAA,EAAE,KAAK,OAAA,EAAE,KAAK,OAAA,EAAE,CAAA;IAChC,CAAC;IAED,SAAS,wBAAwB,CAAC,UAAkB,EAAE,WAAmB,EAAE,YAAoB,EAAE,YAA6B;QAA7B,6BAAA,EAAA,oBAA6B;QAEtH,IAAA,kFAAuG,EAArG,gBAAK,EAAE,gBAAK,EAAE,gBAAuF,CAAA;QAC7G,IAAM,KAAK,GAAG,0BAA0B,CAAC,WAAW,EAAE,WAAW,EAAK,YAAY,WAAQ,CAAC,CAAA;QAE3F,OAAO,EAAE,KAAK,OAAA,EAAE,KAAK,OAAA,EAAE,KAAK,OAAA,EAAE,KAAK,OAAA,EAAE,CAAA;IACvC,CAAC;IAED,OAAO;QACL,wBAAwB,0BAAA;QACxB,wBAAwB,0BAAA;KACzB,CAAA;AAEH,CAAC;AA7BD,8CA6BC"}
\ No newline at end of file
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
var tfjs_image_recognition_base_1 = require("tfjs-image-recognition-base");
var loadConvParamsFactory_1 = require("../common/loadConvParamsFactory");
function loadParamsFactory(weightMap, paramMappings) {
var extractWeightEntry = tfjs_image_recognition_base_1.TfjsImageRecognitionBase.extractWeightEntryFactory(weightMap, paramMappings);
function extractConvParams(prefix) {
var filters = extractWeightEntry(prefix + "/filters", 4);
var bias = extractWeightEntry(prefix + "/bias", 1);
return { filters: filters, bias: bias };
}
function extractSeparableConvParams(prefix) {
var depthwise_filter = extractWeightEntry(prefix + "/depthwise_filter", 4);
var pointwise_filter = extractWeightEntry(prefix + "/pointwise_filter", 4);
var bias = extractWeightEntry(prefix + "/bias", 1);
return new tfjs_image_recognition_base_1.TfjsImageRecognitionBase.SeparableConvParams(depthwise_filter, pointwise_filter, bias);
}
var extractConvParams = loadConvParamsFactory_1.loadConvParamsFactory(extractWeightEntry);
var extractSeparableConvParams = tfjs_image_recognition_base_1.TfjsImageRecognitionBase.loadSeparableConvParamsFactory(extractWeightEntry);
function extractDenseBlock3Params(prefix, isFirstLayer) {
if (isFirstLayer === void 0) { isFirstLayer = false; }
var conv0 = isFirstLayer
......
{"version":3,"file":"loadParamsFactory.js","sourceRoot":"","sources":["../../../src/faceFeatureExtractor/loadParamsFactory.ts"],"names":[],"mappings":";;AACA,2EAAuE;AAIvE,SAAgB,iBAAiB,CAAC,SAAc,EAAE,aAAsD;IAEtG,IAAM,kBAAkB,GAAG,sDAAwB,CAAC,yBAAyB,CAAC,SAAS,EAAE,aAAa,CAAC,CAAA;IAEvG,SAAS,iBAAiB,CAAC,MAAc;QACvC,IAAM,OAAO,GAAG,kBAAkB,CAAiB,MAAM,aAAU,EAAE,CAAC,CAAC,CAAA;QACvE,IAAM,IAAI,GAAG,kBAAkB,CAAiB,MAAM,UAAO,EAAE,CAAC,CAAC,CAAA;QAEjE,OAAO,EAAE,OAAO,SAAA,EAAE,IAAI,MAAA,EAAE,CAAA;IAC1B,CAAC;IAED,SAAS,0BAA0B,CAAC,MAAc;QAChD,IAAM,gBAAgB,GAAG,kBAAkB,CAAiB,MAAM,sBAAmB,EAAE,CAAC,CAAC,CAAA;QACzF,IAAM,gBAAgB,GAAG,kBAAkB,CAAiB,MAAM,sBAAmB,EAAE,CAAC,CAAC,CAAA;QACzF,IAAM,IAAI,GAAG,kBAAkB,CAAiB,MAAM,UAAO,EAAE,CAAC,CAAC,CAAA;QAEjE,OAAO,IAAI,sDAAwB,CAAC,mBAAmB,CACrD,gBAAgB,EAChB,gBAAgB,EAChB,IAAI,CACL,CAAA;IACH,CAAC;IAED,SAAS,wBAAwB,CAAC,MAAc,EAAE,YAA6B;QAA7B,6BAAA,EAAA,oBAA6B;QAC7E,IAAM,KAAK,GAAG,YAAY;YACxB,CAAC,CAAC,iBAAiB,CAAI,MAAM,WAAQ,CAAC;YACtC,CAAC,CAAC,0BAA0B,CAAI,MAAM,WAAQ,CAAC,CAAA;QACjD,IAAM,KAAK,GAAG,0BAA0B,CAAI,MAAM,WAAQ,CAAC,CAAA;QAC3D,IAAM,KAAK,GAAG,0BAA0B,CAAI,MAAM,WAAQ,CAAC,CAAA;QAE3D,OAAO,EAAE,KAAK,OAAA,EAAE,KAAK,OAAA,EAAE,KAAK,OAAA,EAAE,CAAA;IAChC,CAAC;IAED,SAAS,wBAAwB,CAAC,MAAc,EAAE,YAA6B;QAA7B,6BAAA,EAAA,oBAA6B;QAC7E,IAAM,KAAK,GAAG,YAAY;YACxB,CAAC,CAAC,iBAAiB,CAAI,MAAM,WAAQ,CAAC;YACtC,CAAC,CAAC,0BAA0B,CAAI,MAAM,WAAQ,CAAC,CAAA;QACjD,IAAM,KAAK,GAAG,0BAA0B,CAAI,MAAM,WAAQ,CAAC,CAAA;QAC3D,IAAM,KAAK,GAAG,0BAA0B,CAAI,MAAM,WAAQ,CAAC,CAAA;QAC3D,IAAM,KAAK,GAAG,0BAA0B,CAAI,MAAM,WAAQ,CAAC,CAAA;QAE3D,OAAO,EAAE,KAAK,OAAA,EAAE,KAAK,OAAA,EAAE,KAAK,OAAA,EAAE,KAAK,OAAA,EAAE,CAAA;IACvC,CAAC;IAED,OAAO;QACL,wBAAwB,0BAAA;QACxB,wBAAwB,0BAAA;KACzB,CAAA;AACH,CAAC;AAhDD,8CAgDC"}
\ No newline at end of file
{"version":3,"file":"loadParamsFactory.js","sourceRoot":"","sources":["../../../src/faceFeatureExtractor/loadParamsFactory.ts"],"names":[],"mappings":";;AAAA,2EAAuE;AAEvE,yEAAwE;AAGxE,SAAgB,iBAAiB,CAAC,SAAc,EAAE,aAAsD;IAEtG,IAAM,kBAAkB,GAAG,sDAAwB,CAAC,yBAAyB,CAAC,SAAS,EAAE,aAAa,CAAC,CAAA;IAEvG,IAAM,iBAAiB,GAAG,6CAAqB,CAAC,kBAAkB,CAAC,CAAA;IACnE,IAAM,0BAA0B,GAAG,sDAAwB,CAAC,8BAA8B,CAAC,kBAAkB,CAAC,CAAA;IAE9G,SAAS,wBAAwB,CAAC,MAAc,EAAE,YAA6B;QAA7B,6BAAA,EAAA,oBAA6B;QAC7E,IAAM,KAAK,GAAG,YAAY;YACxB,CAAC,CAAC,iBAAiB,CAAI,MAAM,WAAQ,CAAC;YACtC,CAAC,CAAC,0BAA0B,CAAI,MAAM,WAAQ,CAAC,CAAA;QACjD,IAAM,KAAK,GAAG,0BAA0B,CAAI,MAAM,WAAQ,CAAC,CAAA;QAC3D,IAAM,KAAK,GAAG,0BAA0B,CAAI,MAAM,WAAQ,CAAC,CAAA;QAE3D,OAAO,EAAE,KAAK,OAAA,EAAE,KAAK,OAAA,EAAE,KAAK,OAAA,EAAE,CAAA;IAChC,CAAC;IAED,SAAS,wBAAwB,CAAC,MAAc,EAAE,YAA6B;QAA7B,6BAAA,EAAA,oBAA6B;QAC7E,IAAM,KAAK,GAAG,YAAY;YACxB,CAAC,CAAC,iBAAiB,CAAI,MAAM,WAAQ,CAAC;YACtC,CAAC,CAAC,0BAA0B,CAAI,MAAM,WAAQ,CAAC,CAAA;QACjD,IAAM,KAAK,GAAG,0BAA0B,CAAI,MAAM,WAAQ,CAAC,CAAA;QAC3D,IAAM,KAAK,GAAG,0BAA0B,CAAI,MAAM,WAAQ,CAAC,CAAA;QAC3D,IAAM,KAAK,GAAG,0BAA0B,CAAI,MAAM,WAAQ,CAAC,CAAA;QAE3D,OAAO,EAAE,KAAK,OAAA,EAAE,KAAK,OAAA,EAAE,KAAK,OAAA,EAAE,KAAK,OAAA,EAAE,CAAA;IACvC,CAAC;IAED,OAAO;QACL,wBAAwB,0BAAA;QACxB,wBAAwB,0BAAA;KACzB,CAAA;AACH,CAAC;AAhCD,8CAgCC"}
\ No newline at end of file
export declare type WithAge<TSource> = TSource & {
age: number;
};
export declare function isWithAge(obj: any): obj is WithAge<{}>;
export declare function extendWithAge<TSource>(sourceObj: TSource, age: number): WithAge<TSource>;
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
function isWithAge(obj) {
return typeof obj['age'] === 'number';
}
exports.isWithAge = isWithAge;
function extendWithAge(sourceObj, age) {
var extension = { age: age };
return Object.assign({}, sourceObj, extension);
}
exports.extendWithAge = extendWithAge;
//# sourceMappingURL=WithAge.js.map
\ No newline at end of file
{"version":3,"file":"WithAge.js","sourceRoot":"","sources":["../../../src/factories/WithAge.ts"],"names":[],"mappings":";;AAIA,SAAgB,SAAS,CAAC,GAAQ;IAChC,OAAO,OAAO,GAAG,CAAC,KAAK,CAAC,KAAK,QAAQ,CAAA;AACvC,CAAC;AAFD,8BAEC;AAED,SAAgB,aAAa,CAG3B,SAAkB,EAClB,GAAW;IAGX,IAAM,SAAS,GAAG,EAAE,GAAG,KAAA,EAAE,CAAA;IACzB,OAAO,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,SAAS,EAAE,SAAS,CAAC,CAAA;AAChD,CAAC;AATD,sCASC"}
\ No newline at end of file
......@@ -2,4 +2,5 @@ import { FaceDetection } from '../classes/FaceDetection';
export declare type WithFaceDetection<TSource> = TSource & {
detection: FaceDetection;
};
export declare function isWithFaceDetection(obj: any): obj is WithFaceDetection<{}>;
export declare function extendWithFaceDetection<TSource>(sourceObj: TSource, detection: FaceDetection): WithFaceDetection<TSource>;
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
var FaceDetection_1 = require("../classes/FaceDetection");
function isWithFaceDetection(obj) {
return obj['detection'] instanceof FaceDetection_1.FaceDetection;
}
exports.isWithFaceDetection = isWithFaceDetection;
function extendWithFaceDetection(sourceObj, detection) {
var extension = { detection: detection };
return Object.assign({}, sourceObj, extension);
......
{"version":3,"file":"WithFaceDetection.js","sourceRoot":"","sources":["../../../src/factories/WithFaceDetection.ts"],"names":[],"mappings":";;AAMA,SAAgB,uBAAuB,CAGrC,SAAkB,EAClB,SAAwB;IAGxB,IAAM,SAAS,GAAG,EAAE,SAAS,WAAA,EAAE,CAAA;IAC/B,OAAO,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,SAAS,EAAE,SAAS,CAAC,CAAA;AAChD,CAAC;AATD,0DASC"}
\ No newline at end of file
{"version":3,"file":"WithFaceDetection.js","sourceRoot":"","sources":["../../../src/factories/WithFaceDetection.ts"],"names":[],"mappings":";;AAAA,0DAAyD;AAMzD,SAAgB,mBAAmB,CAAC,GAAQ;IAC1C,OAAO,GAAG,CAAC,WAAW,CAAC,YAAY,6BAAa,CAAA;AAClD,CAAC;AAFD,kDAEC;AAED,SAAgB,uBAAuB,CAGrC,SAAkB,EAClB,SAAwB;IAGxB,IAAM,SAAS,GAAG,EAAE,SAAS,WAAA,EAAE,CAAA;IAC/B,OAAO,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,SAAS,EAAE,SAAS,CAAC,CAAA;AAChD,CAAC;AATD,0DASC"}
\ No newline at end of file
import { FaceExpressionPrediction } from '../faceExpressionNet/types';
import { FaceExpressions } from '../faceExpressionNet/FaceExpressions';
export declare type WithFaceExpressions<TSource> = TSource & {
expressions: FaceExpressionPrediction[];
expressions: FaceExpressions;
};
export declare function extendWithFaceExpressions<TSource>(sourceObj: TSource, expressions: FaceExpressionPrediction[]): WithFaceExpressions<TSource>;
export declare function isWithFaceExpressions(obj: any): obj is WithFaceExpressions<{}>;
export declare function extendWithFaceExpressions<TSource>(sourceObj: TSource, expressions: FaceExpressions): WithFaceExpressions<TSource>;
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
var FaceExpressions_1 = require("../faceExpressionNet/FaceExpressions");
function isWithFaceExpressions(obj) {
return obj['expressions'] instanceof FaceExpressions_1.FaceExpressions;
}
exports.isWithFaceExpressions = isWithFaceExpressions;
function extendWithFaceExpressions(sourceObj, expressions) {
var extension = { expressions: expressions };
return Object.assign({}, sourceObj, extension);
......
{"version":3,"file":"WithFaceExpressions.js","sourceRoot":"","sources":["../../../src/factories/WithFaceExpressions.ts"],"names":[],"mappings":";;AAMA,SAAgB,yBAAyB,CAGvC,SAAkB,EAClB,WAAuC;IAGvC,IAAM,SAAS,GAAG,EAAE,WAAW,aAAA,EAAE,CAAA;IACjC,OAAO,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,SAAS,EAAE,SAAS,CAAC,CAAA;AAChD,CAAC;AATD,8DASC"}
\ No newline at end of file
{"version":3,"file":"WithFaceExpressions.js","sourceRoot":"","sources":["../../../src/factories/WithFaceExpressions.ts"],"names":[],"mappings":";;AAAA,wEAAuE;AAMvE,SAAgB,qBAAqB,CAAC,GAAQ;IAC5C,OAAO,GAAG,CAAC,aAAa,CAAC,YAAY,iCAAe,CAAA;AACtD,CAAC;AAFD,sDAEC;AAED,SAAgB,yBAAyB,CAGvC,SAAkB,EAClB,WAA4B;IAG5B,IAAM,SAAS,GAAG,EAAE,WAAW,aAAA,EAAE,CAAA;IACjC,OAAO,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,SAAS,EAAE,SAAS,CAAC,CAAA;AAChD,CAAC;AATD,8DASC"}
\ No newline at end of file
......@@ -7,4 +7,5 @@ export declare type WithFaceLandmarks<TSource extends WithFaceDetection<{}>, TFa
unshiftedLandmarks: TFaceLandmarks;
alignedRect: FaceDetection;
};
export declare function isWithFaceLandmarks(obj: any): obj is WithFaceLandmarks<WithFaceDetection<{}>, FaceLandmarks>;
export declare function extendWithFaceLandmarks<TSource extends WithFaceDetection<{}>, TFaceLandmarks extends FaceLandmarks = FaceLandmarks68>(sourceObj: TSource, unshiftedLandmarks: TFaceLandmarks): WithFaceLandmarks<TSource, TFaceLandmarks>;
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
var FaceDetection_1 = require("../classes/FaceDetection");
var FaceLandmarks_1 = require("../classes/FaceLandmarks");
var WithFaceDetection_1 = require("./WithFaceDetection");
function isWithFaceLandmarks(obj) {
return WithFaceDetection_1.isWithFaceDetection(obj)
&& obj['landmarks'] instanceof FaceLandmarks_1.FaceLandmarks
&& obj['unshiftedLandmarks'] instanceof FaceLandmarks_1.FaceLandmarks
&& obj['alignedRect'] instanceof FaceDetection_1.FaceDetection;
}
exports.isWithFaceLandmarks = isWithFaceLandmarks;
function extendWithFaceLandmarks(sourceObj, unshiftedLandmarks) {
var shift = sourceObj.detection.box;
var landmarks = unshiftedLandmarks.shiftBy(shift.x, shift.y);
......
{"version":3,"file":"WithFaceLandmarks.js","sourceRoot":"","sources":["../../../src/factories/WithFaceLandmarks.ts"],"names":[],"mappings":";;AAAA,0DAAyD;AAczD,SAAgB,uBAAuB,CAIrC,SAAkB,EAClB,kBAAkC;IAG1B,IAAA,+BAAU,CAAwB;IAC1C,IAAM,SAAS,GAAG,kBAAkB,CAAC,OAAO,CAAiB,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,CAAA;IAE9E,IAAM,IAAI,GAAG,SAAS,CAAC,KAAK,EAAE,CAAA;IACtB,IAAA,yCAAS,CAAwB;IACzC,IAAM,WAAW,GAAG,IAAI,6BAAa,CAAC,SAAS,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,OAAO,EAAE,CAAC,EAAE,SAAS,CAAC,CAAA;IAE9G,IAAM,SAAS,GAAG;QAChB,SAAS,WAAA;QACT,kBAAkB,oBAAA;QAClB,WAAW,aAAA;KACZ,CAAA;IAED,OAAO,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,SAAS,EAAE,SAAS,CAAC,CAAA;AAChD,CAAC;AAtBD,0DAsBC"}
\ No newline at end of file
{"version":3,"file":"WithFaceLandmarks.js","sourceRoot":"","sources":["../../../src/factories/WithFaceLandmarks.ts"],"names":[],"mappings":";;AAAA,0DAAyD;AACzD,0DAAyD;AAEzD,yDAA6E;AAW7E,SAAgB,mBAAmB,CAAC,GAAQ;IAC1C,OAAO,uCAAmB,CAAC,GAAG,CAAC;WAC1B,GAAG,CAAC,WAAW,CAAC,YAAY,6BAAa;WACzC,GAAG,CAAC,oBAAoB,CAAC,YAAY,6BAAa;WAClD,GAAG,CAAC,aAAa,CAAC,YAAY,6BAAa,CAAA;AAClD,CAAC;AALD,kDAKC;AAED,SAAgB,uBAAuB,CAIrC,SAAkB,EAClB,kBAAkC;IAG1B,IAAA,+BAAU,CAAwB;IAC1C,IAAM,SAAS,GAAG,kBAAkB,CAAC,OAAO,CAAiB,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,CAAA;IAE9E,IAAM,IAAI,GAAG,SAAS,CAAC,KAAK,EAAE,CAAA;IACtB,IAAA,yCAAS,CAAwB;IACzC,IAAM,WAAW,GAAG,IAAI,6BAAa,CAAC,SAAS,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,OAAO,EAAE,CAAC,EAAE,SAAS,CAAC,CAAA;IAE9G,IAAM,SAAS,GAAG;QAChB,SAAS,WAAA;QACT,kBAAkB,oBAAA;QAClB,WAAW,aAAA;KACZ,CAAA;IAED,OAAO,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,SAAS,EAAE,SAAS,CAAC,CAAA;AAChD,CAAC;AAtBD,0DAsBC"}
\ No newline at end of file
import { Gender } from '../ageGenderNet/types';
export declare type WithGender<TSource> = TSource & {
gender: Gender;
genderProbability: number;
};
export declare function isWithGender(obj: any): obj is WithGender<{}>;
export declare function extendWithGender<TSource>(sourceObj: TSource, gender: Gender, genderProbability: number): WithGender<TSource>;
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
var tfjs_image_recognition_base_1 = require("tfjs-image-recognition-base");
var types_1 = require("../ageGenderNet/types");
function isWithGender(obj) {
return (obj['gender'] === types_1.Gender.MALE || obj['gender'] === types_1.Gender.FEMALE)
&& tfjs_image_recognition_base_1.isValidProbablitiy(obj['genderProbability']);
}
exports.isWithGender = isWithGender;
function extendWithGender(sourceObj, gender, genderProbability) {
var extension = { gender: gender, genderProbability: genderProbability };
return Object.assign({}, sourceObj, extension);
}
exports.extendWithGender = extendWithGender;
//# sourceMappingURL=WithGender.js.map
\ No newline at end of file
{"version":3,"file":"WithGender.js","sourceRoot":"","sources":["../../../src/factories/WithGender.ts"],"names":[],"mappings":";;AAAA,2EAAiE;AAEjE,+CAA+C;AAO/C,SAAgB,YAAY,CAAC,GAAQ;IACnC,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,KAAK,cAAM,CAAC,IAAI,IAAI,GAAG,CAAC,QAAQ,CAAC,KAAK,cAAM,CAAC,MAAM,CAAC;WACpE,gDAAkB,CAAC,GAAG,CAAC,mBAAmB,CAAC,CAAC,CAAA;AACnD,CAAC;AAHD,oCAGC;AAED,SAAgB,gBAAgB,CAG9B,SAAkB,EAClB,MAAc,EACd,iBAAyB;IAGzB,IAAM,SAAS,GAAG,EAAE,MAAM,QAAA,EAAE,iBAAiB,mBAAA,EAAE,CAAA;IAC/C,OAAO,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,SAAS,EAAE,SAAS,CAAC,CAAA;AAChD,CAAC;AAVD,4CAUC"}
\ No newline at end of file
......@@ -3,6 +3,8 @@ import { WithFaceDescriptor } from '../factories/WithFaceDescriptor';
import { WithFaceDetection } from '../factories/WithFaceDetection';
import { WithFaceLandmarks } from '../factories/WithFaceLandmarks';
import { ComposableTask } from './ComposableTask';
import { PredictAllAgeAndGenderWithFaceAlignmentTask, PredictSingleAgeAndGenderWithFaceAlignmentTask } from './PredictAgeAndGenderTask';
import { PredictAllFaceExpressionsWithFaceAlignmentTask, PredictSingleFaceExpressionsWithFaceAlignmentTask } from './PredictFaceExpressionsTask';
export declare class ComputeFaceDescriptorsTaskBase<TReturn, TParentReturn> extends ComposableTask<TReturn> {
protected parentTask: ComposableTask<TParentReturn> | Promise<TParentReturn>;
protected input: TNetInput;
......@@ -10,7 +12,11 @@ export declare class ComputeFaceDescriptorsTaskBase<TReturn, TParentReturn> exte
}
export declare class ComputeAllFaceDescriptorsTask<TSource extends WithFaceLandmarks<WithFaceDetection<{}>>> extends ComputeFaceDescriptorsTaskBase<WithFaceDescriptor<TSource>[], TSource[]> {
run(): Promise<WithFaceDescriptor<TSource>[]>;
withFaceExpressions(): PredictAllFaceExpressionsWithFaceAlignmentTask<WithFaceDescriptor<TSource>>;
withAgeAndGender(): PredictAllAgeAndGenderWithFaceAlignmentTask<WithFaceDescriptor<TSource>>;
}
export declare class ComputeSingleFaceDescriptorTask<TSource extends WithFaceLandmarks<WithFaceDetection<{}>>> extends ComputeFaceDescriptorsTaskBase<WithFaceDescriptor<TSource> | undefined, TSource | undefined> {
run(): Promise<WithFaceDescriptor<TSource> | undefined>;
withFaceExpressions(): PredictSingleFaceExpressionsWithFaceAlignmentTask<WithFaceDescriptor<TSource>>;
withAgeAndGender(): PredictSingleAgeAndGenderWithFaceAlignmentTask<WithFaceDescriptor<TSource>>;
}
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
var tslib_1 = require("tslib");
var tf = require("@tensorflow/tfjs-core");
var dom_1 = require("../dom");
var WithFaceDescriptor_1 = require("../factories/WithFaceDescriptor");
var ComposableTask_1 = require("./ComposableTask");
var extractFacesAndComputeResults_1 = require("./extractFacesAndComputeResults");
var nets_1 = require("./nets");
var PredictAgeAndGenderTask_1 = require("./PredictAgeAndGenderTask");
var PredictFaceExpressionsTask_1 = require("./PredictFaceExpressionsTask");
var ComputeFaceDescriptorsTaskBase = /** @class */ (function (_super) {
tslib_1.__extends(ComputeFaceDescriptorsTaskBase, _super);
function ComputeFaceDescriptorsTaskBase(parentTask, input) {
......@@ -24,47 +25,28 @@ var ComputeAllFaceDescriptorsTask = /** @class */ (function (_super) {
}
ComputeAllFaceDescriptorsTask.prototype.run = function () {
return tslib_1.__awaiter(this, void 0, void 0, function () {
var parentResults, alignedRects, alignedFaces, _a, results;
var _this = this;
return tslib_1.__generator(this, function (_b) {
switch (_b.label) {
var parentResults, descriptors;
return tslib_1.__generator(this, function (_a) {
switch (_a.label) {
case 0: return [4 /*yield*/, this.parentTask];
case 1:
parentResults = _b.sent();
alignedRects = parentResults.map(function (_a) {
var alignedRect = _a.alignedRect;
return alignedRect;
});
if (!(this.input instanceof tf.Tensor)) return [3 /*break*/, 3];
return [4 /*yield*/, dom_1.extractFaceTensors(this.input, alignedRects)];
parentResults = _a.sent();
return [4 /*yield*/, extractFacesAndComputeResults_1.extractAllFacesAndComputeResults(parentResults, this.input, function (faces) { return Promise.all(faces.map(function (face) {
return nets_1.nets.faceRecognitionNet.computeFaceDescriptor(face);
})); }, null, function (parentResult) { return parentResult.landmarks.align(null, { useDlibAlignment: true }); })];
case 2:
_a = _b.sent();
return [3 /*break*/, 5];
case 3: return [4 /*yield*/, dom_1.extractFaces(this.input, alignedRects)];
case 4:
_a = _b.sent();
_b.label = 5;
case 5:
alignedFaces = _a;
return [4 /*yield*/, Promise.all(parentResults.map(function (parentResult, i) { return tslib_1.__awaiter(_this, void 0, void 0, function () {
var descriptor;
return tslib_1.__generator(this, function (_a) {
switch (_a.label) {
case 0: return [4 /*yield*/, nets_1.nets.faceRecognitionNet.computeFaceDescriptor(alignedFaces[i])];
case 1:
descriptor = _a.sent();
return [2 /*return*/, WithFaceDescriptor_1.extendWithFaceDescriptor(parentResult, descriptor)];
}
});
}); }))];
case 6:
results = _b.sent();
alignedFaces.forEach(function (f) { return f instanceof tf.Tensor && f.dispose(); });
return [2 /*return*/, results];
descriptors = _a.sent();
return [2 /*return*/, descriptors.map(function (descriptor, i) { return WithFaceDescriptor_1.extendWithFaceDescriptor(parentResults[i], descriptor); })];
}
});
});
};
ComputeAllFaceDescriptorsTask.prototype.withFaceExpressions = function () {
return new PredictFaceExpressionsTask_1.PredictAllFaceExpressionsWithFaceAlignmentTask(this, this.input);
};
ComputeAllFaceDescriptorsTask.prototype.withAgeAndGender = function () {
return new PredictAgeAndGenderTask_1.PredictAllAgeAndGenderWithFaceAlignmentTask(this, this.input);
};
return ComputeAllFaceDescriptorsTask;
}(ComputeFaceDescriptorsTaskBase));
exports.ComputeAllFaceDescriptorsTask = ComputeAllFaceDescriptorsTask;
......@@ -75,36 +57,29 @@ var ComputeSingleFaceDescriptorTask = /** @class */ (function (_super) {
}
ComputeSingleFaceDescriptorTask.prototype.run = function () {
return tslib_1.__awaiter(this, void 0, void 0, function () {
var parentResult, alignedRect, alignedFaces, _a, descriptor;
return tslib_1.__generator(this, function (_b) {
switch (_b.label) {
var parentResult, descriptor;
return tslib_1.__generator(this, function (_a) {
switch (_a.label) {
case 0: return [4 /*yield*/, this.parentTask];
case 1:
parentResult = _b.sent();
parentResult = _a.sent();
if (!parentResult) {
return [2 /*return*/];
}
alignedRect = parentResult.alignedRect;
if (!(this.input instanceof tf.Tensor)) return [3 /*break*/, 3];
return [4 /*yield*/, dom_1.extractFaceTensors(this.input, [alignedRect])];
return [4 /*yield*/, extractFacesAndComputeResults_1.extractSingleFaceAndComputeResult(parentResult, this.input, function (face) { return nets_1.nets.faceRecognitionNet.computeFaceDescriptor(face); }, null, function (parentResult) { return parentResult.landmarks.align(null, { useDlibAlignment: true }); })];
case 2:
_a = _b.sent();
return [3 /*break*/, 5];
case 3: return [4 /*yield*/, dom_1.extractFaces(this.input, [alignedRect])];
case 4:
_a = _b.sent();
_b.label = 5;
case 5:
alignedFaces = _a;
return [4 /*yield*/, nets_1.nets.faceRecognitionNet.computeFaceDescriptor(alignedFaces[0])];
case 6:
descriptor = _b.sent();
alignedFaces.forEach(function (f) { return f instanceof tf.Tensor && f.dispose(); });
descriptor = _a.sent();
return [2 /*return*/, WithFaceDescriptor_1.extendWithFaceDescriptor(parentResult, descriptor)];
}
});
});
};
ComputeSingleFaceDescriptorTask.prototype.withFaceExpressions = function () {
return new PredictFaceExpressionsTask_1.PredictSingleFaceExpressionsWithFaceAlignmentTask(this, this.input);
};
ComputeSingleFaceDescriptorTask.prototype.withAgeAndGender = function () {
return new PredictAgeAndGenderTask_1.PredictSingleAgeAndGenderWithFaceAlignmentTask(this, this.input);
};
return ComputeSingleFaceDescriptorTask;
}(ComputeFaceDescriptorsTaskBase));
exports.ComputeSingleFaceDescriptorTask = ComputeSingleFaceDescriptorTask;
......
{"version":3,"file":"ComputeFaceDescriptorsTasks.js","sourceRoot":"","sources":["../../../src/globalApi/ComputeFaceDescriptorsTasks.ts"],"names":[],"mappings":"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"}
\ No newline at end of file
{"version":3,"file":"ComputeFaceDescriptorsTasks.js","sourceRoot":"","sources":["../../../src/globalApi/ComputeFaceDescriptorsTasks.ts"],"names":[],"mappings":";;;AAEA,sEAA+F;AAG/F,mDAAkD;AAClD,iFAAsH;AACtH,+BAA8B;AAC9B,qEAGmC;AACnC,2EAGsC;AAEtC;IAA4E,0DAAuB;IACjG,wCACY,UAAkE,EAClE,KAAgB;QAF5B,YAIE,iBAAO,SACR;QAJW,gBAAU,GAAV,UAAU,CAAwD;QAClE,WAAK,GAAL,KAAK,CAAW;;IAG5B,CAAC;IACH,qCAAC;AAAD,CAAC,AAPD,CAA4E,+BAAc,GAOzF;AAPY,wEAA8B;AAS3C;IAEU,yDAAwE;IAFlF;;IA4BA,CAAC;IAxBc,2CAAG,GAAhB;;;;;4BAEwB,qBAAM,IAAI,CAAC,UAAU,EAAA;;wBAArC,aAAa,GAAG,SAAqB;wBAEvB,qBAAM,gEAAgC,CACxD,aAAa,EACb,IAAI,CAAC,KAAK,EACV,UAAA,KAAK,IAAI,OAAA,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,UAAA,IAAI;gCACjC,OAAA,WAAI,CAAC,kBAAkB,CAAC,qBAAqB,CAAC,IAAI,CAA0B;4BAA5E,CAA4E,CAC7E,CAAC,EAFO,CAEP,EACF,IAAI,EACJ,UAAA,YAAY,IAAI,OAAA,YAAY,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,EAAE,EAAE,gBAAgB,EAAE,IAAI,EAAE,CAAC,EAA9D,CAA8D,CAC/E,EAAA;;wBARK,WAAW,GAAG,SAQnB;wBAED,sBAAO,WAAW,CAAC,GAAG,CAAC,UAAC,UAAU,EAAE,CAAC,IAAK,OAAA,6CAAwB,CAAU,aAAa,CAAC,CAAC,CAAC,EAAE,UAAU,CAAC,EAA/D,CAA+D,CAAC,EAAA;;;;KAC3G;IAED,2DAAmB,GAAnB;QACE,OAAO,IAAI,2EAA8C,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,CAAA;IAC7E,CAAC;IAED,wDAAgB,GAAhB;QACE,OAAO,IAAI,qEAA2C,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,CAAA;IAC1E,CAAC;IACH,oCAAC;AAAD,CAAC,AA5BD,CAEU,8BAA8B,GA0BvC;AA5BY,sEAA6B;AA8B1C;IAEU,2DAA4F;IAFtG;;IA4BA,CAAC;IAxBc,6CAAG,GAAhB;;;;;4BAEuB,qBAAM,IAAI,CAAC,UAAU,EAAA;;wBAApC,YAAY,GAAG,SAAqB;wBAC1C,IAAI,CAAC,YAAY,EAAE;4BACjB,sBAAM;yBACP;wBACkB,qBAAM,iEAAiC,CACxD,YAAY,EACZ,IAAI,CAAC,KAAK,EACV,UAAA,IAAI,IAAI,OAAA,WAAI,CAAC,kBAAkB,CAAC,qBAAqB,CAAC,IAAI,CAA0B,EAA5E,CAA4E,EACpF,IAAI,EACJ,UAAA,YAAY,IAAI,OAAA,YAAY,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,EAAE,EAAE,gBAAgB,EAAE,IAAI,EAAE,CAAC,EAA9D,CAA8D,CAC/E,EAAA;;wBANK,UAAU,GAAG,SAMlB;wBAED,sBAAO,6CAAwB,CAAC,YAAY,EAAE,UAAU,CAAC,EAAA;;;;KAC1D;IAED,6DAAmB,GAAnB;QACE,OAAO,IAAI,8EAAiD,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,CAAA;IAChF,CAAC;IAED,0DAAgB,GAAhB;QACE,OAAO,IAAI,wEAA8C,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,CAAA;IAC7E,CAAC;IACH,sCAAC;AAAD,CAAC,AA5BD,CAEU,8BAA8B,GA0BvC;AA5BY,0EAA+B"}
\ No newline at end of file
import { TNetInput } from 'tfjs-image-recognition-base';
import { FaceLandmarks68 } from '../classes/FaceLandmarks68';
import { FaceLandmark68Net } from '../faceLandmarkNet/FaceLandmark68Net';
import { FaceLandmark68TinyNet } from '../faceLandmarkNet/FaceLandmark68TinyNet';
import { WithFaceDetection } from '../factories/WithFaceDetection';
import { WithFaceLandmarks } from '../factories/WithFaceLandmarks';
import { ComposableTask } from './ComposableTask';
import { ComputeAllFaceDescriptorsTask, ComputeSingleFaceDescriptorTask } from './ComputeFaceDescriptorsTasks';
import { PredictAllAgeAndGenderWithFaceAlignmentTask, PredictSingleAgeAndGenderWithFaceAlignmentTask } from './PredictAgeAndGenderTask';
import { PredictAllFaceExpressionsWithFaceAlignmentTask, PredictSingleFaceExpressionsWithFaceAlignmentTask } from './PredictFaceExpressionsTask';
export declare class DetectFaceLandmarksTaskBase<TReturn, TParentReturn> extends ComposableTask<TReturn> {
protected parentTask: ComposableTask<TParentReturn> | Promise<TParentReturn>;
protected input: TNetInput;
......@@ -14,9 +17,13 @@ export declare class DetectFaceLandmarksTaskBase<TReturn, TParentReturn> extends
}
export declare class DetectAllFaceLandmarksTask<TSource extends WithFaceDetection<{}>> extends DetectFaceLandmarksTaskBase<WithFaceLandmarks<TSource>[], TSource[]> {
run(): Promise<WithFaceLandmarks<TSource>[]>;
withFaceDescriptors(): ComputeAllFaceDescriptorsTask<WithFaceLandmarks<TSource>>;
withFaceExpressions(): PredictAllFaceExpressionsWithFaceAlignmentTask<WithFaceLandmarks<TSource, FaceLandmarks68>>;
withAgeAndGender(): PredictAllAgeAndGenderWithFaceAlignmentTask<WithFaceLandmarks<TSource, FaceLandmarks68>>;
withFaceDescriptors(): ComputeAllFaceDescriptorsTask<WithFaceLandmarks<TSource, FaceLandmarks68>>;
}
export declare class DetectSingleFaceLandmarksTask<TSource extends WithFaceDetection<{}>> extends DetectFaceLandmarksTaskBase<WithFaceLandmarks<TSource> | undefined, TSource | undefined> {
run(): Promise<WithFaceLandmarks<TSource> | undefined>;
withFaceDescriptor(): ComputeSingleFaceDescriptorTask<WithFaceLandmarks<TSource>>;
withFaceExpressions(): PredictSingleFaceExpressionsWithFaceAlignmentTask<WithFaceLandmarks<TSource, FaceLandmarks68>>;
withAgeAndGender(): PredictSingleAgeAndGenderWithFaceAlignmentTask<WithFaceLandmarks<TSource, FaceLandmarks68>>;
withFaceDescriptor(): ComputeSingleFaceDescriptorTask<WithFaceLandmarks<TSource, FaceLandmarks68>>;
}
......@@ -7,6 +7,8 @@ var WithFaceLandmarks_1 = require("../factories/WithFaceLandmarks");
var ComposableTask_1 = require("./ComposableTask");
var ComputeFaceDescriptorsTasks_1 = require("./ComputeFaceDescriptorsTasks");
var nets_1 = require("./nets");
var PredictAgeAndGenderTask_1 = require("./PredictAgeAndGenderTask");
var PredictFaceExpressionsTask_1 = require("./PredictFaceExpressionsTask");
var DetectFaceLandmarksTaskBase = /** @class */ (function (_super) {
tslib_1.__extends(DetectFaceLandmarksTaskBase, _super);
function DetectFaceLandmarksTaskBase(parentTask, input, useTinyLandmarkNet) {
......@@ -65,6 +67,12 @@ var DetectAllFaceLandmarksTask = /** @class */ (function (_super) {
});
});
};
DetectAllFaceLandmarksTask.prototype.withFaceExpressions = function () {
return new PredictFaceExpressionsTask_1.PredictAllFaceExpressionsWithFaceAlignmentTask(this, this.input);
};
DetectAllFaceLandmarksTask.prototype.withAgeAndGender = function () {
return new PredictAgeAndGenderTask_1.PredictAllAgeAndGenderWithFaceAlignmentTask(this, this.input);
};
DetectAllFaceLandmarksTask.prototype.withFaceDescriptors = function () {
return new ComputeFaceDescriptorsTasks_1.ComputeAllFaceDescriptorsTask(this, this.input);
};
......@@ -108,6 +116,12 @@ var DetectSingleFaceLandmarksTask = /** @class */ (function (_super) {
});
});
};
DetectSingleFaceLandmarksTask.prototype.withFaceExpressions = function () {
return new PredictFaceExpressionsTask_1.PredictSingleFaceExpressionsWithFaceAlignmentTask(this, this.input);
};
DetectSingleFaceLandmarksTask.prototype.withAgeAndGender = function () {
return new PredictAgeAndGenderTask_1.PredictSingleAgeAndGenderWithFaceAlignmentTask(this, this.input);
};
DetectSingleFaceLandmarksTask.prototype.withFaceDescriptor = function () {
return new ComputeFaceDescriptorsTasks_1.ComputeSingleFaceDescriptorTask(this, this.input);
};
......
{"version":3,"file":"DetectFaceLandmarksTasks.js","sourceRoot":"","sources":["../../../src/globalApi/DetectFaceLandmarksTasks.ts"],"names":[],"mappings":"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"}
\ No newline at end of file
{"version":3,"file":"DetectFaceLandmarksTasks.js","sourceRoot":"","sources":["../../../src/globalApi/DetectFaceLandmarksTasks.ts"],"names":[],"mappings":"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"}
\ No newline at end of file
import { TNetInput } from 'tfjs-image-recognition-base';
import { FaceDetection } from '../classes/FaceDetection';
import { WithFaceDetection } from '../factories/WithFaceDetection';
import { ComposableTask } from './ComposableTask';
import { DetectAllFaceLandmarksTask, DetectSingleFaceLandmarksTask } from './DetectFaceLandmarksTasks';
import { PredictAllFaceExpressionsTask, PredictSingleFaceExpressionTask } from './PredictFaceExpressionsTask';
import { PredictAllAgeAndGenderTask, PredictSingleAgeAndGenderTask } from './PredictAgeAndGenderTask';
import { PredictAllFaceExpressionsTask, PredictSingleFaceExpressionsTask } from './PredictFaceExpressionsTask';
import { FaceDetectionOptions } from './types';
export declare class DetectFacesTaskBase<TReturn> extends ComposableTask<TReturn> {
protected input: TNetInput;
......@@ -13,12 +13,26 @@ export declare class DetectFacesTaskBase<TReturn> extends ComposableTask<TReturn
export declare class DetectAllFacesTask extends DetectFacesTaskBase<FaceDetection[]> {
run(): Promise<FaceDetection[]>;
private runAndExtendWithFaceDetections;
withFaceLandmarks(useTinyLandmarkNet?: boolean): DetectAllFaceLandmarksTask<WithFaceDetection<{}>>;
withFaceExpressions(): PredictAllFaceExpressionsTask<WithFaceDetection<{}>>;
withFaceLandmarks(useTinyLandmarkNet?: boolean): DetectAllFaceLandmarksTask<{
detection: FaceDetection;
}>;
withFaceExpressions(): PredictAllFaceExpressionsTask<{
detection: FaceDetection;
}>;
withAgeAndGender(): PredictAllAgeAndGenderTask<{
detection: FaceDetection;
}>;
}
export declare class DetectSingleFaceTask extends DetectFacesTaskBase<FaceDetection | undefined> {
run(): Promise<FaceDetection | undefined>;
private runAndExtendWithFaceDetection;
withFaceLandmarks(useTinyLandmarkNet?: boolean): DetectSingleFaceLandmarksTask<WithFaceDetection<{}>>;
withFaceExpressions(): PredictSingleFaceExpressionTask<WithFaceDetection<{}>>;
withFaceLandmarks(useTinyLandmarkNet?: boolean): DetectSingleFaceLandmarksTask<{
detection: FaceDetection;
}>;
withFaceExpressions(): PredictSingleFaceExpressionsTask<{
detection: FaceDetection;
}>;
withAgeAndGender(): PredictSingleAgeAndGenderTask<{
detection: FaceDetection;
}>;
}
......@@ -9,6 +9,7 @@ var TinyFaceDetectorOptions_1 = require("../tinyFaceDetector/TinyFaceDetectorOpt
var ComposableTask_1 = require("./ComposableTask");
var DetectFaceLandmarksTasks_1 = require("./DetectFaceLandmarksTasks");
var nets_1 = require("./nets");
var PredictAgeAndGenderTask_1 = require("./PredictAgeAndGenderTask");
var PredictFaceExpressionsTask_1 = require("./PredictFaceExpressionsTask");
var DetectFacesTaskBase = /** @class */ (function (_super) {
tslib_1.__extends(DetectFacesTaskBase, _super);
......@@ -75,6 +76,9 @@ var DetectAllFacesTask = /** @class */ (function (_super) {
DetectAllFacesTask.prototype.withFaceExpressions = function () {
return new PredictFaceExpressionsTask_1.PredictAllFaceExpressionsTask(this.runAndExtendWithFaceDetections(), this.input);
};
DetectAllFacesTask.prototype.withAgeAndGender = function () {
return new PredictAgeAndGenderTask_1.PredictAllAgeAndGenderTask(this.runAndExtendWithFaceDetections(), this.input);
};
return DetectAllFacesTask;
}(DetectFacesTaskBase));
exports.DetectAllFacesTask = DetectAllFacesTask;
......@@ -121,7 +125,10 @@ var DetectSingleFaceTask = /** @class */ (function (_super) {
return new DetectFaceLandmarksTasks_1.DetectSingleFaceLandmarksTask(this.runAndExtendWithFaceDetection(), this.input, useTinyLandmarkNet);
};
DetectSingleFaceTask.prototype.withFaceExpressions = function () {
return new PredictFaceExpressionsTask_1.PredictSingleFaceExpressionTask(this.runAndExtendWithFaceDetection(), this.input);
return new PredictFaceExpressionsTask_1.PredictSingleFaceExpressionsTask(this.runAndExtendWithFaceDetection(), this.input);
};
DetectSingleFaceTask.prototype.withAgeAndGender = function () {
return new PredictAgeAndGenderTask_1.PredictSingleAgeAndGenderTask(this.runAndExtendWithFaceDetection(), this.input);
};
return DetectSingleFaceTask;
}(DetectFacesTaskBase));
......
{"version":3,"file":"DetectFacesTasks.js","sourceRoot":"","sources":["../../../src/globalApi/DetectFacesTasks.ts"],"names":[],"mappings":"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"}
\ No newline at end of file
{"version":3,"file":"DetectFacesTasks.js","sourceRoot":"","sources":["../../../src/globalApi/DetectFacesTasks.ts"],"names":[],"mappings":";;;AAAA,2EAAkF;AAGlF,oEAA4F;AAC5F,sDAAqD;AACrD,iFAAgF;AAChF,uFAAsF;AACtF,mDAAkD;AAClD,uEAAuG;AACvG,+BAA8B;AAC9B,qEAAsG;AACtG,2EAA+G;AAG/G;IAAkD,+CAAuB;IACvE,6BACY,KAAgB,EAChB,OAA2D;QAA3D,wBAAA,EAAA,cAAoC,6CAAqB,EAAE;QAFvE,YAIE,iBAAO,SACR;QAJW,WAAK,GAAL,KAAK,CAAW;QAChB,aAAO,GAAP,OAAO,CAAoD;;IAGvE,CAAC;IACH,0BAAC;AAAD,CAAC,AAPD,CAAkD,+BAAc,GAO/D;AAPY,kDAAmB;AAShC;IAAwC,8CAAoC;IAA5E;;IA0DA,CAAC;IAxDc,gCAAG,GAAhB;;;;;;wBAEQ,KAAqB,IAAI,EAAvB,KAAK,WAAA,EAAE,OAAO,aAAA,CAAS;6BAE3B,CAAA,OAAO,YAAY,2BAAY,CAAA,EAA/B,wBAA+B;wBACzB,qBAAM,WAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,EAAE,OAAO,CAAC,EAAA;4BAAhD,sBAAO,CAAC,SAAwC,CAAC;6BAC9C,GAAG,CAAC,UAAA,MAAM,IAAI,OAAA,MAAM,CAAC,SAAS,EAAhB,CAAgB,CAAC,EAAA;;wBAG9B,qBAAqB,GAAG,OAAO,YAAY,iDAAuB;4BACtE,CAAC,CAAC,UAAC,KAAgB,IAAK,OAAA,WAAI,CAAC,gBAAgB,CAAC,WAAW,CAAC,KAAK,EAAE,OAAO,CAAC,EAAjD,CAAiD;4BACzE,CAAC,CAAC,CACA,OAAO,YAAY,6CAAqB;gCACtC,CAAC,CAAC,UAAC,KAAgB,IAAK,OAAA,WAAI,CAAC,cAAc,CAAC,WAAW,CAAC,KAAK,EAAE,OAAO,CAAC,EAA/C,CAA+C;gCACvE,CAAC,CAAC,CACA,OAAO,YAAY,sDAAwB,CAAC,iBAAiB;oCAC3D,CAAC,CAAC,UAAC,KAAgB,IAAK,OAAA,WAAI,CAAC,UAAU,CAAC,WAAW,CAAC,KAAK,EAAE,OAAO,CAAC,EAA3C,CAA2C;oCACnE,CAAC,CAAC,IAAI,CACT,CACJ,CAAA;wBAEH,IAAI,CAAC,qBAAqB,EAAE;4BAC1B,MAAM,IAAI,KAAK,CAAC,qIAAqI,CAAC,CAAA;yBACvJ;wBAED,sBAAO,qBAAqB,CAAC,KAAK,CAAC,EAAA;;;;KACpC;IAEO,2DAA8B,GAAtC;QAAA,iBAKC;QAJC,OAAO,IAAI,OAAO,CAA0B,UAAM,GAAG;;;;4BAChC,qBAAM,IAAI,CAAC,GAAG,EAAE,EAAA;;wBAA7B,UAAU,GAAG,SAAgB;wBACnC,sBAAO,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,UAAA,SAAS,IAAI,OAAA,2CAAuB,CAAC,EAAE,EAAE,SAAS,CAAC,EAAtC,CAAsC,CAAC,CAAC,EAAA;;;aAChF,CAAC,CAAA;IACJ,CAAC;IAED,8CAAiB,GAAjB,UAAkB,kBAAmC;QAAnC,mCAAA,EAAA,0BAAmC;QACnD,OAAO,IAAI,qDAA0B,CACnC,IAAI,CAAC,8BAA8B,EAAE,EACrC,IAAI,CAAC,KAAK,EACV,kBAAkB,CACnB,CAAA;IACH,CAAC;IAED,gDAAmB,GAAnB;QACE,OAAO,IAAI,0DAA6B,CACtC,IAAI,CAAC,8BAA8B,EAAE,EACrC,IAAI,CAAC,KAAK,CACX,CAAA;IACH,CAAC;IAED,6CAAgB,GAAhB;QACE,OAAO,IAAI,oDAA0B,CACnC,IAAI,CAAC,8BAA8B,EAAE,EACrC,IAAI,CAAC,KAAK,CACX,CAAA;IACH,CAAC;IACH,yBAAC;AAAD,CAAC,AA1DD,CAAwC,mBAAmB,GA0D1D;AA1DY,gDAAkB;AA4D/B;IAA0C,gDAA8C;IAAxF;;IAyCA,CAAC;IAvCc,kCAAG,GAAhB;;;;;4BACyB,qBAAM,IAAI,kBAAkB,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,OAAO,CAAC,EAAA;;wBAAvE,cAAc,GAAG,SAAsD;wBACzE,6BAA6B,GAAG,cAAc,CAAC,CAAC,CAAC,CAAC;wBACtD,cAAc,CAAC,OAAO,CAAC,UAAA,aAAa;4BAClC,IAAI,aAAa,CAAC,KAAK,GAAG,6BAA6B,CAAC,KAAK,EAAE;gCAC7D,6BAA6B,GAAG,aAAa,CAAC;6BAC/C;wBACH,CAAC,CAAC,CAAC;wBACH,sBAAO,6BAA6B,EAAC;;;;KACtC;IAEO,4DAA6B,GAArC;QAAA,iBAKC;QAJC,OAAO,IAAI,OAAO,CAAwB,UAAM,GAAG;;;;4BAC/B,qBAAM,IAAI,CAAC,GAAG,EAAE,EAAA;;wBAA5B,SAAS,GAAG,SAAgB;wBAClC,sBAAO,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,2CAAuB,CAAK,EAAE,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,EAAA;;;aAC/E,CAAC,CAAA;IACJ,CAAC;IAED,gDAAiB,GAAjB,UAAkB,kBAAmC;QAAnC,mCAAA,EAAA,0BAAmC;QACnD,OAAO,IAAI,wDAA6B,CACtC,IAAI,CAAC,6BAA6B,EAAE,EACpC,IAAI,CAAC,KAAK,EACV,kBAAkB,CACnB,CAAA;IACH,CAAC;IAED,kDAAmB,GAAnB;QACE,OAAO,IAAI,6DAAgC,CACzC,IAAI,CAAC,6BAA6B,EAAE,EACpC,IAAI,CAAC,KAAK,CACX,CAAA;IACH,CAAC;IAED,+CAAgB,GAAhB;QACE,OAAO,IAAI,uDAA6B,CACtC,IAAI,CAAC,6BAA6B,EAAE,EACpC,IAAI,CAAC,KAAK,CACX,CAAA;IACH,CAAC;IACH,2BAAC;AAAD,CAAC,AAzCD,CAA0C,mBAAmB,GAyC5D;AAzCY,oDAAoB"}
\ No newline at end of file
import * as tf from '@tensorflow/tfjs-core';
import { TNetInput } from 'tfjs-image-recognition-base';
import { WithAge } from '../factories/WithAge';
import { WithFaceDetection } from '../factories/WithFaceDetection';
import { WithFaceLandmarks } from '../factories/WithFaceLandmarks';
import { WithGender } from '../factories/WithGender';
import { ComposableTask } from './ComposableTask';
import { ComputeAllFaceDescriptorsTask, ComputeSingleFaceDescriptorTask } from './ComputeFaceDescriptorsTasks';
import { PredictAllFaceExpressionsTask, PredictAllFaceExpressionsWithFaceAlignmentTask, PredictSingleFaceExpressionsTask, PredictSingleFaceExpressionsWithFaceAlignmentTask } from './PredictFaceExpressionsTask';
export declare class PredictAgeAndGenderTaskBase<TReturn, TParentReturn> extends ComposableTask<TReturn> {
protected parentTask: ComposableTask<TParentReturn> | Promise<TParentReturn>;
protected input: TNetInput;
protected extractedFaces?: (HTMLCanvasElement | tf.Tensor<tf.Rank.R3>)[] | undefined;
constructor(parentTask: ComposableTask<TParentReturn> | Promise<TParentReturn>, input: TNetInput, extractedFaces?: (HTMLCanvasElement | tf.Tensor<tf.Rank.R3>)[] | undefined);
}
export declare class PredictAllAgeAndGenderTask<TSource extends WithFaceDetection<{}>> extends PredictAgeAndGenderTaskBase<WithAge<WithGender<TSource>>[], TSource[]> {
run(): Promise<WithAge<WithGender<TSource>>[]>;
withFaceExpressions(): PredictAllFaceExpressionsTask<WithAge<WithGender<TSource>>>;
}
export declare class PredictSingleAgeAndGenderTask<TSource extends WithFaceDetection<{}>> extends PredictAgeAndGenderTaskBase<WithAge<WithGender<TSource>> | undefined, TSource | undefined> {
run(): Promise<WithAge<WithGender<TSource>> | undefined>;
withFaceExpressions(): PredictSingleFaceExpressionsTask<WithAge<WithGender<TSource>>>;
}
export declare class PredictAllAgeAndGenderWithFaceAlignmentTask<TSource extends WithFaceLandmarks<WithFaceDetection<{}>>> extends PredictAllAgeAndGenderTask<TSource> {
withFaceExpressions(): PredictAllFaceExpressionsWithFaceAlignmentTask<WithAge<WithGender<TSource>>>;
withFaceDescriptors(): ComputeAllFaceDescriptorsTask<WithAge<WithGender<TSource>>>;
}
export declare class PredictSingleAgeAndGenderWithFaceAlignmentTask<TSource extends WithFaceLandmarks<WithFaceDetection<{}>>> extends PredictSingleAgeAndGenderTask<TSource> {
withFaceExpressions(): PredictSingleFaceExpressionsWithFaceAlignmentTask<WithAge<WithGender<TSource>>>;
withFaceDescriptor(): ComputeSingleFaceDescriptorTask<WithAge<WithGender<TSource>>>;
}
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
var tslib_1 = require("tslib");
var WithAge_1 = require("../factories/WithAge");
var WithGender_1 = require("../factories/WithGender");
var ComposableTask_1 = require("./ComposableTask");
var ComputeFaceDescriptorsTasks_1 = require("./ComputeFaceDescriptorsTasks");
var extractFacesAndComputeResults_1 = require("./extractFacesAndComputeResults");
var nets_1 = require("./nets");
var PredictFaceExpressionsTask_1 = require("./PredictFaceExpressionsTask");
var PredictAgeAndGenderTaskBase = /** @class */ (function (_super) {
tslib_1.__extends(PredictAgeAndGenderTaskBase, _super);
function PredictAgeAndGenderTaskBase(parentTask, input, extractedFaces) {
var _this = _super.call(this) || this;
_this.parentTask = parentTask;
_this.input = input;
_this.extractedFaces = extractedFaces;
return _this;
}
return PredictAgeAndGenderTaskBase;
}(ComposableTask_1.ComposableTask));
exports.PredictAgeAndGenderTaskBase = PredictAgeAndGenderTaskBase;
var PredictAllAgeAndGenderTask = /** @class */ (function (_super) {
tslib_1.__extends(PredictAllAgeAndGenderTask, _super);
function PredictAllAgeAndGenderTask() {
return _super !== null && _super.apply(this, arguments) || this;
}
PredictAllAgeAndGenderTask.prototype.run = function () {
return tslib_1.__awaiter(this, void 0, void 0, function () {
var parentResults, ageAndGenderByFace;
var _this = this;
return tslib_1.__generator(this, function (_a) {
switch (_a.label) {
case 0: return [4 /*yield*/, this.parentTask];
case 1:
parentResults = _a.sent();
return [4 /*yield*/, extractFacesAndComputeResults_1.extractAllFacesAndComputeResults(parentResults, this.input, function (faces) { return tslib_1.__awaiter(_this, void 0, void 0, function () {
return tslib_1.__generator(this, function (_a) {
switch (_a.label) {
case 0: return [4 /*yield*/, Promise.all(faces.map(function (face) { return nets_1.nets.ageGenderNet.predictAgeAndGender(face); }))];
case 1: return [2 /*return*/, _a.sent()];
}
});
}); }, this.extractedFaces)];
case 2:
ageAndGenderByFace = _a.sent();
return [2 /*return*/, parentResults.map(function (parentResult, i) {
var _a = ageAndGenderByFace[i], age = _a.age, gender = _a.gender, genderProbability = _a.genderProbability;
return WithAge_1.extendWithAge(WithGender_1.extendWithGender(parentResult, gender, genderProbability), age);
})];
}
});
});
};
PredictAllAgeAndGenderTask.prototype.withFaceExpressions = function () {
return new PredictFaceExpressionsTask_1.PredictAllFaceExpressionsTask(this, this.input);
};
return PredictAllAgeAndGenderTask;
}(PredictAgeAndGenderTaskBase));
exports.PredictAllAgeAndGenderTask = PredictAllAgeAndGenderTask;
var PredictSingleAgeAndGenderTask = /** @class */ (function (_super) {
tslib_1.__extends(PredictSingleAgeAndGenderTask, _super);
function PredictSingleAgeAndGenderTask() {
return _super !== null && _super.apply(this, arguments) || this;
}
PredictSingleAgeAndGenderTask.prototype.run = function () {
return tslib_1.__awaiter(this, void 0, void 0, function () {
var parentResult, _a, age, gender, genderProbability;
return tslib_1.__generator(this, function (_b) {
switch (_b.label) {
case 0: return [4 /*yield*/, this.parentTask];
case 1:
parentResult = _b.sent();
if (!parentResult) {
return [2 /*return*/];
}
return [4 /*yield*/, extractFacesAndComputeResults_1.extractSingleFaceAndComputeResult(parentResult, this.input, function (face) { return nets_1.nets.ageGenderNet.predictAgeAndGender(face); }, this.extractedFaces)];
case 2:
_a = _b.sent(), age = _a.age, gender = _a.gender, genderProbability = _a.genderProbability;
return [2 /*return*/, WithAge_1.extendWithAge(WithGender_1.extendWithGender(parentResult, gender, genderProbability), age)];
}
});
});
};
PredictSingleAgeAndGenderTask.prototype.withFaceExpressions = function () {
return new PredictFaceExpressionsTask_1.PredictSingleFaceExpressionsTask(this, this.input);
};
return PredictSingleAgeAndGenderTask;
}(PredictAgeAndGenderTaskBase));
exports.PredictSingleAgeAndGenderTask = PredictSingleAgeAndGenderTask;
var PredictAllAgeAndGenderWithFaceAlignmentTask = /** @class */ (function (_super) {
tslib_1.__extends(PredictAllAgeAndGenderWithFaceAlignmentTask, _super);
function PredictAllAgeAndGenderWithFaceAlignmentTask() {
return _super !== null && _super.apply(this, arguments) || this;
}
PredictAllAgeAndGenderWithFaceAlignmentTask.prototype.withFaceExpressions = function () {
return new PredictFaceExpressionsTask_1.PredictAllFaceExpressionsWithFaceAlignmentTask(this, this.input);
};
PredictAllAgeAndGenderWithFaceAlignmentTask.prototype.withFaceDescriptors = function () {
return new ComputeFaceDescriptorsTasks_1.ComputeAllFaceDescriptorsTask(this, this.input);
};
return PredictAllAgeAndGenderWithFaceAlignmentTask;
}(PredictAllAgeAndGenderTask));
exports.PredictAllAgeAndGenderWithFaceAlignmentTask = PredictAllAgeAndGenderWithFaceAlignmentTask;
var PredictSingleAgeAndGenderWithFaceAlignmentTask = /** @class */ (function (_super) {
tslib_1.__extends(PredictSingleAgeAndGenderWithFaceAlignmentTask, _super);
function PredictSingleAgeAndGenderWithFaceAlignmentTask() {
return _super !== null && _super.apply(this, arguments) || this;
}
PredictSingleAgeAndGenderWithFaceAlignmentTask.prototype.withFaceExpressions = function () {
return new PredictFaceExpressionsTask_1.PredictSingleFaceExpressionsWithFaceAlignmentTask(this, this.input);
};
PredictSingleAgeAndGenderWithFaceAlignmentTask.prototype.withFaceDescriptor = function () {
return new ComputeFaceDescriptorsTasks_1.ComputeSingleFaceDescriptorTask(this, this.input);
};
return PredictSingleAgeAndGenderWithFaceAlignmentTask;
}(PredictSingleAgeAndGenderTask));
exports.PredictSingleAgeAndGenderWithFaceAlignmentTask = PredictSingleAgeAndGenderWithFaceAlignmentTask;
//# sourceMappingURL=PredictAgeAndGenderTask.js.map
\ No newline at end of file
{"version":3,"file":"PredictAgeAndGenderTask.js","sourceRoot":"","sources":["../../../src/globalApi/PredictAgeAndGenderTask.ts"],"names":[],"mappings":"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"}
\ No newline at end of file
import * as tf from '@tensorflow/tfjs-core';
import { TNetInput } from 'tfjs-image-recognition-base';
import { WithFaceDetection } from '../factories/WithFaceDetection';
import { WithFaceExpressions } from '../factories/WithFaceExpressions';
import { WithFaceLandmarks } from '../factories/WithFaceLandmarks';
import { ComposableTask } from './ComposableTask';
import { DetectAllFaceLandmarksTask, DetectSingleFaceLandmarksTask } from './DetectFaceLandmarksTasks';
import { ComputeAllFaceDescriptorsTask, ComputeSingleFaceDescriptorTask } from './ComputeFaceDescriptorsTasks';
import { PredictAllAgeAndGenderTask, PredictAllAgeAndGenderWithFaceAlignmentTask, PredictSingleAgeAndGenderTask, PredictSingleAgeAndGenderWithFaceAlignmentTask } from './PredictAgeAndGenderTask';
export declare class PredictFaceExpressionsTaskBase<TReturn, TParentReturn> extends ComposableTask<TReturn> {
protected parentTask: ComposableTask<TParentReturn> | Promise<TParentReturn>;
protected input: TNetInput;
constructor(parentTask: ComposableTask<TParentReturn> | Promise<TParentReturn>, input: TNetInput);
protected extractedFaces?: (HTMLCanvasElement | tf.Tensor<tf.Rank.R3>)[] | undefined;
constructor(parentTask: ComposableTask<TParentReturn> | Promise<TParentReturn>, input: TNetInput, extractedFaces?: (HTMLCanvasElement | tf.Tensor<tf.Rank.R3>)[] | undefined);
}
export declare class PredictAllFaceExpressionsTask<TSource extends WithFaceDetection<{}>> extends PredictFaceExpressionsTaskBase<WithFaceExpressions<TSource>[], TSource[]> {
run(): Promise<WithFaceExpressions<TSource>[]>;
withFaceLandmarks(): DetectAllFaceLandmarksTask<WithFaceExpressions<TSource>>;
withAgeAndGender(): PredictAllAgeAndGenderTask<WithFaceExpressions<TSource>>;
}
export declare class PredictSingleFaceExpressionTask<TSource extends WithFaceDetection<{}>> extends PredictFaceExpressionsTaskBase<WithFaceExpressions<TSource> | undefined, TSource | undefined> {
export declare class PredictSingleFaceExpressionsTask<TSource extends WithFaceDetection<{}>> extends PredictFaceExpressionsTaskBase<WithFaceExpressions<TSource> | undefined, TSource | undefined> {
run(): Promise<WithFaceExpressions<TSource> | undefined>;
withFaceLandmarks(): DetectSingleFaceLandmarksTask<WithFaceExpressions<TSource>>;
withAgeAndGender(): PredictSingleAgeAndGenderTask<WithFaceExpressions<TSource>>;
}
export declare class PredictAllFaceExpressionsWithFaceAlignmentTask<TSource extends WithFaceLandmarks<WithFaceDetection<{}>>> extends PredictAllFaceExpressionsTask<TSource> {
withAgeAndGender(): PredictAllAgeAndGenderWithFaceAlignmentTask<WithFaceExpressions<TSource>>;
withFaceDescriptors(): ComputeAllFaceDescriptorsTask<WithFaceExpressions<TSource>>;
}
export declare class PredictSingleFaceExpressionsWithFaceAlignmentTask<TSource extends WithFaceLandmarks<WithFaceDetection<{}>>> extends PredictSingleFaceExpressionsTask<TSource> {
withAgeAndGender(): PredictSingleAgeAndGenderWithFaceAlignmentTask<WithFaceExpressions<TSource>>;
withFaceDescriptor(): ComputeSingleFaceDescriptorTask<WithFaceExpressions<TSource>>;
}
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
var tslib_1 = require("tslib");
var tf = require("@tensorflow/tfjs-core");
var dom_1 = require("../dom");
var WithFaceExpressions_1 = require("../factories/WithFaceExpressions");
var ComposableTask_1 = require("./ComposableTask");
var DetectFaceLandmarksTasks_1 = require("./DetectFaceLandmarksTasks");
var ComputeFaceDescriptorsTasks_1 = require("./ComputeFaceDescriptorsTasks");
var extractFacesAndComputeResults_1 = require("./extractFacesAndComputeResults");
var nets_1 = require("./nets");
var PredictAgeAndGenderTask_1 = require("./PredictAgeAndGenderTask");
var PredictFaceExpressionsTaskBase = /** @class */ (function (_super) {
tslib_1.__extends(PredictFaceExpressionsTaskBase, _super);
function PredictFaceExpressionsTaskBase(parentTask, input) {
function PredictFaceExpressionsTaskBase(parentTask, input, extractedFaces) {
var _this = _super.call(this) || this;
_this.parentTask = parentTask;
_this.input = input;
_this.extractedFaces = extractedFaces;
return _this;
}
return PredictFaceExpressionsTaskBase;
......@@ -25,80 +26,90 @@ var PredictAllFaceExpressionsTask = /** @class */ (function (_super) {
}
PredictAllFaceExpressionsTask.prototype.run = function () {
return tslib_1.__awaiter(this, void 0, void 0, function () {
var parentResults, detections, faces, _a, faceExpressionsByFace;
return tslib_1.__generator(this, function (_b) {
switch (_b.label) {
var parentResults, faceExpressionsByFace;
var _this = this;
return tslib_1.__generator(this, function (_a) {
switch (_a.label) {
case 0: return [4 /*yield*/, this.parentTask];
case 1:
parentResults = _b.sent();
detections = parentResults.map(function (parentResult) { return parentResult.detection; });
if (!(this.input instanceof tf.Tensor)) return [3 /*break*/, 3];
return [4 /*yield*/, dom_1.extractFaceTensors(this.input, detections)];
parentResults = _a.sent();
return [4 /*yield*/, extractFacesAndComputeResults_1.extractAllFacesAndComputeResults(parentResults, this.input, function (faces) { return tslib_1.__awaiter(_this, void 0, void 0, function () {
return tslib_1.__generator(this, function (_a) {
switch (_a.label) {
case 0: return [4 /*yield*/, Promise.all(faces.map(function (face) { return nets_1.nets.faceExpressionNet.predictExpressions(face); }))];
case 1: return [2 /*return*/, _a.sent()];
}
});
}); }, this.extractedFaces)];
case 2:
_a = _b.sent();
return [3 /*break*/, 5];
case 3: return [4 /*yield*/, dom_1.extractFaces(this.input, detections)];
case 4:
_a = _b.sent();
_b.label = 5;
case 5:
faces = _a;
return [4 /*yield*/, Promise.all(faces.map(function (face) { return nets_1.nets.faceExpressionNet.predictExpressions(face); }))];
case 6:
faceExpressionsByFace = _b.sent();
faces.forEach(function (f) { return f instanceof tf.Tensor && f.dispose(); });
faceExpressionsByFace = _a.sent();
return [2 /*return*/, parentResults.map(function (parentResult, i) { return WithFaceExpressions_1.extendWithFaceExpressions(parentResult, faceExpressionsByFace[i]); })];
}
});
});
};
PredictAllFaceExpressionsTask.prototype.withFaceLandmarks = function () {
return new DetectFaceLandmarksTasks_1.DetectAllFaceLandmarksTask(this, this.input, false);
PredictAllFaceExpressionsTask.prototype.withAgeAndGender = function () {
return new PredictAgeAndGenderTask_1.PredictAllAgeAndGenderTask(this, this.input);
};
return PredictAllFaceExpressionsTask;
}(PredictFaceExpressionsTaskBase));
exports.PredictAllFaceExpressionsTask = PredictAllFaceExpressionsTask;
var PredictSingleFaceExpressionTask = /** @class */ (function (_super) {
tslib_1.__extends(PredictSingleFaceExpressionTask, _super);
function PredictSingleFaceExpressionTask() {
var PredictSingleFaceExpressionsTask = /** @class */ (function (_super) {
tslib_1.__extends(PredictSingleFaceExpressionsTask, _super);
function PredictSingleFaceExpressionsTask() {
return _super !== null && _super.apply(this, arguments) || this;
}
PredictSingleFaceExpressionTask.prototype.run = function () {
PredictSingleFaceExpressionsTask.prototype.run = function () {
return tslib_1.__awaiter(this, void 0, void 0, function () {
var parentResult, detection, faces, _a, faceExpressions;
return tslib_1.__generator(this, function (_b) {
switch (_b.label) {
var parentResult, faceExpressions;
return tslib_1.__generator(this, function (_a) {
switch (_a.label) {
case 0: return [4 /*yield*/, this.parentTask];
case 1:
parentResult = _b.sent();
parentResult = _a.sent();
if (!parentResult) {
return [2 /*return*/];
}
detection = parentResult.detection;
if (!(this.input instanceof tf.Tensor)) return [3 /*break*/, 3];
return [4 /*yield*/, dom_1.extractFaceTensors(this.input, [detection])];
return [4 /*yield*/, extractFacesAndComputeResults_1.extractSingleFaceAndComputeResult(parentResult, this.input, function (face) { return nets_1.nets.faceExpressionNet.predictExpressions(face); }, this.extractedFaces)];
case 2:
_a = _b.sent();
return [3 /*break*/, 5];
case 3: return [4 /*yield*/, dom_1.extractFaces(this.input, [detection])];
case 4:
_a = _b.sent();
_b.label = 5;
case 5:
faces = _a;
return [4 /*yield*/, nets_1.nets.faceExpressionNet.predictExpressions(faces[0])];
case 6:
faceExpressions = _b.sent();
faces.forEach(function (f) { return f instanceof tf.Tensor && f.dispose(); });
faceExpressions = _a.sent();
return [2 /*return*/, WithFaceExpressions_1.extendWithFaceExpressions(parentResult, faceExpressions)];
}
});
});
};
PredictSingleFaceExpressionTask.prototype.withFaceLandmarks = function () {
return new DetectFaceLandmarksTasks_1.DetectSingleFaceLandmarksTask(this, this.input, false);
PredictSingleFaceExpressionsTask.prototype.withAgeAndGender = function () {
return new PredictAgeAndGenderTask_1.PredictSingleAgeAndGenderTask(this, this.input);
};
return PredictSingleFaceExpressionTask;
return PredictSingleFaceExpressionsTask;
}(PredictFaceExpressionsTaskBase));
exports.PredictSingleFaceExpressionTask = PredictSingleFaceExpressionTask;
exports.PredictSingleFaceExpressionsTask = PredictSingleFaceExpressionsTask;
var PredictAllFaceExpressionsWithFaceAlignmentTask = /** @class */ (function (_super) {
tslib_1.__extends(PredictAllFaceExpressionsWithFaceAlignmentTask, _super);
function PredictAllFaceExpressionsWithFaceAlignmentTask() {
return _super !== null && _super.apply(this, arguments) || this;
}
PredictAllFaceExpressionsWithFaceAlignmentTask.prototype.withAgeAndGender = function () {
return new PredictAgeAndGenderTask_1.PredictAllAgeAndGenderWithFaceAlignmentTask(this, this.input);
};
PredictAllFaceExpressionsWithFaceAlignmentTask.prototype.withFaceDescriptors = function () {
return new ComputeFaceDescriptorsTasks_1.ComputeAllFaceDescriptorsTask(this, this.input);
};
return PredictAllFaceExpressionsWithFaceAlignmentTask;
}(PredictAllFaceExpressionsTask));
exports.PredictAllFaceExpressionsWithFaceAlignmentTask = PredictAllFaceExpressionsWithFaceAlignmentTask;
var PredictSingleFaceExpressionsWithFaceAlignmentTask = /** @class */ (function (_super) {
tslib_1.__extends(PredictSingleFaceExpressionsWithFaceAlignmentTask, _super);
function PredictSingleFaceExpressionsWithFaceAlignmentTask() {
return _super !== null && _super.apply(this, arguments) || this;
}
PredictSingleFaceExpressionsWithFaceAlignmentTask.prototype.withAgeAndGender = function () {
return new PredictAgeAndGenderTask_1.PredictSingleAgeAndGenderWithFaceAlignmentTask(this, this.input);
};
PredictSingleFaceExpressionsWithFaceAlignmentTask.prototype.withFaceDescriptor = function () {
return new ComputeFaceDescriptorsTasks_1.ComputeSingleFaceDescriptorTask(this, this.input);
};
return PredictSingleFaceExpressionsWithFaceAlignmentTask;
}(PredictSingleFaceExpressionsTask));
exports.PredictSingleFaceExpressionsWithFaceAlignmentTask = PredictSingleFaceExpressionsWithFaceAlignmentTask;
//# sourceMappingURL=PredictFaceExpressionsTask.js.map
\ No newline at end of file
{"version":3,"file":"PredictFaceExpressionsTask.js","sourceRoot":"","sources":["../../../src/globalApi/PredictFaceExpressionsTask.ts"],"names":[],"mappings":";;;AAAA,0CAA4C;AAG5C,8BAA0D;AAG1D,wEAAkG;AAClG,mDAAkD;AAClD,uEAAuG;AACvG,+BAA8B;AAE9B;IAA4E,0DAAuB;IACjG,wCACY,UAAkE,EAClE,KAAgB;QAF5B,YAIE,iBAAO,SACR;QAJW,gBAAU,GAAV,UAAU,CAAwD;QAClE,WAAK,GAAL,KAAK,CAAW;;IAG5B,CAAC;IACH,qCAAC;AAAD,CAAC,AAPD,CAA4E,+BAAc,GAOzF;AAPY,wEAA8B;AAS3C;IAEU,yDAAyE;IAFnF;;IA2BA,CAAC;IAvBc,2CAAG,GAAhB;;;;;4BAEwB,qBAAM,IAAI,CAAC,UAAU,EAAA;;wBAArC,aAAa,GAAG,SAAqB;wBAErC,UAAU,GAAG,aAAa,CAAC,GAAG,CAAC,UAAA,YAAY,IAAI,OAAA,YAAY,CAAC,SAAS,EAAtB,CAAsB,CAAC,CAAA;6BACtB,CAAA,IAAI,CAAC,KAAK,YAAY,EAAE,CAAC,MAAM,CAAA,EAA/B,wBAA+B;wBACjF,qBAAM,wBAAkB,CAAC,IAAI,CAAC,KAAK,EAAE,UAAU,CAAC,EAAA;;wBAAhD,KAAA,SAAgD,CAAA;;4BAChD,qBAAM,kBAAY,CAAC,IAAI,CAAC,KAAK,EAAE,UAAU,CAAC,EAAA;;wBAA1C,KAAA,SAA0C,CAAA;;;wBAFxC,KAAK,KAEmC;wBAEhB,qBAAM,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CACvD,UAAA,IAAI,IAAI,OAAA,WAAI,CAAC,iBAAiB,CAAC,kBAAkB,CAAC,IAAI,CAAC,EAA/C,CAA+C,CACxD,CAAC,EAAA;;wBAFI,qBAAqB,GAAG,SAEI;wBAElC,KAAK,CAAC,OAAO,CAAC,UAAA,CAAC,IAAI,OAAA,CAAC,YAAY,EAAE,CAAC,MAAM,IAAI,CAAC,CAAC,OAAO,EAAE,EAArC,CAAqC,CAAC,CAAA;wBAEzD,sBAAO,aAAa,CAAC,GAAG,CACtB,UAAC,YAAY,EAAE,CAAC,IAAK,OAAA,+CAAyB,CAAU,YAAY,EAAE,qBAAqB,CAAC,CAAC,CAAC,CAAC,EAA1E,CAA0E,CAChG,EAAA;;;;KACF;IAED,yDAAiB,GAAjB;QACE,OAAO,IAAI,qDAA0B,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,EAAE,KAAK,CAAC,CAAA;IAChE,CAAC;IACH,oCAAC;AAAD,CAAC,AA3BD,CAEU,8BAA8B,GAyBvC;AA3BY,sEAA6B;AA6B1C;IAEW,2DAA6F;IAFxG;;IA0BA,CAAC;IAtBc,6CAAG,GAAhB;;;;;4BAEuB,qBAAM,IAAI,CAAC,UAAU,EAAA;;wBAApC,YAAY,GAAG,SAAqB;wBAC1C,IAAI,CAAC,YAAY,EAAE;4BACjB,sBAAM;yBACP;wBAEO,SAAS,GAAK,YAAY,UAAjB,CAAiB;6BACoB,CAAA,IAAI,CAAC,KAAK,YAAY,EAAE,CAAC,MAAM,CAAA,EAA/B,wBAA+B;wBACjF,qBAAM,wBAAkB,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,SAAS,CAAC,CAAC,EAAA;;wBAAjD,KAAA,SAAiD,CAAA;;4BACjD,qBAAM,kBAAY,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,SAAS,CAAC,CAAC,EAAA;;wBAA3C,KAAA,SAA2C,CAAA;;;wBAFzC,KAAK,KAEoC;wBAEvB,qBAAM,WAAI,CAAC,iBAAiB,CAAC,kBAAkB,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAA;;wBAA3E,eAAe,GAAG,SAAuF;wBAE/G,KAAK,CAAC,OAAO,CAAC,UAAA,CAAC,IAAI,OAAA,CAAC,YAAY,EAAE,CAAC,MAAM,IAAI,CAAC,CAAC,OAAO,EAAE,EAArC,CAAqC,CAAC,CAAA;wBAEzD,sBAAO,+CAAyB,CAAC,YAAY,EAAE,eAAe,CAAC,EAAA;;;;KAChE;IAED,2DAAiB,GAAjB;QACE,OAAO,IAAI,wDAA6B,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,EAAE,KAAK,CAAC,CAAA;IACnE,CAAC;IACH,sCAAC;AAAD,CAAC,AA1BD,CAEW,8BAA8B,GAwBxC;AA1BY,0EAA+B"}
\ No newline at end of file
{"version":3,"file":"PredictFaceExpressionsTask.js","sourceRoot":"","sources":["../../../src/globalApi/PredictFaceExpressionsTask.ts"],"names":[],"mappings":"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"}
\ No newline at end of file
import * as tf from '@tensorflow/tfjs-core';
import { TNetInput } from 'tfjs-image-recognition-base';
import { FaceDetection } from '../classes/FaceDetection';
import { WithFaceDetection } from '../factories/WithFaceDetection';
import { WithFaceLandmarks } from '../factories/WithFaceLandmarks';
export declare function extractAllFacesAndComputeResults<TSource extends WithFaceDetection<{}>, TResult>(parentResults: TSource[], input: TNetInput, computeResults: (faces: Array<HTMLCanvasElement | tf.Tensor3D>) => Promise<TResult>, extractedFaces?: Array<HTMLCanvasElement | tf.Tensor3D> | null, getRectForAlignment?: (parentResult: WithFaceLandmarks<TSource, any>) => FaceDetection): Promise<TResult>;
export declare function extractSingleFaceAndComputeResult<TSource extends WithFaceDetection<{}>, TResult>(parentResult: TSource, input: TNetInput, computeResult: (face: HTMLCanvasElement | tf.Tensor3D) => Promise<TResult>, extractedFaces?: Array<HTMLCanvasElement | tf.Tensor3D> | null, getRectForAlignment?: (parentResult: WithFaceLandmarks<TSource, any>) => FaceDetection): Promise<TResult>;
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
var tslib_1 = require("tslib");
var tf = require("@tensorflow/tfjs-core");
var dom_1 = require("../dom");
var WithFaceLandmarks_1 = require("../factories/WithFaceLandmarks");
function extractAllFacesAndComputeResults(parentResults, input, computeResults, extractedFaces, getRectForAlignment) {
if (getRectForAlignment === void 0) { getRectForAlignment = function (_a) {
var alignedRect = _a.alignedRect;
return alignedRect;
}; }
return tslib_1.__awaiter(this, void 0, void 0, function () {
var faceBoxes, faces, _a, _b, results;
return tslib_1.__generator(this, function (_c) {
switch (_c.label) {
case 0:
faceBoxes = parentResults.map(function (parentResult) {
return WithFaceLandmarks_1.isWithFaceLandmarks(parentResult)
? getRectForAlignment(parentResult)
: parentResult.detection;
});
_a = extractedFaces;
if (_a) return [3 /*break*/, 5];
if (!(input instanceof tf.Tensor)) return [3 /*break*/, 2];
return [4 /*yield*/, dom_1.extractFaceTensors(input, faceBoxes)];
case 1:
_b = _c.sent();
return [3 /*break*/, 4];
case 2: return [4 /*yield*/, dom_1.extractFaces(input, faceBoxes)];
case 3:
_b = _c.sent();
_c.label = 4;
case 4:
_a = (_b);
_c.label = 5;
case 5:
faces = _a;
return [4 /*yield*/, computeResults(faces)];
case 6:
results = _c.sent();
faces.forEach(function (f) { return f instanceof tf.Tensor && f.dispose(); });
return [2 /*return*/, results];
}
});
});
}
exports.extractAllFacesAndComputeResults = extractAllFacesAndComputeResults;
function extractSingleFaceAndComputeResult(parentResult, input, computeResult, extractedFaces, getRectForAlignment) {
return tslib_1.__awaiter(this, void 0, void 0, function () {
var _this = this;
return tslib_1.__generator(this, function (_a) {
return [2 /*return*/, extractAllFacesAndComputeResults([parentResult], input, function (faces) { return tslib_1.__awaiter(_this, void 0, void 0, function () { return tslib_1.__generator(this, function (_a) {
return [2 /*return*/, computeResult(faces[0])];
}); }); }, extractedFaces, getRectForAlignment)];
});
});
}
exports.extractSingleFaceAndComputeResult = extractSingleFaceAndComputeResult;
//# sourceMappingURL=extractFacesAndComputeResults.js.map
\ No newline at end of file
{"version":3,"file":"extractFacesAndComputeResults.js","sourceRoot":"","sources":["../../../src/globalApi/extractFacesAndComputeResults.ts"],"names":[],"mappings":";;;AAAA,0CAA4C;AAI5C,8BAA0D;AAE1D,oEAAwF;AAExF,SAAsB,gCAAgC,CACpD,aAAwB,EACxB,KAAgB,EAChB,cAAmF,EACnF,cAA8D,EAC9D,mBAAwH;IAAxH,oCAAA,EAAA,gCAAyF,EAAe;YAAb,4BAAW;QAAO,OAAA,WAAW;IAAX,CAAW;;;;;;oBAElH,SAAS,GAAG,aAAa,CAAC,GAAG,CAAC,UAAA,YAAY;wBAC9C,OAAA,uCAAmB,CAAC,YAAY,CAAC;4BAC/B,CAAC,CAAC,mBAAmB,CAAC,YAAY,CAAC;4BACnC,CAAC,CAAC,YAAY,CAAC,SAAS;oBAF1B,CAE0B,CAC3B,CAAA;oBACqD,KAAA,cAAc,CAAA;4BAAd,wBAAc;yBAClE,CAAA,KAAK,YAAY,EAAE,CAAC,MAAM,CAAA,EAA1B,wBAA0B;oBACtB,qBAAM,wBAAkB,CAAC,KAAK,EAAE,SAAS,CAAC,EAAA;;oBAA1C,KAAA,SAA0C,CAAA;;wBAC1C,qBAAM,kBAAY,CAAC,KAAK,EAAE,SAAS,CAAC,EAAA;;oBAApC,KAAA,SAAoC,CAAA;;;oBAH8B,KAAA,IAIvE,CAAA;;;oBAJK,KAAK,KAIV;oBAEe,qBAAM,cAAc,CAAC,KAAK,CAAC,EAAA;;oBAArC,OAAO,GAAG,SAA2B;oBAE3C,KAAK,CAAC,OAAO,CAAC,UAAA,CAAC,IAAI,OAAA,CAAC,YAAY,EAAE,CAAC,MAAM,IAAI,CAAC,CAAC,OAAO,EAAE,EAArC,CAAqC,CAAC,CAAA;oBAEzD,sBAAO,OAAO,EAAA;;;;CACf;AAvBD,4EAuBC;AAED,SAAsB,iCAAiC,CACrD,YAAqB,EACrB,KAAgB,EAChB,aAA0E,EAC1E,cAA8D,EAC9D,mBAAsF;;;;YAEtF,sBAAO,gCAAgC,CACrC,CAAC,YAAY,CAAC,EACd,KAAK,EACL,UAAM,KAAK;oBAAI,sBAAA,aAAa,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAA;yBAAA,EACtC,cAAc,EACd,mBAAmB,CACpB,EAAA;;;CACF;AAdD,8EAcC"}
\ No newline at end of file
import { TfjsImageRecognitionBase, TNetInput } from 'tfjs-image-recognition-base';
import { AgeGenderNet } from '../ageGenderNet/AgeGenderNet';
import { AgeAndGenderPrediction } from '../ageGenderNet/types';
import { FaceDetection } from '../classes/FaceDetection';
import { FaceLandmarks5 } from '../classes/FaceLandmarks5';
import { FaceLandmarks68 } from '../classes/FaceLandmarks68';
import { FaceExpressionNet } from '../faceExpressionNet/FaceExpressionNet';
import { FaceExpressionPrediction } from '../faceExpressionNet/types';
import { FaceExpressions } from '../faceExpressionNet/FaceExpressions';
import { FaceLandmark68Net } from '../faceLandmarkNet/FaceLandmark68Net';
import { FaceLandmark68TinyNet } from '../faceLandmarkNet/FaceLandmark68TinyNet';
import { FaceRecognitionNet } from '../faceRecognitionNet/FaceRecognitionNet';
......@@ -24,6 +26,7 @@ export declare const nets: {
faceLandmark68TinyNet: FaceLandmark68TinyNet;
faceRecognitionNet: FaceRecognitionNet;
faceExpressionNet: FaceExpressionNet;
ageGenderNet: AgeGenderNet;
};
/**
* Attempts to detect all faces in an image using SSD Mobilenetv1 Network.
......@@ -90,14 +93,21 @@ export declare const detectFaceLandmarksTiny: (input: TNetInput) => Promise<Face
*/
export declare const computeFaceDescriptor: (input: TNetInput) => Promise<Float32Array | Float32Array[]>;
/**
* Recognizes the facial expressions of a face and returns the likelyhood of
* each facial expression.
* Recognizes the facial expressions from a face image.
*
* @param inputs The face image extracted from the bounding box of a face. Can
* also be an array of input images, which will be batch processed.
* @returns An array of facial expressions with corresponding probabilities or array thereof in case of batch input.
* @returns Facial expressions with corresponding probabilities or array thereof in case of batch input.
*/
export declare const recognizeFaceExpressions: (input: TNetInput) => Promise<FaceExpressionPrediction[] | FaceExpressionPrediction[][]>;
export declare const recognizeFaceExpressions: (input: TNetInput) => Promise<FaceExpressions | FaceExpressions[]>;
/**
* Predicts age and gender from a face image.
*
* @param inputs The face image extracted from the bounding box of a face. Can
* also be an array of input images, which will be batch processed.
* @returns Predictions with age, gender and gender probability or array thereof in case of batch input.
*/
export declare const predictAgeAndGender: (input: TNetInput) => Promise<AgeAndGenderPrediction | AgeAndGenderPrediction[]>;
export declare const loadSsdMobilenetv1Model: (url: string) => Promise<void>;
export declare const loadTinyFaceDetectorModel: (url: string) => Promise<void>;
export declare const loadMtcnnModel: (url: string) => Promise<void>;
......@@ -106,6 +116,7 @@ export declare const loadFaceLandmarkModel: (url: string) => Promise<void>;
export declare const loadFaceLandmarkTinyModel: (url: string) => Promise<void>;
export declare const loadFaceRecognitionModel: (url: string) => Promise<void>;
export declare const loadFaceExpressionModel: (url: string) => Promise<void>;
export declare const loadAgeGenderModel: (url: string) => Promise<void>;
export declare const loadFaceDetectionModel: (url: string) => Promise<void>;
export declare const locateFaces: (input: TNetInput, options: SsdMobilenetv1Options) => Promise<FaceDetection[]>;
export declare const detectLandmarks: (input: TNetInput) => Promise<FaceLandmarks68 | FaceLandmarks68[]>;
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
var AgeGenderNet_1 = require("../ageGenderNet/AgeGenderNet");
var FaceExpressionNet_1 = require("../faceExpressionNet/FaceExpressionNet");
var FaceLandmark68Net_1 = require("../faceLandmarkNet/FaceLandmark68Net");
var FaceLandmark68TinyNet_1 = require("../faceLandmarkNet/FaceLandmark68TinyNet");
......@@ -16,7 +17,8 @@ exports.nets = {
faceLandmark68Net: new FaceLandmark68Net_1.FaceLandmark68Net(),
faceLandmark68TinyNet: new FaceLandmark68TinyNet_1.FaceLandmark68TinyNet(),
faceRecognitionNet: new FaceRecognitionNet_1.FaceRecognitionNet(),
faceExpressionNet: new FaceExpressionNet_1.FaceExpressionNet()
faceExpressionNet: new FaceExpressionNet_1.FaceExpressionNet(),
ageGenderNet: new AgeGenderNet_1.AgeGenderNet()
};
/**
* Attempts to detect all faces in an image using SSD Mobilenetv1 Network.
......@@ -95,16 +97,25 @@ exports.computeFaceDescriptor = function (input) {
return exports.nets.faceRecognitionNet.computeFaceDescriptor(input);
};
/**
* Recognizes the facial expressions of a face and returns the likelyhood of
* each facial expression.
* Recognizes the facial expressions from a face image.
*
* @param inputs The face image extracted from the bounding box of a face. Can
* also be an array of input images, which will be batch processed.
* @returns An array of facial expressions with corresponding probabilities or array thereof in case of batch input.
* @returns Facial expressions with corresponding probabilities or array thereof in case of batch input.
*/
exports.recognizeFaceExpressions = function (input) {
return exports.nets.faceExpressionNet.predictExpressions(input);
};
/**
* Predicts age and gender from a face image.
*
* @param inputs The face image extracted from the bounding box of a face. Can
* also be an array of input images, which will be batch processed.
* @returns Predictions with age, gender and gender probability or array thereof in case of batch input.
*/
exports.predictAgeAndGender = function (input) {
return exports.nets.ageGenderNet.predictAgeAndGender(input);
};
exports.loadSsdMobilenetv1Model = function (url) { return exports.nets.ssdMobilenetv1.load(url); };
exports.loadTinyFaceDetectorModel = function (url) { return exports.nets.tinyFaceDetector.load(url); };
exports.loadMtcnnModel = function (url) { return exports.nets.mtcnn.load(url); };
......@@ -113,6 +124,7 @@ exports.loadFaceLandmarkModel = function (url) { return exports.nets.faceLandmar
exports.loadFaceLandmarkTinyModel = function (url) { return exports.nets.faceLandmark68TinyNet.load(url); };
exports.loadFaceRecognitionModel = function (url) { return exports.nets.faceRecognitionNet.load(url); };
exports.loadFaceExpressionModel = function (url) { return exports.nets.faceExpressionNet.load(url); };
exports.loadAgeGenderModel = function (url) { return exports.nets.ageGenderNet.load(url); };
// backward compatibility
exports.loadFaceDetectionModel = exports.loadSsdMobilenetv1Model;
exports.locateFaces = exports.ssdMobilenetv1;
......
{"version":3,"file":"nets.js","sourceRoot":"","sources":["../../../src/globalApi/nets.ts"],"names":[],"mappings":"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"}
\ No newline at end of file
{"version":3,"file":"nets.js","sourceRoot":"","sources":["../../../src/globalApi/nets.ts"],"names":[],"mappings":"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"}
\ No newline at end of file
import * as tf from '@tensorflow/tfjs-core';
import { draw as drawBase } from 'tfjs-image-recognition-base';
import * as drawExtended from './draw';
export { tf };
export * from 'tfjs-image-recognition-base';
export * from './ageGenderNet/index';
declare const draw: {
drawContour(ctx: CanvasRenderingContext2D, points: import("tfjs-image-recognition-base").Point[], isClosed?: boolean): void;
drawDetections(canvasArg: string | HTMLCanvasElement, detections: import("tfjs-image-recognition-base").IRect | import("tfjs-image-recognition-base").IBoundingBox | import("./classes").FaceDetection | {
detection: import("./classes").FaceDetection;
} | drawExtended.TDrawDetectionsInput[]): void;
drawFaceExpressions(canvasArg: string | HTMLCanvasElement, faceExpressions: import("./faceExpressionNet").FaceExpressions | {
expressions: import("./faceExpressionNet").FaceExpressions;
} | drawExtended.DrawFaceExpressionsInput[], minConfidence?: number, textFieldAnchor?: import("tfjs-image-recognition-base").IPoint | undefined): void;
drawFaceLandmarks(canvasArg: string | HTMLCanvasElement, faceLandmarks: import("./classes").FaceLandmarks | import("./factories").WithFaceLandmarks<{
detection: import("./classes").FaceDetection;
}, import("./classes").FaceLandmarks68> | drawExtended.DrawFaceLandmarksInput[]): void;
DrawFaceLandmarksOptions: typeof drawExtended.DrawFaceLandmarksOptions;
DrawFaceLandmarks: typeof drawExtended.DrawFaceLandmarks;
DrawBoxOptions: typeof drawBase.DrawBoxOptions;
DrawBox: typeof drawBase.DrawBox;
AnchorPosition: typeof drawBase.AnchorPosition;
DrawTextFieldOptions: typeof drawBase.DrawTextFieldOptions;
DrawTextField: typeof drawBase.DrawTextField;
};
export { draw };
export * from './classes/index';
export * from './dom/index';
export * from './faceExpressionNet/index';
......
......@@ -3,7 +3,12 @@ Object.defineProperty(exports, "__esModule", { value: true });
var tslib_1 = require("tslib");
var tf = require("@tensorflow/tfjs-core");
exports.tf = tf;
var tfjs_image_recognition_base_1 = require("tfjs-image-recognition-base");
var drawExtended = require("./draw");
tslib_1.__exportStar(require("tfjs-image-recognition-base"), exports);
tslib_1.__exportStar(require("./ageGenderNet/index"), exports);
var draw = tslib_1.__assign({}, tfjs_image_recognition_base_1.draw, drawExtended);
exports.draw = draw;
tslib_1.__exportStar(require("./classes/index"), exports);
tslib_1.__exportStar(require("./dom/index"), exports);
tslib_1.__exportStar(require("./faceExpressionNet/index"), exports);
......
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":";;;AAAA,0CAA4C;AAG1C,gBAAE;AAGJ,sEAA4C;AAE5C,0DAAgC;AAChC,sDAA2B;AAC3B,oEAA0C;AAC1C,kEAAwC;AACxC,qEAA2C;AAC3C,4DAAkC;AAClC,4DAAkC;AAClC,wDAA8B;AAC9B,iEAAuC;AACvC,mEAAyC;AACzC,6DAAmC;AAEnC,8DAAoC;AACpC,0DAAgC"}
\ No newline at end of file
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":";;;AAAA,0CAA4C;AAM1C,gBAAE;AALJ,2EAA+D;AAE/D,qCAAuC;AAMvC,sEAA4C;AAE5C,+DAAqC;AACrC,IAAM,IAAI,wBAAO,kCAAQ,EAAK,YAAY,CAAE,CAAA;AACnC,oBAAI;AAEb,0DAAgC;AAChC,sDAA2B;AAC3B,oEAA0C;AAC1C,kEAAwC;AACxC,qEAA2C;AAC3C,4DAAkC;AAClC,4DAAkC;AAClC,wDAA8B;AAC9B,iEAAuC;AACvC,mEAAyC;AACzC,6DAAmC;AAEnC,8DAAoC;AACpC,0DAAgC"}
\ No newline at end of file
import { BoundingBox, IPoint } from 'tfjs-image-recognition-base';
export declare function minBbox(pts: IPoint[]): BoundingBox;
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
var tfjs_image_recognition_base_1 = require("tfjs-image-recognition-base");
function minBbox(pts) {
var xs = pts.map(function (pt) { return pt.x; });
var ys = pts.map(function (pt) { return pt.y; });
var minX = xs.reduce(function (min, x) { return x < min ? x : min; }, Infinity);
var minY = ys.reduce(function (min, y) { return y < min ? y : min; }, Infinity);
var maxX = xs.reduce(function (max, x) { return max < x ? x : max; }, 0);
var maxY = ys.reduce(function (max, y) { return max < y ? y : max; }, 0);
return new tfjs_image_recognition_base_1.BoundingBox(minX, minY, maxX, maxY);
}
exports.minBbox = minBbox;
//# sourceMappingURL=minBbox.js.map
\ No newline at end of file
{"version":3,"file":"minBbox.js","sourceRoot":"","sources":["../../src/minBbox.ts"],"names":[],"mappings":";;AAAA,2EAAkE;AAElE,SAAgB,OAAO,CAAC,GAAa;IACnC,IAAM,EAAE,GAAG,GAAG,CAAC,GAAG,CAAC,UAAA,EAAE,IAAI,OAAA,EAAE,CAAC,CAAC,EAAJ,CAAI,CAAC,CAAA;IAC9B,IAAM,EAAE,GAAG,GAAG,CAAC,GAAG,CAAC,UAAA,EAAE,IAAI,OAAA,EAAE,CAAC,CAAC,EAAJ,CAAI,CAAC,CAAA;IAC9B,IAAM,IAAI,GAAG,EAAE,CAAC,MAAM,CAAC,UAAC,GAAG,EAAE,CAAC,IAAK,OAAA,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,EAAjB,CAAiB,EAAE,QAAQ,CAAC,CAAA;IAC/D,IAAM,IAAI,GAAG,EAAE,CAAC,MAAM,CAAC,UAAC,GAAG,EAAE,CAAC,IAAK,OAAA,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,EAAjB,CAAiB,EAAE,QAAQ,CAAC,CAAA;IAC/D,IAAM,IAAI,GAAG,EAAE,CAAC,MAAM,CAAC,UAAC,GAAG,EAAE,CAAC,IAAK,OAAA,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,EAAjB,CAAiB,EAAE,CAAC,CAAC,CAAA;IACxD,IAAM,IAAI,GAAG,EAAE,CAAC,MAAM,CAAC,UAAC,GAAG,EAAE,CAAC,IAAK,OAAA,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,EAAjB,CAAiB,EAAE,CAAC,CAAC,CAAA;IAExD,OAAO,IAAI,yCAAW,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAA;AAChD,CAAC;AATD,0BASC"}
\ No newline at end of file
import { IDimensions } from 'tfjs-image-recognition-base';
export declare function resizeResults<T>(results: T, { width, height }: IDimensions): T;
export declare function resizeResults<T>(results: T, dimensions: IDimensions): T;
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
var tfjs_image_recognition_base_1 = require("tfjs-image-recognition-base");
var FaceDetection_1 = require("./classes/FaceDetection");
var FaceLandmarks_1 = require("./classes/FaceLandmarks");
var WithFaceDetection_1 = require("./factories/WithFaceDetection");
var WithFaceLandmarks_1 = require("./factories/WithFaceLandmarks");
function resizeResults(results, _a) {
var width = _a.width, height = _a.height;
function resizeResults(results, dimensions) {
var _a = new tfjs_image_recognition_base_1.Dimensions(dimensions.width, dimensions.height), width = _a.width, height = _a.height;
if (width <= 0 || height <= 0) {
throw new Error("resizeResults - invalid dimensions: " + JSON.stringify({ width: width, height: height }));
}
if (Array.isArray(results)) {
return results.map(function (obj) { return resizeResults(obj, { width: width, height: height }); });
}
var hasLandmarks = results['unshiftedLandmarks'] && results['unshiftedLandmarks'] instanceof FaceLandmarks_1.FaceLandmarks;
var hasDetection = results['detection'] && results['detection'] instanceof FaceDetection_1.FaceDetection;
if (hasLandmarks) {
var resizedDetection = results['detection'].forSize(width, height);
var resizedLandmarks = results['unshiftedLandmarks'].forSize(resizedDetection.box.width, resizedDetection.box.height);
if (WithFaceLandmarks_1.isWithFaceLandmarks(results)) {
var resizedDetection = results.detection.forSize(width, height);
var resizedLandmarks = results.unshiftedLandmarks.forSize(resizedDetection.box.width, resizedDetection.box.height);
return WithFaceLandmarks_1.extendWithFaceLandmarks(WithFaceDetection_1.extendWithFaceDetection(results, resizedDetection), resizedLandmarks);
}
if (hasDetection) {
return WithFaceDetection_1.extendWithFaceDetection(results, results['detection'].forSize(width, height));
if (WithFaceDetection_1.isWithFaceDetection(results)) {
return WithFaceDetection_1.extendWithFaceDetection(results, results.detection.forSize(width, height));
}
if (results instanceof FaceLandmarks_1.FaceLandmarks || results instanceof FaceDetection_1.FaceDetection) {
return results.forSize(width, height);
......
{"version":3,"file":"resizeResults.js","sourceRoot":"","sources":["../../src/resizeResults.ts"],"names":[],"mappings":";;AAEA,yDAAwD;AACxD,yDAAwD;AACxD,mEAAwE;AACxE,mEAAwE;AAExE,SAAgB,aAAa,CAAI,OAAU,EAAE,EAA8B;QAA5B,gBAAK,EAAE,kBAAM;IAE1D,IAAI,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE;QAC1B,OAAO,OAAO,CAAC,GAAG,CAAC,UAAA,GAAG,IAAI,OAAA,aAAa,CAAC,GAAG,EAAE,EAAE,KAAK,OAAA,EAAE,MAAM,QAAA,EAAE,CAAC,EAArC,CAAqC,CAAa,CAAA;KAC7E;IAED,IAAM,YAAY,GAAG,OAAO,CAAC,oBAAoB,CAAC,IAAI,OAAO,CAAC,oBAAoB,CAAC,YAAY,6BAAa,CAAA;IAC5G,IAAM,YAAY,GAAG,OAAO,CAAC,WAAW,CAAC,IAAI,OAAO,CAAC,WAAW,CAAC,YAAY,6BAAa,CAAA;IAE1F,IAAI,YAAY,EAAE;QAChB,IAAM,gBAAgB,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,MAAM,CAAC,CAAA;QACpE,IAAM,gBAAgB,GAAG,OAAO,CAAC,oBAAoB,CAAC,CAAC,OAAO,CAAC,gBAAgB,CAAC,GAAG,CAAC,KAAK,EAAE,gBAAgB,CAAC,GAAG,CAAC,MAAM,CAAC,CAAA;QAEvH,OAAO,2CAAuB,CAAC,2CAAuB,CAAC,OAAc,EAAE,gBAAgB,CAAC,EAAE,gBAAgB,CAAC,CAAA;KAC5G;IAED,IAAI,YAAY,EAAE;QAChB,OAAO,2CAAuB,CAAC,OAAc,EAAE,OAAO,CAAC,WAAW,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC,CAAA;KAC5F;IAED,IAAI,OAAO,YAAY,6BAAa,IAAI,OAAO,YAAY,6BAAa,EAAE;QACxE,OAAQ,OAAe,CAAC,OAAO,CAAC,KAAK,EAAE,MAAM,CAAC,CAAA;KAC/C;IAED,OAAO,OAAO,CAAA;AAChB,CAAC;AAzBD,sCAyBC"}
\ No newline at end of file
{"version":3,"file":"resizeResults.js","sourceRoot":"","sources":["../../src/resizeResults.ts"],"names":[],"mappings":";;AAAA,2EAAsE;AAEtE,yDAAwD;AACxD,yDAAwD;AACxD,mEAA6F;AAC7F,mEAA6F;AAE7F,SAAgB,aAAa,CAAI,OAAU,EAAE,UAAuB;IAE5D,IAAA,sFAAuE,EAArE,gBAAK,EAAE,kBAA8D,CAAA;IAE7E,IAAI,KAAK,IAAI,CAAC,IAAI,MAAM,IAAI,CAAC,EAAE;QAC7B,MAAM,IAAI,KAAK,CAAC,yCAAuC,IAAI,CAAC,SAAS,CAAC,EAAE,KAAK,OAAA,EAAE,MAAM,QAAA,EAAE,CAAG,CAAC,CAAA;KAC5F;IAED,IAAI,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE;QAC1B,OAAO,OAAO,CAAC,GAAG,CAAC,UAAA,GAAG,IAAI,OAAA,aAAa,CAAC,GAAG,EAAE,EAAE,KAAK,OAAA,EAAE,MAAM,QAAA,EAAE,CAAC,EAArC,CAAqC,CAAa,CAAA;KAC7E;IAED,IAAI,uCAAmB,CAAC,OAAO,CAAC,EAAE;QAChC,IAAM,gBAAgB,GAAG,OAAO,CAAC,SAAS,CAAC,OAAO,CAAC,KAAK,EAAE,MAAM,CAAC,CAAA;QACjE,IAAM,gBAAgB,GAAG,OAAO,CAAC,kBAAkB,CAAC,OAAO,CAAC,gBAAgB,CAAC,GAAG,CAAC,KAAK,EAAE,gBAAgB,CAAC,GAAG,CAAC,MAAM,CAAC,CAAA;QAEpH,OAAO,2CAAuB,CAAC,2CAAuB,CAAC,OAAO,EAAE,gBAAgB,CAAC,EAAE,gBAAgB,CAAC,CAAA;KACrG;IAED,IAAI,uCAAmB,CAAC,OAAO,CAAC,EAAE;QAChC,OAAO,2CAAuB,CAAC,OAAO,EAAE,OAAO,CAAC,SAAS,CAAC,OAAO,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC,CAAA;KAClF;IAED,IAAI,OAAO,YAAY,6BAAa,IAAI,OAAO,YAAY,6BAAa,EAAE;QACxE,OAAQ,OAAe,CAAC,OAAO,CAAC,KAAK,EAAE,MAAM,CAAC,CAAA;KAC/C;IAED,OAAO,OAAO,CAAA;AAChB,CAAC;AA5BD,sCA4BC"}
\ No newline at end of file
import * as tf from '@tensorflow/tfjs-core';
import { NetInput, NeuralNetwork, TfjsImageRecognitionBase, TNetInput } from 'tfjs-image-recognition-base';
import { TinyXceptionParams } from './types';
export declare class TinyXception extends NeuralNetwork<TinyXceptionParams> {
private _numMainBlocks;
constructor(numMainBlocks: number);
forwardInput(input: NetInput): tf.Tensor4D;
forward(input: TNetInput): Promise<tf.Tensor4D>;
protected getDefaultModelName(): string;
protected extractParamsFromWeigthMap(weightMap: tf.NamedTensorMap): {
params: TinyXceptionParams;
paramMappings: TfjsImageRecognitionBase.ParamMapping[];
};
protected extractParams(weights: Float32Array): {
params: TinyXceptionParams;
paramMappings: TfjsImageRecognitionBase.ParamMapping[];
};
}
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
var tslib_1 = require("tslib");
var tf = require("@tensorflow/tfjs-core");
var tfjs_image_recognition_base_1 = require("tfjs-image-recognition-base");
var depthwiseSeparableConv_1 = require("../common/depthwiseSeparableConv");
var extractParams_1 = require("./extractParams");
var extractParamsFromWeigthMap_1 = require("./extractParamsFromWeigthMap");
function conv(x, params, stride) {
return tf.add(tf.conv2d(x, params.filters, stride, 'same'), params.bias);
}
function reductionBlock(x, params, isActivateInput) {
if (isActivateInput === void 0) { isActivateInput = true; }
var out = isActivateInput ? tf.relu(x) : x;
out = depthwiseSeparableConv_1.depthwiseSeparableConv(out, params.separable_conv0, [1, 1]);
out = depthwiseSeparableConv_1.depthwiseSeparableConv(tf.relu(out), params.separable_conv1, [1, 1]);
out = tf.maxPool(out, [3, 3], [2, 2], 'same');
out = tf.add(out, conv(x, params.expansion_conv, [2, 2]));
return out;
}
function mainBlock(x, params) {
var out = depthwiseSeparableConv_1.depthwiseSeparableConv(tf.relu(x), params.separable_conv0, [1, 1]);
out = depthwiseSeparableConv_1.depthwiseSeparableConv(tf.relu(out), params.separable_conv1, [1, 1]);
out = depthwiseSeparableConv_1.depthwiseSeparableConv(tf.relu(out), params.separable_conv2, [1, 1]);
out = tf.add(out, x);
return out;
}
var TinyXception = /** @class */ (function (_super) {
tslib_1.__extends(TinyXception, _super);
function TinyXception(numMainBlocks) {
var _this = _super.call(this, 'TinyXception') || this;
_this._numMainBlocks = numMainBlocks;
return _this;
}
TinyXception.prototype.forwardInput = function (input) {
var _this = this;
var params = this.params;
if (!params) {
throw new Error('TinyXception - load model before inference');
}
return tf.tidy(function () {
var batchTensor = input.toBatchTensor(112, true);
var meanRgb = [122.782, 117.001, 104.298];
var normalized = tfjs_image_recognition_base_1.normalize(batchTensor, meanRgb).div(tf.scalar(256));
var out = tf.relu(conv(normalized, params.entry_flow.conv_in, [2, 2]));
out = reductionBlock(out, params.entry_flow.reduction_block_0, false);
out = reductionBlock(out, params.entry_flow.reduction_block_1);
tfjs_image_recognition_base_1.range(_this._numMainBlocks, 0, 1).forEach(function (idx) {
out = mainBlock(out, params.middle_flow["main_block_" + idx]);
});
out = reductionBlock(out, params.exit_flow.reduction_block);
out = tf.relu(depthwiseSeparableConv_1.depthwiseSeparableConv(out, params.exit_flow.separable_conv, [1, 1]));
return out;
});
};
TinyXception.prototype.forward = function (input) {
return tslib_1.__awaiter(this, void 0, void 0, function () {
var _a;
return tslib_1.__generator(this, function (_b) {
switch (_b.label) {
case 0:
_a = this.forwardInput;
return [4 /*yield*/, tfjs_image_recognition_base_1.toNetInput(input)];
case 1: return [2 /*return*/, _a.apply(this, [_b.sent()])];
}
});
});
};
TinyXception.prototype.getDefaultModelName = function () {
return 'tiny_xception_model';
};
TinyXception.prototype.extractParamsFromWeigthMap = function (weightMap) {
return extractParamsFromWeigthMap_1.extractParamsFromWeigthMap(weightMap, this._numMainBlocks);
};
TinyXception.prototype.extractParams = function (weights) {
return extractParams_1.extractParams(weights, this._numMainBlocks);
};
return TinyXception;
}(tfjs_image_recognition_base_1.NeuralNetwork));
exports.TinyXception = TinyXception;
//# sourceMappingURL=TinyXception.js.map
\ No newline at end of file
{"version":3,"file":"TinyXception.js","sourceRoot":"","sources":["../../../src/xception/TinyXception.ts"],"names":[],"mappings":"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"}
\ No newline at end of file
import { TfjsImageRecognitionBase } from 'tfjs-image-recognition-base';
import { TinyXceptionParams } from './types';
export declare function extractParams(weights: Float32Array, numMainBlocks: number): {
params: TinyXceptionParams;
paramMappings: TfjsImageRecognitionBase.ParamMapping[];
};
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
var tfjs_image_recognition_base_1 = require("tfjs-image-recognition-base");
function extractorsFactory(extractWeights, paramMappings) {
var extractConvParams = tfjs_image_recognition_base_1.TfjsImageRecognitionBase.extractConvParamsFactory(extractWeights, paramMappings);
var extractSeparableConvParams = tfjs_image_recognition_base_1.TfjsImageRecognitionBase.extractSeparableConvParamsFactory(extractWeights, paramMappings);
function extractReductionBlockParams(channelsIn, channelsOut, mappedPrefix) {
var separable_conv0 = extractSeparableConvParams(channelsIn, channelsOut, mappedPrefix + "/separable_conv0");
var separable_conv1 = extractSeparableConvParams(channelsOut, channelsOut, mappedPrefix + "/separable_conv1");
var expansion_conv = extractConvParams(channelsIn, channelsOut, 1, mappedPrefix + "/expansion_conv");
return { separable_conv0: separable_conv0, separable_conv1: separable_conv1, expansion_conv: expansion_conv };
}
function extractMainBlockParams(channels, mappedPrefix) {
var separable_conv0 = extractSeparableConvParams(channels, channels, mappedPrefix + "/separable_conv0");
var separable_conv1 = extractSeparableConvParams(channels, channels, mappedPrefix + "/separable_conv1");
var separable_conv2 = extractSeparableConvParams(channels, channels, mappedPrefix + "/separable_conv2");
return { separable_conv0: separable_conv0, separable_conv1: separable_conv1, separable_conv2: separable_conv2 };
}
return {
extractConvParams: extractConvParams,
extractSeparableConvParams: extractSeparableConvParams,
extractReductionBlockParams: extractReductionBlockParams,
extractMainBlockParams: extractMainBlockParams
};
}
function extractParams(weights, numMainBlocks) {
var paramMappings = [];
var _a = tfjs_image_recognition_base_1.TfjsImageRecognitionBase.extractWeightsFactory(weights), extractWeights = _a.extractWeights, getRemainingWeights = _a.getRemainingWeights;
var _b = extractorsFactory(extractWeights, paramMappings), extractConvParams = _b.extractConvParams, extractSeparableConvParams = _b.extractSeparableConvParams, extractReductionBlockParams = _b.extractReductionBlockParams, extractMainBlockParams = _b.extractMainBlockParams;
var entry_flow_conv_in = extractConvParams(3, 32, 3, 'entry_flow/conv_in');
var entry_flow_reduction_block_0 = extractReductionBlockParams(32, 64, 'entry_flow/reduction_block_0');
var entry_flow_reduction_block_1 = extractReductionBlockParams(64, 128, 'entry_flow/reduction_block_1');
var entry_flow = {
conv_in: entry_flow_conv_in,
reduction_block_0: entry_flow_reduction_block_0,
reduction_block_1: entry_flow_reduction_block_1
};
var middle_flow = {};
tfjs_image_recognition_base_1.range(numMainBlocks, 0, 1).forEach(function (idx) {
middle_flow["main_block_" + idx] = extractMainBlockParams(128, "middle_flow/main_block_" + idx);
});
var exit_flow_reduction_block = extractReductionBlockParams(128, 256, 'exit_flow/reduction_block');
var exit_flow_separable_conv = extractSeparableConvParams(256, 512, 'exit_flow/separable_conv');
var exit_flow = {
reduction_block: exit_flow_reduction_block,
separable_conv: exit_flow_separable_conv
};
if (getRemainingWeights().length !== 0) {
throw new Error("weights remaing after extract: " + getRemainingWeights().length);
}
return {
paramMappings: paramMappings,
params: { entry_flow: entry_flow, middle_flow: middle_flow, exit_flow: exit_flow }
};
}
exports.extractParams = extractParams;
//# sourceMappingURL=extractParams.js.map
\ No newline at end of file
{"version":3,"file":"extractParams.js","sourceRoot":"","sources":["../../../src/xception/extractParams.ts"],"names":[],"mappings":";;AAAA,2EAA8E;AAI9E,SAAS,iBAAiB,CAAC,cAA+D,EAAE,aAAsD;IAEhJ,IAAM,iBAAiB,GAAG,sDAAwB,CAAC,wBAAwB,CAAC,cAAc,EAAE,aAAa,CAAC,CAAA;IAC1G,IAAM,0BAA0B,GAAG,sDAAwB,CAAC,iCAAiC,CAAC,cAAc,EAAE,aAAa,CAAC,CAAA;IAE5H,SAAS,2BAA2B,CAAC,UAAkB,EAAE,WAAmB,EAAE,YAAoB;QAEhG,IAAM,eAAe,GAAG,0BAA0B,CAAC,UAAU,EAAE,WAAW,EAAK,YAAY,qBAAkB,CAAC,CAAA;QAC9G,IAAM,eAAe,GAAG,0BAA0B,CAAC,WAAW,EAAE,WAAW,EAAK,YAAY,qBAAkB,CAAC,CAAA;QAC/G,IAAM,cAAc,GAAG,iBAAiB,CAAC,UAAU,EAAE,WAAW,EAAE,CAAC,EAAK,YAAY,oBAAiB,CAAC,CAAA;QAEtG,OAAO,EAAE,eAAe,iBAAA,EAAE,eAAe,iBAAA,EAAE,cAAc,gBAAA,EAAE,CAAA;IAC7D,CAAC;IAED,SAAS,sBAAsB,CAAC,QAAgB,EAAE,YAAoB;QAEpE,IAAM,eAAe,GAAG,0BAA0B,CAAC,QAAQ,EAAE,QAAQ,EAAK,YAAY,qBAAkB,CAAC,CAAA;QACzG,IAAM,eAAe,GAAG,0BAA0B,CAAC,QAAQ,EAAE,QAAQ,EAAK,YAAY,qBAAkB,CAAC,CAAA;QACzG,IAAM,eAAe,GAAG,0BAA0B,CAAC,QAAQ,EAAE,QAAQ,EAAK,YAAY,qBAAkB,CAAC,CAAA;QAEzG,OAAO,EAAE,eAAe,iBAAA,EAAE,eAAe,iBAAA,EAAE,eAAe,iBAAA,EAAE,CAAA;IAC9D,CAAC;IAED,OAAO;QACL,iBAAiB,mBAAA;QACjB,0BAA0B,4BAAA;QAC1B,2BAA2B,6BAAA;QAC3B,sBAAsB,wBAAA;KACvB,CAAA;AAEH,CAAC;AAED,SAAgB,aAAa,CAAC,OAAqB,EAAE,aAAqB;IAExE,IAAM,aAAa,GAA4C,EAAE,CAAA;IAE3D,IAAA,0FAGqD,EAFzD,kCAAc,EACd,4CACyD,CAAA;IAErD,IAAA,qDAK8C,EAJlD,wCAAiB,EACjB,0DAA0B,EAC1B,4DAA2B,EAC3B,kDACkD,CAAA;IAEpD,IAAM,kBAAkB,GAAG,iBAAiB,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,oBAAoB,CAAC,CAAA;IAC5E,IAAM,4BAA4B,GAAG,2BAA2B,CAAC,EAAE,EAAE,EAAE,EAAE,8BAA8B,CAAC,CAAA;IACxG,IAAM,4BAA4B,GAAG,2BAA2B,CAAC,EAAE,EAAE,GAAG,EAAE,8BAA8B,CAAC,CAAA;IAEzG,IAAM,UAAU,GAAG;QACjB,OAAO,EAAE,kBAAkB;QAC3B,iBAAiB,EAAE,4BAA4B;QAC/C,iBAAiB,EAAE,4BAA4B;KAChD,CAAA;IAED,IAAM,WAAW,GAAG,EAAE,CAAA;IACtB,mCAAK,CAAC,aAAa,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,UAAC,GAAG;QACrC,WAAW,CAAC,gBAAc,GAAK,CAAC,GAAG,sBAAsB,CAAC,GAAG,EAAE,4BAA0B,GAAK,CAAC,CAAA;IACjG,CAAC,CAAC,CAAA;IAEF,IAAM,yBAAyB,GAAG,2BAA2B,CAAC,GAAG,EAAE,GAAG,EAAE,2BAA2B,CAAC,CAAA;IACpG,IAAM,wBAAwB,GAAG,0BAA0B,CAAC,GAAG,EAAE,GAAG,EAAE,0BAA0B,CAAC,CAAA;IAEjG,IAAM,SAAS,GAAG;QAChB,eAAe,EAAE,yBAAyB;QAC1C,cAAc,EAAE,wBAAwB;KACzC,CAAA;IAED,IAAI,mBAAmB,EAAE,CAAC,MAAM,KAAK,CAAC,EAAE;QACtC,MAAM,IAAI,KAAK,CAAC,oCAAkC,mBAAmB,EAAE,CAAC,MAAQ,CAAC,CAAA;KAClF;IAED,OAAO;QACL,aAAa,eAAA;QACb,MAAM,EAAE,EAAE,UAAU,YAAA,EAAE,WAAW,aAAA,EAAE,SAAS,WAAA,EAAE;KAC/C,CAAA;AACH,CAAC;AA/CD,sCA+CC"}
\ No newline at end of file
import * as tf from '@tensorflow/tfjs-core';
import { TfjsImageRecognitionBase } from 'tfjs-image-recognition-base';
import { TinyXceptionParams } from './types';
export declare function extractParamsFromWeigthMap(weightMap: tf.NamedTensorMap, numMainBlocks: number): {
params: TinyXceptionParams;
paramMappings: TfjsImageRecognitionBase.ParamMapping[];
};
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
var tfjs_image_recognition_base_1 = require("tfjs-image-recognition-base");
var loadConvParamsFactory_1 = require("../common/loadConvParamsFactory");
function loadParamsFactory(weightMap, paramMappings) {
var extractWeightEntry = tfjs_image_recognition_base_1.TfjsImageRecognitionBase.extractWeightEntryFactory(weightMap, paramMappings);
var extractConvParams = loadConvParamsFactory_1.loadConvParamsFactory(extractWeightEntry);
var extractSeparableConvParams = tfjs_image_recognition_base_1.TfjsImageRecognitionBase.loadSeparableConvParamsFactory(extractWeightEntry);
function extractReductionBlockParams(mappedPrefix) {
var separable_conv0 = extractSeparableConvParams(mappedPrefix + "/separable_conv0");
var separable_conv1 = extractSeparableConvParams(mappedPrefix + "/separable_conv1");
var expansion_conv = extractConvParams(mappedPrefix + "/expansion_conv");
return { separable_conv0: separable_conv0, separable_conv1: separable_conv1, expansion_conv: expansion_conv };
}
function extractMainBlockParams(mappedPrefix) {
var separable_conv0 = extractSeparableConvParams(mappedPrefix + "/separable_conv0");
var separable_conv1 = extractSeparableConvParams(mappedPrefix + "/separable_conv1");
var separable_conv2 = extractSeparableConvParams(mappedPrefix + "/separable_conv2");
return { separable_conv0: separable_conv0, separable_conv1: separable_conv1, separable_conv2: separable_conv2 };
}
return {
extractConvParams: extractConvParams,
extractSeparableConvParams: extractSeparableConvParams,
extractReductionBlockParams: extractReductionBlockParams,
extractMainBlockParams: extractMainBlockParams
};
}
function extractParamsFromWeigthMap(weightMap, numMainBlocks) {
var paramMappings = [];
var _a = loadParamsFactory(weightMap, paramMappings), extractConvParams = _a.extractConvParams, extractSeparableConvParams = _a.extractSeparableConvParams, extractReductionBlockParams = _a.extractReductionBlockParams, extractMainBlockParams = _a.extractMainBlockParams;
var entry_flow_conv_in = extractConvParams('entry_flow/conv_in');
var entry_flow_reduction_block_0 = extractReductionBlockParams('entry_flow/reduction_block_0');
var entry_flow_reduction_block_1 = extractReductionBlockParams('entry_flow/reduction_block_1');
var entry_flow = {
conv_in: entry_flow_conv_in,
reduction_block_0: entry_flow_reduction_block_0,
reduction_block_1: entry_flow_reduction_block_1
};
var middle_flow = {};
tfjs_image_recognition_base_1.range(numMainBlocks, 0, 1).forEach(function (idx) {
middle_flow["main_block_" + idx] = extractMainBlockParams("middle_flow/main_block_" + idx);
});
var exit_flow_reduction_block = extractReductionBlockParams('exit_flow/reduction_block');
var exit_flow_separable_conv = extractSeparableConvParams('exit_flow/separable_conv');
var exit_flow = {
reduction_block: exit_flow_reduction_block,
separable_conv: exit_flow_separable_conv
};
tfjs_image_recognition_base_1.TfjsImageRecognitionBase.disposeUnusedWeightTensors(weightMap, paramMappings);
return { params: { entry_flow: entry_flow, middle_flow: middle_flow, exit_flow: exit_flow }, paramMappings: paramMappings };
}
exports.extractParamsFromWeigthMap = extractParamsFromWeigthMap;
//# sourceMappingURL=extractParamsFromWeigthMap.js.map
\ No newline at end of file
{"version":3,"file":"extractParamsFromWeigthMap.js","sourceRoot":"","sources":["../../../src/xception/extractParamsFromWeigthMap.ts"],"names":[],"mappings":";;AACA,2EAA8E;AAE9E,yEAAwE;AAGxE,SAAS,iBAAiB,CAAC,SAAc,EAAE,aAAsD;IAE/F,IAAM,kBAAkB,GAAG,sDAAwB,CAAC,yBAAyB,CAAC,SAAS,EAAE,aAAa,CAAC,CAAA;IAEvG,IAAM,iBAAiB,GAAG,6CAAqB,CAAC,kBAAkB,CAAC,CAAA;IACnE,IAAM,0BAA0B,GAAG,sDAAwB,CAAC,8BAA8B,CAAC,kBAAkB,CAAC,CAAA;IAE9G,SAAS,2BAA2B,CAAC,YAAoB;QAEvD,IAAM,eAAe,GAAG,0BAA0B,CAAI,YAAY,qBAAkB,CAAC,CAAA;QACrF,IAAM,eAAe,GAAG,0BAA0B,CAAI,YAAY,qBAAkB,CAAC,CAAA;QACrF,IAAM,cAAc,GAAG,iBAAiB,CAAI,YAAY,oBAAiB,CAAC,CAAA;QAE1E,OAAO,EAAE,eAAe,iBAAA,EAAE,eAAe,iBAAA,EAAE,cAAc,gBAAA,EAAE,CAAA;IAC7D,CAAC;IAED,SAAS,sBAAsB,CAAC,YAAoB;QAElD,IAAM,eAAe,GAAG,0BAA0B,CAAI,YAAY,qBAAkB,CAAC,CAAA;QACrF,IAAM,eAAe,GAAG,0BAA0B,CAAI,YAAY,qBAAkB,CAAC,CAAA;QACrF,IAAM,eAAe,GAAG,0BAA0B,CAAI,YAAY,qBAAkB,CAAC,CAAA;QAErF,OAAO,EAAE,eAAe,iBAAA,EAAE,eAAe,iBAAA,EAAE,eAAe,iBAAA,EAAE,CAAA;IAC9D,CAAC;IAED,OAAO;QACL,iBAAiB,mBAAA;QACjB,0BAA0B,4BAAA;QAC1B,2BAA2B,6BAAA;QAC3B,sBAAsB,wBAAA;KACvB,CAAA;AACH,CAAC;AAED,SAAgB,0BAA0B,CACxC,SAA4B,EAC5B,aAAqB;IAGrB,IAAM,aAAa,GAA4C,EAAE,CAAA;IAE3D,IAAA,gDAKyC,EAJ7C,wCAAiB,EACjB,0DAA0B,EAC1B,4DAA2B,EAC3B,kDAC6C,CAAA;IAE/C,IAAM,kBAAkB,GAAG,iBAAiB,CAAC,oBAAoB,CAAC,CAAA;IAClE,IAAM,4BAA4B,GAAG,2BAA2B,CAAC,8BAA8B,CAAC,CAAA;IAChG,IAAM,4BAA4B,GAAG,2BAA2B,CAAC,8BAA8B,CAAC,CAAA;IAEhG,IAAM,UAAU,GAAG;QACjB,OAAO,EAAE,kBAAkB;QAC3B,iBAAiB,EAAE,4BAA4B;QAC/C,iBAAiB,EAAE,4BAA4B;KAChD,CAAA;IAED,IAAM,WAAW,GAAG,EAAE,CAAA;IACtB,mCAAK,CAAC,aAAa,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,UAAC,GAAG;QACrC,WAAW,CAAC,gBAAc,GAAK,CAAC,GAAG,sBAAsB,CAAC,4BAA0B,GAAK,CAAC,CAAA;IAC5F,CAAC,CAAC,CAAA;IAEF,IAAM,yBAAyB,GAAG,2BAA2B,CAAC,2BAA2B,CAAC,CAAA;IAC1F,IAAM,wBAAwB,GAAG,0BAA0B,CAAC,0BAA0B,CAAC,CAAA;IAEvF,IAAM,SAAS,GAAG;QAChB,eAAe,EAAE,yBAAyB;QAC1C,cAAc,EAAE,wBAAwB;KACzC,CAAA;IAED,sDAAwB,CAAC,0BAA0B,CAAC,SAAS,EAAE,aAAa,CAAC,CAAA;IAE7E,OAAO,EAAE,MAAM,EAAE,EAAE,UAAU,YAAA,EAAE,WAAW,aAAA,EAAE,SAAS,WAAA,EAAE,EAAE,aAAa,eAAA,EAAE,CAAA;AAC1E,CAAC;AAxCD,gEAwCC"}
\ No newline at end of file
export * from './TinyXception';
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
var tslib_1 = require("tslib");
tslib_1.__exportStar(require("./TinyXception"), exports);
//# sourceMappingURL=index.js.map
\ No newline at end of file
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/xception/index.ts"],"names":[],"mappings":";;;AAAA,yDAA+B"}
\ No newline at end of file
import { TfjsImageRecognitionBase } from "tfjs-image-recognition-base";
export declare type ReductionBlockParams = {
separable_conv0: TfjsImageRecognitionBase.SeparableConvParams;
separable_conv1: TfjsImageRecognitionBase.SeparableConvParams;
expansion_conv: TfjsImageRecognitionBase.ConvParams;
};
export declare type MainBlockParams = {
separable_conv0: TfjsImageRecognitionBase.SeparableConvParams;
separable_conv1: TfjsImageRecognitionBase.SeparableConvParams;
separable_conv2: TfjsImageRecognitionBase.SeparableConvParams;
};
export declare type TinyXceptionParams = {
entry_flow: {
conv_in: TfjsImageRecognitionBase.ConvParams;
reduction_block_0: ReductionBlockParams;
reduction_block_1: ReductionBlockParams;
};
middle_flow: any;
exit_flow: {
reduction_block: ReductionBlockParams;
separable_conv: TfjsImageRecognitionBase.SeparableConvParams;
};
};
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/xception/types.ts"],"names":[],"mappings":""}
\ No newline at end of file
import * as tf from '@tensorflow/tfjs-core';
import { NetInput, NeuralNetwork, TNetInput } from 'tfjs-image-recognition-base';
import { TinyXception } from '../xception/TinyXception';
import { AgeAndGenderPrediction, NetOutput, NetParams } from './types';
export declare class AgeGenderNet extends NeuralNetwork<NetParams> {
private _faceFeatureExtractor;
constructor(faceFeatureExtractor?: TinyXception);
readonly faceFeatureExtractor: TinyXception;
runNet(input: NetInput | tf.Tensor4D): NetOutput;
forwardInput(input: NetInput | tf.Tensor4D): NetOutput;
forward(input: TNetInput): Promise<NetOutput>;
predictAgeAndGender(input: TNetInput): Promise<AgeAndGenderPrediction | AgeAndGenderPrediction[]>;
protected getDefaultModelName(): string;
dispose(throwOnRedispose?: boolean): void;
loadClassifierParams(weights: Float32Array): void;
extractClassifierParams(weights: Float32Array): {
params: NetParams;
paramMappings: import("tfjs-image-recognition-base/build/commonjs/common").ParamMapping[];
};
protected extractParamsFromWeigthMap(weightMap: tf.NamedTensorMap): {
params: NetParams;
paramMappings: import("tfjs-image-recognition-base/build/commonjs/common").ParamMapping[];
};
protected extractParams(weights: Float32Array): {
params: NetParams;
paramMappings: import("tfjs-image-recognition-base/build/commonjs/common").ParamMapping[];
};
}
import * as tslib_1 from "tslib";
import * as tf from '@tensorflow/tfjs-core';
import { NetInput, NeuralNetwork, toNetInput } from 'tfjs-image-recognition-base';
import { fullyConnectedLayer } from '../common/fullyConnectedLayer';
import { seperateWeightMaps } from '../faceProcessor/util';
import { TinyXception } from '../xception/TinyXception';
import { extractParams } from './extractParams';
import { extractParamsFromWeigthMap } from './extractParamsFromWeigthMap';
import { Gender } from './types';
var AgeGenderNet = /** @class */ (function (_super) {
tslib_1.__extends(AgeGenderNet, _super);
function AgeGenderNet(faceFeatureExtractor) {
if (faceFeatureExtractor === void 0) { faceFeatureExtractor = new TinyXception(2); }
var _this = _super.call(this, 'AgeGenderNet') || this;
_this._faceFeatureExtractor = faceFeatureExtractor;
return _this;
}
Object.defineProperty(AgeGenderNet.prototype, "faceFeatureExtractor", {
get: function () {
return this._faceFeatureExtractor;
},
enumerable: true,
configurable: true
});
AgeGenderNet.prototype.runNet = function (input) {
var _this = this;
var params = this.params;
if (!params) {
throw new Error(this._name + " - load model before inference");
}
return tf.tidy(function () {
var bottleneckFeatures = input instanceof NetInput
? _this.faceFeatureExtractor.forwardInput(input)
: input;
var pooled = tf.avgPool(bottleneckFeatures, [7, 7], [2, 2], 'valid').as2D(bottleneckFeatures.shape[0], -1);
var age = fullyConnectedLayer(pooled, params.fc.age).as1D();
var gender = fullyConnectedLayer(pooled, params.fc.gender);
return { age: age, gender: gender };
});
};
AgeGenderNet.prototype.forwardInput = function (input) {
var _this = this;
return tf.tidy(function () {
var _a = _this.runNet(input), age = _a.age, gender = _a.gender;
return { age: age, gender: tf.softmax(gender) };
});
};
AgeGenderNet.prototype.forward = function (input) {
return tslib_1.__awaiter(this, void 0, void 0, function () {
var _a;
return tslib_1.__generator(this, function (_b) {
switch (_b.label) {
case 0:
_a = this.forwardInput;
return [4 /*yield*/, toNetInput(input)];
case 1: return [2 /*return*/, _a.apply(this, [_b.sent()])];
}
});
});
};
AgeGenderNet.prototype.predictAgeAndGender = function (input) {
return tslib_1.__awaiter(this, void 0, void 0, function () {
var netInput, out, ages, genders, ageAndGenderTensors, predictionsByBatch;
var _this = this;
return tslib_1.__generator(this, function (_a) {
switch (_a.label) {
case 0: return [4 /*yield*/, toNetInput(input)];
case 1:
netInput = _a.sent();
return [4 /*yield*/, this.forwardInput(netInput)];
case 2:
out = _a.sent();
ages = tf.unstack(out.age);
genders = tf.unstack(out.gender);
ageAndGenderTensors = ages.map(function (ageTensor, i) { return ({
ageTensor: ageTensor,
genderTensor: genders[i]
}); });
return [4 /*yield*/, Promise.all(ageAndGenderTensors.map(function (_a) {
var ageTensor = _a.ageTensor, genderTensor = _a.genderTensor;
return tslib_1.__awaiter(_this, void 0, void 0, function () {
var age, probMale, isMale, gender, genderProbability;
return tslib_1.__generator(this, function (_b) {
switch (_b.label) {
case 0: return [4 /*yield*/, ageTensor.data()];
case 1:
age = (_b.sent())[0];
return [4 /*yield*/, genderTensor.data()];
case 2:
probMale = (_b.sent())[0];
isMale = probMale > 0.5;
gender = isMale ? Gender.MALE : Gender.FEMALE;
genderProbability = isMale ? probMale : (1 - probMale);
ageTensor.dispose();
genderTensor.dispose();
return [2 /*return*/, { age: age, gender: gender, genderProbability: genderProbability }];
}
});
});
}))];
case 3:
predictionsByBatch = _a.sent();
out.age.dispose();
out.gender.dispose();
return [2 /*return*/, netInput.isBatchInput
? predictionsByBatch
: predictionsByBatch[0]];
}
});
});
};
AgeGenderNet.prototype.getDefaultModelName = function () {
return 'age_gender_model';
};
AgeGenderNet.prototype.dispose = function (throwOnRedispose) {
if (throwOnRedispose === void 0) { throwOnRedispose = true; }
this.faceFeatureExtractor.dispose(throwOnRedispose);
_super.prototype.dispose.call(this, throwOnRedispose);
};
AgeGenderNet.prototype.loadClassifierParams = function (weights) {
var _a = this.extractClassifierParams(weights), params = _a.params, paramMappings = _a.paramMappings;
this._params = params;
this._paramMappings = paramMappings;
};
AgeGenderNet.prototype.extractClassifierParams = function (weights) {
return extractParams(weights);
};
AgeGenderNet.prototype.extractParamsFromWeigthMap = function (weightMap) {
var _a = seperateWeightMaps(weightMap), featureExtractorMap = _a.featureExtractorMap, classifierMap = _a.classifierMap;
this.faceFeatureExtractor.loadFromWeightMap(featureExtractorMap);
return extractParamsFromWeigthMap(classifierMap);
};
AgeGenderNet.prototype.extractParams = function (weights) {
var classifierWeightSize = (512 * 1 + 1) + (512 * 2 + 2);
var featureExtractorWeights = weights.slice(0, weights.length - classifierWeightSize);
var classifierWeights = weights.slice(weights.length - classifierWeightSize);
this.faceFeatureExtractor.extractWeights(featureExtractorWeights);
return this.extractClassifierParams(classifierWeights);
};
return AgeGenderNet;
}(NeuralNetwork));
export { AgeGenderNet };
//# sourceMappingURL=AgeGenderNet.js.map
\ No newline at end of file
{"version":3,"file":"AgeGenderNet.js","sourceRoot":"","sources":["../../../src/ageGenderNet/AgeGenderNet.ts"],"names":[],"mappings":";AAAA,OAAO,KAAK,EAAE,MAAM,uBAAuB,CAAC;AAC5C,OAAO,EAAE,QAAQ,EAAE,aAAa,EAAa,UAAU,EAAE,MAAM,6BAA6B,CAAC;AAE7F,OAAO,EAAE,mBAAmB,EAAE,MAAM,+BAA+B,CAAC;AACpE,OAAO,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAC3D,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AACxD,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,EAAE,0BAA0B,EAAE,MAAM,8BAA8B,CAAC;AAC1E,OAAO,EAA0B,MAAM,EAAwB,MAAM,SAAS,CAAC;AAE/E;IAAkC,wCAAwB;IAIxD,sBAAY,oBAAwD;QAAxD,qCAAA,EAAA,2BAAyC,YAAY,CAAC,CAAC,CAAC;QAApE,YACE,kBAAM,cAAc,CAAC,SAEtB;QADC,KAAI,CAAC,qBAAqB,GAAG,oBAAoB,CAAA;;IACnD,CAAC;IAED,sBAAW,8CAAoB;aAA/B;YACE,OAAO,IAAI,CAAC,qBAAqB,CAAA;QACnC,CAAC;;;OAAA;IAEM,6BAAM,GAAb,UAAc,KAA6B;QAA3C,iBAkBC;QAhBS,IAAA,oBAAM,CAAS;QAEvB,IAAI,CAAC,MAAM,EAAE;YACX,MAAM,IAAI,KAAK,CAAI,IAAI,CAAC,KAAK,mCAAgC,CAAC,CAAA;SAC/D;QAED,OAAO,EAAE,CAAC,IAAI,CAAC;YACb,IAAM,kBAAkB,GAAG,KAAK,YAAY,QAAQ;gBAClD,CAAC,CAAC,KAAI,CAAC,oBAAoB,CAAC,YAAY,CAAC,KAAK,CAAC;gBAC/C,CAAC,CAAC,KAAK,CAAA;YAET,IAAM,MAAM,GAAG,EAAE,CAAC,OAAO,CAAC,kBAAkB,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,IAAI,CAAC,kBAAkB,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAA;YAC5G,IAAM,GAAG,GAAG,mBAAmB,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAA;YAC7D,IAAM,MAAM,GAAG,mBAAmB,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,CAAA;YAC5D,OAAO,EAAE,GAAG,KAAA,EAAE,MAAM,QAAA,EAAE,CAAA;QACxB,CAAC,CAAC,CAAA;IACJ,CAAC;IAEM,mCAAY,GAAnB,UAAoB,KAA6B;QAAjD,iBAKC;QAJC,OAAO,EAAE,CAAC,IAAI,CAAC;YACP,IAAA,wBAAoC,EAAlC,YAAG,EAAE,kBAA6B,CAAA;YAC1C,OAAO,EAAE,GAAG,KAAA,EAAE,MAAM,EAAE,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAA;QAC5C,CAAC,CAAC,CAAA;IACJ,CAAC;IAEY,8BAAO,GAApB,UAAqB,KAAgB;;;;;;wBAC5B,KAAA,IAAI,CAAC,YAAY,CAAA;wBAAC,qBAAM,UAAU,CAAC,KAAK,CAAC,EAAA;4BAAhD,sBAAO,SAAA,IAAI,GAAc,SAAuB,EAAC,EAAA;;;;KAClD;IAEY,0CAAmB,GAAhC,UAAiC,KAAgB;;;;;;4BAC9B,qBAAM,UAAU,CAAC,KAAK,CAAC,EAAA;;wBAAlC,QAAQ,GAAG,SAAuB;wBAC5B,qBAAM,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,EAAA;;wBAAvC,GAAG,GAAG,SAAiC;wBAEvC,IAAI,GAAG,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;wBAC1B,OAAO,GAAG,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAA;wBAChC,mBAAmB,GAAG,IAAI,CAAC,GAAG,CAAC,UAAC,SAAS,EAAE,CAAC,IAAK,OAAA,CAAC;4BACtD,SAAS,WAAA;4BACT,YAAY,EAAE,OAAO,CAAC,CAAC,CAAC;yBACzB,CAAC,EAHqD,CAGrD,CAAC,CAAA;wBAEwB,qBAAM,OAAO,CAAC,GAAG,CAC1C,mBAAmB,CAAC,GAAG,CAAC,UAAO,EAA2B;oCAAzB,wBAAS,EAAE,8BAAY;;;;;oDACzC,qBAAM,SAAS,CAAC,IAAI,EAAE,EAAA;;gDAA7B,GAAG,GAAG,CAAC,SAAsB,CAAC,CAAC,CAAC,CAAC;gDACrB,qBAAM,YAAY,CAAC,IAAI,EAAE,EAAA;;gDAArC,QAAQ,GAAG,CAAC,SAAyB,CAAC,CAAC,CAAC,CAAC;gDACzC,MAAM,GAAG,QAAQ,GAAG,GAAG,CAAA;gDACvB,MAAM,GAAG,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAA;gDAC7C,iBAAiB,GAAG,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC,CAAA;gDAE5D,SAAS,CAAC,OAAO,EAAE,CAAA;gDACnB,YAAY,CAAC,OAAO,EAAE,CAAA;gDACtB,sBAAO,EAAE,GAAG,KAAA,EAAE,MAAM,QAAA,EAAE,iBAAiB,mBAAA,EAAE,EAAA;;;;6BAC1C,CAAC,CACH,EAAA;;wBAZK,kBAAkB,GAAG,SAY1B;wBACD,GAAG,CAAC,GAAG,CAAC,OAAO,EAAE,CAAA;wBACjB,GAAG,CAAC,MAAM,CAAC,OAAO,EAAE,CAAA;wBAEpB,sBAAO,QAAQ,CAAC,YAAY;gCAC1B,CAAC,CAAC,kBAAkB;gCACpB,CAAC,CAAC,kBAAkB,CAAC,CAAC,CAAC,EAAA;;;;KAC1B;IAES,0CAAmB,GAA7B;QACE,OAAO,kBAAkB,CAAA;IAC3B,CAAC;IAEM,8BAAO,GAAd,UAAe,gBAAgC;QAAhC,iCAAA,EAAA,uBAAgC;QAC7C,IAAI,CAAC,oBAAoB,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAA;QACnD,iBAAM,OAAO,YAAC,gBAAgB,CAAC,CAAA;IACjC,CAAC;IAEM,2CAAoB,GAA3B,UAA4B,OAAqB;QACzC,IAAA,0CAAiE,EAA/D,kBAAM,EAAE,gCAAuD,CAAA;QACvE,IAAI,CAAC,OAAO,GAAG,MAAM,CAAA;QACrB,IAAI,CAAC,cAAc,GAAG,aAAa,CAAA;IACrC,CAAC;IAEM,8CAAuB,GAA9B,UAA+B,OAAqB;QAClD,OAAO,aAAa,CAAC,OAAO,CAAC,CAAA;IAC/B,CAAC;IAES,iDAA0B,GAApC,UAAqC,SAA4B;QAEzD,IAAA,kCAAsE,EAApE,4CAAmB,EAAE,gCAA+C,CAAA;QAE5E,IAAI,CAAC,oBAAoB,CAAC,iBAAiB,CAAC,mBAAmB,CAAC,CAAA;QAEhE,OAAO,0BAA0B,CAAC,aAAa,CAAC,CAAA;IAClD,CAAC;IAES,oCAAa,GAAvB,UAAwB,OAAqB;QAE3C,IAAM,oBAAoB,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC,CAAA;QAE1D,IAAM,uBAAuB,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,OAAO,CAAC,MAAM,GAAG,oBAAoB,CAAC,CAAA;QACvF,IAAM,iBAAiB,GAAG,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,GAAG,oBAAoB,CAAC,CAAA;QAE9E,IAAI,CAAC,oBAAoB,CAAC,cAAc,CAAC,uBAAuB,CAAC,CAAA;QACjE,OAAO,IAAI,CAAC,uBAAuB,CAAC,iBAAiB,CAAC,CAAA;IACxD,CAAC;IACH,mBAAC;AAAD,CAAC,AAlHD,CAAkC,aAAa,GAkH9C"}
\ No newline at end of file
import { TfjsImageRecognitionBase } from 'tfjs-image-recognition-base';
import { NetParams } from './types';
export declare function extractParams(weights: Float32Array): {
params: NetParams;
paramMappings: TfjsImageRecognitionBase.ParamMapping[];
};
import { TfjsImageRecognitionBase } from 'tfjs-image-recognition-base';
export function extractParams(weights) {
var paramMappings = [];
var _a = TfjsImageRecognitionBase.extractWeightsFactory(weights), extractWeights = _a.extractWeights, getRemainingWeights = _a.getRemainingWeights;
var extractFCParams = TfjsImageRecognitionBase.extractFCParamsFactory(extractWeights, paramMappings);
var age = extractFCParams(512, 1, 'fc/age');
var gender = extractFCParams(512, 2, 'fc/gender');
if (getRemainingWeights().length !== 0) {
throw new Error("weights remaing after extract: " + getRemainingWeights().length);
}
return {
paramMappings: paramMappings,
params: { fc: { age: age, gender: gender } }
};
}
//# sourceMappingURL=extractParams.js.map
\ No newline at end of file
{"version":3,"file":"extractParams.js","sourceRoot":"","sources":["../../../src/ageGenderNet/extractParams.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,wBAAwB,EAAE,MAAM,6BAA6B,CAAC;AAIvE,MAAM,UAAU,aAAa,CAAC,OAAqB;IAEjD,IAAM,aAAa,GAA4C,EAAE,CAAA;IAE3D,IAAA,4DAGqD,EAFzD,kCAAc,EACd,4CACyD,CAAA;IAE3D,IAAM,eAAe,GAAG,wBAAwB,CAAC,sBAAsB,CAAC,cAAc,EAAE,aAAa,CAAC,CAAA;IAEtG,IAAM,GAAG,GAAG,eAAe,CAAC,GAAG,EAAE,CAAC,EAAE,QAAQ,CAAC,CAAA;IAC7C,IAAM,MAAM,GAAG,eAAe,CAAC,GAAG,EAAE,CAAC,EAAE,WAAW,CAAC,CAAA;IAEnD,IAAI,mBAAmB,EAAE,CAAC,MAAM,KAAK,CAAC,EAAE;QACtC,MAAM,IAAI,KAAK,CAAC,oCAAkC,mBAAmB,EAAE,CAAC,MAAQ,CAAC,CAAA;KAClF;IAED,OAAO;QACL,aAAa,eAAA;QACb,MAAM,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,KAAA,EAAE,MAAM,QAAA,EAAE,EAAE;KAChC,CAAA;AACH,CAAC"}
\ No newline at end of file
import * as tf from '@tensorflow/tfjs-core';
import { TfjsImageRecognitionBase } from 'tfjs-image-recognition-base';
import { NetParams } from './types';
export declare function extractParamsFromWeigthMap(weightMap: tf.NamedTensorMap): {
params: NetParams;
paramMappings: TfjsImageRecognitionBase.ParamMapping[];
};
import { TfjsImageRecognitionBase } from 'tfjs-image-recognition-base';
export function extractParamsFromWeigthMap(weightMap) {
var paramMappings = [];
var extractWeightEntry = TfjsImageRecognitionBase.extractWeightEntryFactory(weightMap, paramMappings);
function extractFcParams(prefix) {
var weights = extractWeightEntry(prefix + "/weights", 2);
var bias = extractWeightEntry(prefix + "/bias", 1);
return { weights: weights, bias: bias };
}
var params = {
fc: {
age: extractFcParams('fc/age'),
gender: extractFcParams('fc/gender')
}
};
TfjsImageRecognitionBase.disposeUnusedWeightTensors(weightMap, paramMappings);
return { params: params, paramMappings: paramMappings };
}
//# sourceMappingURL=extractParamsFromWeigthMap.js.map
\ No newline at end of file
{"version":3,"file":"extractParamsFromWeigthMap.js","sourceRoot":"","sources":["../../../src/ageGenderNet/extractParamsFromWeigthMap.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,wBAAwB,EAAE,MAAM,6BAA6B,CAAC;AAIvE,MAAM,UAAU,0BAA0B,CACxC,SAA4B;IAG5B,IAAM,aAAa,GAA4C,EAAE,CAAA;IAEjE,IAAM,kBAAkB,GAAG,wBAAwB,CAAC,yBAAyB,CAAC,SAAS,EAAE,aAAa,CAAC,CAAA;IAEvG,SAAS,eAAe,CAAC,MAAc;QACrC,IAAM,OAAO,GAAG,kBAAkB,CAAiB,MAAM,aAAU,EAAE,CAAC,CAAC,CAAA;QACvE,IAAM,IAAI,GAAG,kBAAkB,CAAiB,MAAM,UAAO,EAAE,CAAC,CAAC,CAAA;QACjE,OAAO,EAAE,OAAO,SAAA,EAAE,IAAI,MAAA,EAAE,CAAA;IAC1B,CAAC;IAED,IAAM,MAAM,GAAG;QACb,EAAE,EAAE;YACF,GAAG,EAAE,eAAe,CAAC,QAAQ,CAAC;YAC9B,MAAM,EAAE,eAAe,CAAC,WAAW,CAAC;SACrC;KACF,CAAA;IAED,wBAAwB,CAAC,0BAA0B,CAAC,SAAS,EAAE,aAAa,CAAC,CAAA;IAE7E,OAAO,EAAE,MAAM,QAAA,EAAE,aAAa,eAAA,EAAE,CAAA;AAClC,CAAC"}
\ No newline at end of file
export * from './AgeGenderNet';
export * from './types';
export * from './AgeGenderNet';
export * from './types';
//# sourceMappingURL=index.js.map
\ No newline at end of file
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/ageGenderNet/index.ts"],"names":[],"mappings":"AAAA,cAAc,gBAAgB,CAAC;AAC/B,cAAc,SAAS,CAAC"}
\ No newline at end of file
import * as tf from '@tensorflow/tfjs-core';
import { TfjsImageRecognitionBase } from 'tfjs-image-recognition-base';
export declare type AgeAndGenderPrediction = {
age: number;
gender: Gender;
genderProbability: number;
};
export declare enum Gender {
FEMALE = "female",
MALE = "male"
}
export declare type NetOutput = {
age: tf.Tensor1D;
gender: tf.Tensor2D;
};
export declare type NetParams = {
fc: {
age: TfjsImageRecognitionBase.FCParams;
gender: TfjsImageRecognitionBase.FCParams;
};
};
export var Gender;
(function (Gender) {
Gender["FEMALE"] = "female";
Gender["MALE"] = "male";
})(Gender || (Gender = {}));
//# sourceMappingURL=types.js.map
\ No newline at end of file
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/ageGenderNet/types.ts"],"names":[],"mappings":"AASA,MAAM,CAAN,IAAY,MAGX;AAHD,WAAY,MAAM;IAChB,2BAAiB,CAAA;IACjB,uBAAa,CAAA;AACf,CAAC,EAHW,MAAM,KAAN,MAAM,QAGjB"}
\ No newline at end of file
......@@ -6,7 +6,8 @@ var FaceDetection = /** @class */ (function (_super) {
return _super.call(this, score, score, '', relativeBox, imageDims) || this;
}
FaceDetection.prototype.forSize = function (width, height) {
return _super.prototype.forSize.call(this, width, height);
var _a = _super.prototype.forSize.call(this, width, height), score = _a.score, relativeBox = _a.relativeBox, imageDims = _a.imageDims;
return new FaceDetection(score, relativeBox, imageDims);
};
return FaceDetection;
}(ObjectDetection));
......
{"version":3,"file":"FaceDetection.js","sourceRoot":"","sources":["../../../src/classes/FaceDetection.ts"],"names":[],"mappings":";AAAA,OAAO,EAAoB,eAAe,EAAQ,MAAM,6BAA6B,CAAC;AAOtF;IAAmC,yCAAe;IAChD,uBACE,KAAa,EACb,WAAiB,EACjB,SAAsB;eAEtB,kBAAM,KAAK,EAAE,KAAK,EAAE,EAAE,EAAE,WAAW,EAAE,SAAS,CAAC;IACjD,CAAC;IAEM,+BAAO,GAAd,UAAe,KAAa,EAAE,MAAc;QAC1C,OAAO,iBAAM,OAAO,YAAC,KAAK,EAAE,MAAM,CAAC,CAAA;IACrC,CAAC;IACH,oBAAC;AAAD,CAAC,AAZD,CAAmC,eAAe,GAYjD"}
\ No newline at end of file
{"version":3,"file":"FaceDetection.js","sourceRoot":"","sources":["../../../src/classes/FaceDetection.ts"],"names":[],"mappings":";AAAA,OAAO,EAAoB,eAAe,EAAQ,MAAM,6BAA6B,CAAC;AAOtF;IAAmC,yCAAe;IAChD,uBACE,KAAa,EACb,WAAiB,EACjB,SAAsB;eAEtB,kBAAM,KAAK,EAAE,KAAK,EAAE,EAAE,EAAE,WAAW,EAAE,SAAS,CAAC;IACjD,CAAC;IAEM,+BAAO,GAAd,UAAe,KAAa,EAAE,MAAc;QACpC,IAAA,uDAAgE,EAA9D,gBAAK,EAAE,4BAAW,EAAE,wBAA0C,CAAA;QACtE,OAAO,IAAI,aAAa,CAAC,KAAK,EAAE,WAAW,EAAE,SAAS,CAAC,CAAA;IACzD,CAAC;IACH,oBAAC;AAAD,CAAC,AAbD,CAAmC,eAAe,GAajD"}
\ No newline at end of file
import { Dimensions, IDimensions, Point, Rect } from 'tfjs-image-recognition-base';
import { Box, Dimensions, IBoundingBox, IDimensions, IRect, Point } from 'tfjs-image-recognition-base';
import { FaceDetection } from './FaceDetection';
export interface IFaceLandmarks {
positions: Point[];
......@@ -28,6 +28,11 @@ export declare class FaceLandmarks implements IFaceLandmarks {
* it's current shift.
* @returns The bounding box of the aligned face.
*/
align(detection?: FaceDetection | Rect): Rect;
align(detection?: FaceDetection | IRect | IBoundingBox | null, options?: {
useDlibAlignment?: boolean;
minBoxPadding?: number;
}): Box;
private alignDlib;
private alignMinBbox;
protected getRefPointsForAlignment(): Point[];
}
import { Dimensions, getCenterPoint, Point, Rect } from 'tfjs-image-recognition-base';
import { Box, Dimensions, getCenterPoint, Point, Rect } from 'tfjs-image-recognition-base';
import { minBbox } from '../minBbox';
import { FaceDetection } from './FaceDetection';
// face alignment constants
var relX = 0.5;
......@@ -60,13 +61,21 @@ var FaceLandmarks = /** @class */ (function () {
* it's current shift.
* @returns The bounding box of the aligned face.
*/
FaceLandmarks.prototype.align = function (detection) {
FaceLandmarks.prototype.align = function (detection, options) {
if (options === void 0) { options = {}; }
if (detection) {
var box = detection instanceof FaceDetection
? detection.box.floor()
: detection;
return this.shiftBy(box.x, box.y).align();
: new Box(detection);
return this.shiftBy(box.x, box.y).align(null, options);
}
var _a = Object.assign({}, { useDlibAlignment: false, minBoxPadding: 0.2 }, options), useDlibAlignment = _a.useDlibAlignment, minBoxPadding = _a.minBoxPadding;
if (useDlibAlignment) {
return this.alignDlib();
}
return this.alignMinBbox(minBoxPadding);
};
FaceLandmarks.prototype.alignDlib = function () {
var centers = this.getRefPointsForAlignment();
var leftEyeCenter = centers[0], rightEyeCenter = centers[1], mouthCenter = centers[2];
var distToMouth = function (pt) { return mouthCenter.sub(pt).magnitude(); };
......@@ -78,6 +87,10 @@ var FaceLandmarks = /** @class */ (function () {
var y = Math.floor(Math.max(0, refPoint.y - (relY * size)));
return new Rect(x, y, Math.min(size, this.imageWidth + x), Math.min(size, this.imageHeight + y));
};
FaceLandmarks.prototype.alignMinBbox = function (padding) {
var box = minBbox(this.positions);
return box.pad(box.width * padding, box.height * padding);
};
FaceLandmarks.prototype.getRefPointsForAlignment = function () {
throw new Error('getRefPointsForAlignment not implemented by base class');
};
......
{"version":3,"file":"FaceLandmarks.js","sourceRoot":"","sources":["../../../src/classes/FaceLandmarks.ts"],"names":[],"mappings":"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"}
\ No newline at end of file
{"version":3,"file":"FaceLandmarks.js","sourceRoot":"","sources":["../../../src/classes/FaceLandmarks.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,UAAU,EAAE,cAAc,EAAoC,KAAK,EAAE,IAAI,EAAE,MAAM,6BAA6B,CAAC;AAE7H,OAAO,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AACrC,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAEhD,2BAA2B;AAC3B,IAAM,IAAI,GAAG,GAAG,CAAA;AAChB,IAAM,IAAI,GAAG,IAAI,CAAA;AACjB,IAAM,QAAQ,GAAG,IAAI,CAAA;AAOrB;IAKE,uBACE,6BAAsC,EACtC,OAAoB,EACpB,KAA8B;QAA9B,sBAAA,EAAA,YAAmB,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC;QAEtB,IAAA,qBAAK,EAAE,uBAAM,CAAY;QACjC,IAAI,CAAC,QAAQ,GAAG,IAAI,UAAU,CAAC,KAAK,EAAE,MAAM,CAAC,CAAA;QAC7C,IAAI,CAAC,MAAM,GAAG,KAAK,CAAA;QACnB,IAAI,CAAC,UAAU,GAAG,6BAA6B,CAAC,GAAG,CACjD,UAAA,EAAE,IAAI,OAAA,EAAE,CAAC,GAAG,CAAC,IAAI,KAAK,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,EAA3C,CAA2C,CAClD,CAAA;IACH,CAAC;IAED,sBAAW,gCAAK;aAAhB,cAA4B,OAAO,IAAI,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAA,CAAC,CAAC;;;OAAA;IAC5E,sBAAW,qCAAU;aAArB,cAAkC,OAAO,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAA,CAAC,CAAC;;;OAAA;IAC9D,sBAAW,sCAAW;aAAtB,cAAmC,OAAO,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAA,CAAC,CAAC;;;OAAA;IAChE,sBAAW,oCAAS;aAApB,cAAkC,OAAO,IAAI,CAAC,UAAU,CAAA,CAAC,CAAC;;;OAAA;IAC1D,sBAAW,4CAAiB;aAA5B;YAAA,iBAIC;YAHC,OAAO,IAAI,CAAC,UAAU,CAAC,GAAG,CACxB,UAAA,EAAE,IAAI,OAAA,EAAE,CAAC,GAAG,CAAC,KAAI,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,IAAI,KAAK,CAAC,KAAI,CAAC,UAAU,EAAE,KAAI,CAAC,WAAW,CAAC,CAAC,EAArE,CAAqE,CAC5E,CAAA;QACH,CAAC;;;OAAA;IAEM,+BAAO,GAAd,UAAwC,KAAa,EAAE,MAAc;QACnE,OAAO,IAAK,IAAI,CAAC,WAAmB,CAClC,IAAI,CAAC,iBAAiB,EACtB,EAAE,KAAK,OAAA,EAAE,MAAM,QAAA,EAAE,CAClB,CAAA;IACH,CAAC;IAEM,+BAAO,GAAd,UAAwC,CAAS,EAAE,CAAS;QAC1D,OAAO,IAAK,IAAI,CAAC,WAAmB,CAClC,IAAI,CAAC,iBAAiB,EACtB,IAAI,CAAC,QAAQ,EACb,IAAI,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAChB,CAAA;IACH,CAAC;IAEM,oCAAY,GAAnB,UAA6C,EAAS;QACpD,OAAO,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAA;IACjC,CAAC;IAED;;;;;;;;;;OAUG;IACI,6BAAK,GAAZ,UACE,SAAuD,EACvD,OAAqE;QAArE,wBAAA,EAAA,YAAqE;QAErE,IAAI,SAAS,EAAE;YACb,IAAM,GAAG,GAAG,SAAS,YAAY,aAAa;gBAC5C,CAAC,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,EAAE;gBACvB,CAAC,CAAC,IAAI,GAAG,CAAC,SAAS,CAAC,CAAA;YAEtB,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,EAAE,OAAO,CAAC,CAAA;SACvD;QAEK,IAAA,gFAAiH,EAA/G,sCAAgB,EAAE,gCAA6F,CAAA;QAEvH,IAAI,gBAAgB,EAAE;YACpB,OAAO,IAAI,CAAC,SAAS,EAAE,CAAA;SACxB;QAED,OAAO,IAAI,CAAC,YAAY,CAAC,aAAa,CAAC,CAAA;IACzC,CAAC;IAEO,iCAAS,GAAjB;QAEE,IAAM,OAAO,GAAG,IAAI,CAAC,wBAAwB,EAAE,CAAA;QAExC,IAAA,0BAAa,EAAE,2BAAc,EAAE,wBAAW,CAAW;QAC5D,IAAM,WAAW,GAAG,UAAC,EAAS,IAAK,OAAA,WAAW,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,SAAS,EAAE,EAA/B,CAA+B,CAAA;QAClE,IAAM,cAAc,GAAG,CAAC,WAAW,CAAC,aAAa,CAAC,GAAG,WAAW,CAAC,cAAc,CAAC,CAAC,GAAG,CAAC,CAAA;QAErF,IAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,cAAc,GAAG,QAAQ,CAAC,CAAA;QAElD,IAAM,QAAQ,GAAG,cAAc,CAAC,OAAO,CAAC,CAAA;QACxC,qDAAqD;QACrD,IAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,GAAG,CAAC,IAAI,GAAG,IAAI,CAAC,CAAC,CAAC,CAAA;QAC7D,IAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,GAAG,CAAC,IAAI,GAAG,IAAI,CAAC,CAAC,CAAC,CAAA;QAE7D,OAAO,IAAI,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,UAAU,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,WAAW,GAAG,CAAC,CAAC,CAAC,CAAA;IAClG,CAAC;IAEO,oCAAY,GAApB,UAAqB,OAAe;QAClC,IAAM,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,CAAA;QACnC,OAAO,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,GAAG,OAAO,EAAE,GAAG,CAAC,MAAM,GAAG,OAAO,CAAC,CAAA;IAC3D,CAAC;IAES,gDAAwB,GAAlC;QACE,MAAM,IAAI,KAAK,CAAC,wDAAwD,CAAC,CAAA;IAC3E,CAAC;IACH,oBAAC;AAAD,CAAC,AAzGD,IAyGC"}
\ No newline at end of file
{"version":3,"file":"depthwiseSeparableConv.js","sourceRoot":"","sources":["../../../src/common/depthwiseSeparableConv.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,uBAAuB,CAAC;AAG5C,MAAM,UAAU,sBAAsB,CACpC,CAAc,EACd,MAAoD,EACpD,MAAwB;IAExB,OAAO,EAAE,CAAC,IAAI,CAAC;QACb,IAAI,GAAG,GAAG,EAAE,CAAC,eAAe,CAAC,CAAC,EAAE,MAAM,CAAC,gBAAgB,EAAE,MAAM,CAAC,gBAAgB,EAAE,MAAM,EAAE,MAAM,CAAC,CAAA;QACjG,GAAG,GAAG,EAAE,CAAC,GAAG,CAAC,GAAG,EAAE,MAAM,CAAC,IAAI,CAAC,CAAA;QAC9B,OAAO,GAAG,CAAA;IACZ,CAAC,CAAC,CAAA;AACJ,CAAC"}
\ No newline at end of file
import { TfjsImageRecognitionBase } from 'tfjs-image-recognition-base';
export declare function loadConvParamsFactory(extractWeightEntry: <T>(originalPath: string, paramRank: number) => T): (prefix: string) => TfjsImageRecognitionBase.ConvParams;
export function loadConvParamsFactory(extractWeightEntry) {
return function (prefix) {
var filters = extractWeightEntry(prefix + "/filters", 4);
var bias = extractWeightEntry(prefix + "/bias", 1);
return { filters: filters, bias: bias };
};
}
//# sourceMappingURL=loadConvParamsFactory.js.map
\ No newline at end of file
{"version":3,"file":"loadConvParamsFactory.js","sourceRoot":"","sources":["../../../src/common/loadConvParamsFactory.ts"],"names":[],"mappings":"AAGA,MAAM,UAAU,qBAAqB,CAAC,kBAAqE;IACzG,OAAO,UAAS,MAAc;QAC5B,IAAM,OAAO,GAAG,kBAAkB,CAAiB,MAAM,aAAU,EAAE,CAAC,CAAC,CAAA;QACvE,IAAM,IAAI,GAAG,kBAAkB,CAAiB,MAAM,UAAO,EAAE,CAAC,CAAC,CAAA;QAEjE,OAAO,EAAE,OAAO,SAAA,EAAE,IAAI,MAAA,EAAE,CAAA;IAC1B,CAAC,CAAA;AACH,CAAC"}
\ No newline at end of file
{"version":3,"file":"drawContour.js","sourceRoot":"","sources":["../../../src/dom/drawContour.ts"],"names":[],"mappings":"AAEA,MAAM,UAAU,WAAW,CACzB,GAA6B,EAC7B,MAAe,EACf,QAAyB;IAAzB,yBAAA,EAAA,gBAAyB;IAEzB,GAAG,CAAC,SAAS,EAAE,CAAA;IAEf,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,UAAC,EAAQ,EAAE,OAAO;YAAf,QAAC,EAAE,QAAC;QAC7B,IAAM,IAAI,GAAG,MAAM,CAAC,OAAO,CAAC,CAAA;QAC5B,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,CAAA;QAC1B,GAAG,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA;IAClB,CAAC,CAAC,CAAA;IAEF,IAAI,QAAQ,EAAE;QACZ,IAAM,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAA;QACtC,IAAM,EAAE,GAAG,MAAM,CAAC,CAAC,CAAC,CAAA;QACpB,IAAI,CAAC,IAAI,IAAI,CAAC,EAAE,EAAE;YAChB,OAAM;SACP;QAED,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,CAAA;QAC1B,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAA;KACvB;IAED,GAAG,CAAC,MAAM,EAAE,CAAA;AACd,CAAC"}
\ No newline at end of file
import { DrawFaceExpressionsInput, DrawFaceExpressionsOptions } from './types';
export declare function drawFaceExpressions(canvasArg: string | HTMLCanvasElement, faceExpressions: DrawFaceExpressionsInput | DrawFaceExpressionsInput[], options?: DrawFaceExpressionsOptions): void;
import { drawText, env, getContext2dOrThrow, getDefaultDrawOptions, resolveInput, round } from 'tfjs-image-recognition-base';
export function drawFaceExpressions(canvasArg, faceExpressions, options) {
var canvas = resolveInput(canvasArg);
if (!(canvas instanceof env.getEnv().Canvas)) {
throw new Error('drawFaceExpressions - expected canvas to be of type: HTMLCanvasElement');
}
var drawOptions = Object.assign(getDefaultDrawOptions(options), (options || {}));
var ctx = getContext2dOrThrow(canvas);
var _a = drawOptions.primaryColor, primaryColor = _a === void 0 ? 'red' : _a, _b = drawOptions.secondaryColor, secondaryColor = _b === void 0 ? 'blue' : _b, _c = drawOptions.primaryFontSize, primaryFontSize = _c === void 0 ? 22 : _c, _d = drawOptions.secondaryFontSize, secondaryFontSize = _d === void 0 ? 16 : _d, _e = drawOptions.minConfidence, minConfidence = _e === void 0 ? 0.2 : _e;
var faceExpressionsArray = Array.isArray(faceExpressions)
? faceExpressions
: [faceExpressions];
faceExpressionsArray.forEach(function (_a) {
var position = _a.position, expressions = _a.expressions;
var x = position.x, y = position.y;
var height = position.height || 0;
var sorted = expressions.sort(function (a, b) { return b.probability - a.probability; });
var resultsToDisplay = sorted.filter(function (expr) { return expr.probability > minConfidence; });
var offset = (y + height + resultsToDisplay.length * primaryFontSize) > canvas.height
? -(resultsToDisplay.length * primaryFontSize)
: 0;
resultsToDisplay.forEach(function (expr, i) {
var text = expr.expression + " (" + round(expr.probability) + ")";
drawText(ctx, x, y + height + (i * primaryFontSize) + offset, text, {
textColor: i === 0 ? primaryColor : secondaryColor,
fontSize: i === 0 ? primaryFontSize : secondaryFontSize
});
});
});
}
//# sourceMappingURL=drawFaceExpressions.js.map
\ No newline at end of file
{"version":3,"file":"drawFaceExpressions.js","sourceRoot":"","sources":["../../../src/dom/drawFaceExpressions.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,GAAG,EAAE,mBAAmB,EAAE,qBAAqB,EAAE,YAAY,EAAE,KAAK,EAAE,MAAM,6BAA6B,CAAC;AAK7H,MAAM,UAAU,mBAAmB,CACjC,SAAqC,EACrC,eAAsE,EACtE,OAAoC;IAEpC,IAAM,MAAM,GAAG,YAAY,CAAC,SAAS,CAAC,CAAA;IACtC,IAAI,CAAC,CAAC,MAAM,YAAY,GAAG,CAAC,MAAM,EAAE,CAAC,MAAM,CAAC,EAAE;QAC5C,MAAM,IAAI,KAAK,CAAC,wEAAwE,CAAC,CAAA;KAC1F;IAED,IAAM,WAAW,GAAG,MAAM,CAAC,MAAM,CAC/B,qBAAqB,CAAC,OAAO,CAAC,EAC9B,CAAC,OAAO,IAAI,EAAE,CAAC,CAChB,CAAA;IAED,IAAM,GAAG,GAAG,mBAAmB,CAAC,MAAM,CAAC,CAAA;IAErC,IAAA,6BAAoB,EAApB,yCAAoB,EACpB,+BAAuB,EAAvB,4CAAuB,EACvB,gCAAoB,EAApB,yCAAoB,EACpB,kCAAsB,EAAtB,2CAAsB,EACtB,8BAAmB,EAAnB,wCAAmB,CACN;IAEf,IAAM,oBAAoB,GAAG,KAAK,CAAC,OAAO,CAAC,eAAe,CAAC;QACzD,CAAC,CAAC,eAAe;QACjB,CAAC,CAAC,CAAC,eAAe,CAAC,CAAA;IAErB,oBAAoB,CAAC,OAAO,CAAC,UAAC,EAAyB;YAAvB,sBAAQ,EAAE,4BAAW;QAC3C,IAAA,cAAC,EAAE,cAAC,CAAa;QACzB,IAAM,MAAM,GAAI,QAAkB,CAAC,MAAM,IAAI,CAAC,CAAA;QAC9C,IAAM,MAAM,GAAG,WAAW,CAAC,IAAI,CAAC,UAAC,CAAC,EAAE,CAAC,IAAK,OAAA,CAAC,CAAC,WAAW,GAAG,CAAC,CAAC,WAAW,EAA7B,CAA6B,CAAC,CAAA;QACxE,IAAM,gBAAgB,GAAG,MAAM,CAAC,MAAM,CAAC,UAAA,IAAI,IAAI,OAAA,IAAI,CAAC,WAAW,GAAG,aAAa,EAAhC,CAAgC,CAAC,CAAA;QAEhF,IAAI,MAAM,GAAG,CAAC,CAAC,GAAG,MAAM,GAAG,gBAAgB,CAAC,MAAM,GAAG,eAAe,CAAC,GAAG,MAAM,CAAC,MAAM;YACnF,CAAC,CAAC,CAAC,CAAC,gBAAgB,CAAC,MAAM,GAAG,eAAe,CAAC;YAC9C,CAAC,CAAC,CAAC,CAAA;QACL,gBAAgB,CAAC,OAAO,CAAC,UAAC,IAAI,EAAE,CAAC;YAC/B,IAAM,IAAI,GAAM,IAAI,CAAC,UAAU,UAAK,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,MAAG,CAAA;YAC9D,QAAQ,CACN,GAAG,EACH,CAAC,EACD,CAAC,GAAG,MAAM,GAAG,CAAC,CAAC,GAAG,eAAe,CAAC,GAAG,MAAM,EAC3C,IAAI,EACJ;gBACE,SAAS,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,cAAc;gBAClD,QAAQ,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,iBAAiB;aACxD,CACF,CAAA;QACH,CAAC,CAAC,CAAA;IACJ,CAAC,CAAC,CAAA;AAGJ,CAAC"}
\ No newline at end of file
import { FaceLandmarks } from '../classes/FaceLandmarks';
import { DrawLandmarksOptions } from './types';
export declare function drawLandmarks(canvasArg: string | HTMLCanvasElement, faceLandmarks: FaceLandmarks | FaceLandmarks[], options?: DrawLandmarksOptions): void;
import { env, getContext2dOrThrow, getDefaultDrawOptions, resolveInput } from 'tfjs-image-recognition-base';
import { FaceLandmarks68 } from '../classes/FaceLandmarks68';
import { drawContour } from './drawContour';
export function drawLandmarks(canvasArg, faceLandmarks, options) {
var canvas = resolveInput(canvasArg);
if (!(canvas instanceof env.getEnv().Canvas)) {
throw new Error('drawLandmarks - expected canvas to be of type: HTMLCanvasElement');
}
var drawOptions = Object.assign(getDefaultDrawOptions(options), (options || {}));
var drawLines = Object.assign({ drawLines: false }, (options || {})).drawLines;
var ctx = getContext2dOrThrow(canvas);
var lineWidth = drawOptions.lineWidth, _a = drawOptions.color, color = _a === void 0 ? 'blue' : _a;
var faceLandmarksArray = Array.isArray(faceLandmarks) ? faceLandmarks : [faceLandmarks];
faceLandmarksArray.forEach(function (landmarks) {
if (drawLines && landmarks instanceof FaceLandmarks68) {
ctx.strokeStyle = color;
ctx.lineWidth = lineWidth;
drawContour(ctx, landmarks.getJawOutline());
drawContour(ctx, landmarks.getLeftEyeBrow());
drawContour(ctx, landmarks.getRightEyeBrow());
drawContour(ctx, landmarks.getNose());
drawContour(ctx, landmarks.getLeftEye(), true);
drawContour(ctx, landmarks.getRightEye(), true);
drawContour(ctx, landmarks.getMouth(), true);
return;
}
// else draw points
var ptOffset = lineWidth / 2;
ctx.fillStyle = color;
landmarks.positions.forEach(function (pt) { return ctx.fillRect(pt.x - ptOffset, pt.y - ptOffset, lineWidth, lineWidth); });
});
}
//# sourceMappingURL=drawLandmarks.js.map
\ No newline at end of file
{"version":3,"file":"drawLandmarks.js","sourceRoot":"","sources":["../../../src/dom/drawLandmarks.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,mBAAmB,EAAE,qBAAqB,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAG5G,OAAO,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAC7D,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAG5C,MAAM,UAAU,aAAa,CAC3B,SAAqC,EACrC,aAA8C,EAC9C,OAA8B;IAE9B,IAAM,MAAM,GAAG,YAAY,CAAC,SAAS,CAAC,CAAA;IACtC,IAAI,CAAC,CAAC,MAAM,YAAY,GAAG,CAAC,MAAM,EAAE,CAAC,MAAM,CAAC,EAAE;QAC5C,MAAM,IAAI,KAAK,CAAC,kEAAkE,CAAC,CAAA;KACpF;IAED,IAAM,WAAW,GAAG,MAAM,CAAC,MAAM,CAC/B,qBAAqB,CAAC,OAAO,CAAC,EAC9B,CAAC,OAAO,IAAI,EAAE,CAAC,CAChB,CAAA;IAEO,IAAA,0EAAS,CAAyD;IAE1E,IAAM,GAAG,GAAG,mBAAmB,CAAC,MAAM,CAAC,CAAA;IAC/B,IAAA,iCAAS,EAAE,sBAAc,EAAd,mCAAc,CAAgB;IAEjD,IAAM,kBAAkB,GAAG,KAAK,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,CAAA;IAEzF,kBAAkB,CAAC,OAAO,CAAC,UAAA,SAAS;QAClC,IAAI,SAAS,IAAI,SAAS,YAAY,eAAe,EAAE;YACrD,GAAG,CAAC,WAAW,GAAG,KAAK,CAAA;YACvB,GAAG,CAAC,SAAS,GAAG,SAAS,CAAA;YACzB,WAAW,CAAC,GAAG,EAAE,SAAS,CAAC,aAAa,EAAE,CAAC,CAAA;YAC3C,WAAW,CAAC,GAAG,EAAE,SAAS,CAAC,cAAc,EAAE,CAAC,CAAA;YAC5C,WAAW,CAAC,GAAG,EAAE,SAAS,CAAC,eAAe,EAAE,CAAC,CAAA;YAC7C,WAAW,CAAC,GAAG,EAAE,SAAS,CAAC,OAAO,EAAE,CAAC,CAAA;YACrC,WAAW,CAAC,GAAG,EAAE,SAAS,CAAC,UAAU,EAAE,EAAE,IAAI,CAAC,CAAA;YAC9C,WAAW,CAAC,GAAG,EAAE,SAAS,CAAC,WAAW,EAAE,EAAE,IAAI,CAAC,CAAA;YAC/C,WAAW,CAAC,GAAG,EAAE,SAAS,CAAC,QAAQ,EAAE,EAAE,IAAI,CAAC,CAAA;YAC5C,OAAM;SACP;QAED,mBAAmB;QACnB,IAAM,QAAQ,GAAG,SAAS,GAAG,CAAC,CAAA;QAC9B,GAAG,CAAC,SAAS,GAAG,KAAK,CAAA;QACrB,SAAS,CAAC,SAAS,CAAC,OAAO,CAAC,UAAA,EAAE,IAAI,OAAA,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,GAAG,QAAQ,EAAE,EAAE,CAAC,CAAC,GAAG,QAAQ,EAAE,SAAS,EAAE,SAAS,CAAC,EAApE,CAAoE,CAAC,CAAA;IACzG,CAAC,CAAC,CAAA;AACJ,CAAC"}
\ No newline at end of file
export * from './drawContour';
export * from './drawLandmarks';
export * from './drawFaceExpressions';
export * from './extractFaces';
export * from './extractFaceTensors';
export * from './types';
export * from './drawContour';
export * from './drawLandmarks';
export * from './drawFaceExpressions';
export * from './extractFaces';
export * from './extractFaceTensors';
//# sourceMappingURL=index.js.map
\ No newline at end of file
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/dom/index.ts"],"names":[],"mappings":"AAAA,cAAc,eAAe,CAAA;AAC7B,cAAc,iBAAiB,CAAA;AAC/B,cAAc,uBAAuB,CAAA;AACrC,cAAc,gBAAgB,CAAA;AAC9B,cAAc,sBAAsB,CAAA"}
\ No newline at end of file
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/dom/index.ts"],"names":[],"mappings":"AAAA,cAAc,gBAAgB,CAAA;AAC9B,cAAc,sBAAsB,CAAA"}
\ No newline at end of file
import { IPoint, IRect } from 'tfjs-image-recognition-base';
import { WithFaceExpressions } from '../factories/WithFaceExpressions';
export declare type DrawLandmarksOptions = {
lineWidth?: number;
color?: string;
drawLines?: boolean;
};
export declare type DrawFaceExpressionsOptions = {
primaryColor?: string;
secondaryColor?: string;
primaryFontSize?: number;
secondaryFontSize?: number;
minConfidence?: number;
};
export declare type DrawFaceExpressionsInput = WithFaceExpressions<{
position: IPoint | IRect;
}>;
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/dom/types.ts"],"names":[],"mappings":""}
\ No newline at end of file
import { FaceLandmarks } from '../classes/FaceLandmarks';
import { WithFaceDetection } from '../factories/WithFaceDetection';
import { WithFaceLandmarks } from '../factories/WithFaceLandmarks';
export interface IDrawFaceLandmarksOptions {
drawLines?: boolean;
drawPoints?: boolean;
lineWidth?: number;
pointSize?: number;
lineColor?: string;
pointColor?: string;
}
export declare class DrawFaceLandmarksOptions {
drawLines: boolean;
drawPoints: boolean;
lineWidth: number;
pointSize: number;
lineColor: string;
pointColor: string;
constructor(options?: IDrawFaceLandmarksOptions);
}
export declare class DrawFaceLandmarks {
faceLandmarks: FaceLandmarks;
options: DrawFaceLandmarksOptions;
constructor(faceLandmarks: FaceLandmarks, options?: IDrawFaceLandmarksOptions);
draw(canvasArg: string | HTMLCanvasElement | CanvasRenderingContext2D): void;
}
export declare type DrawFaceLandmarksInput = FaceLandmarks | WithFaceLandmarks<WithFaceDetection<{}>>;
export declare function drawFaceLandmarks(canvasArg: string | HTMLCanvasElement, faceLandmarks: DrawFaceLandmarksInput | Array<DrawFaceLandmarksInput>): void;
import { getContext2dOrThrow } from 'tfjs-image-recognition-base';
import { FaceLandmarks } from '../classes/FaceLandmarks';
import { FaceLandmarks68 } from '../classes/FaceLandmarks68';
import { isWithFaceLandmarks } from '../factories/WithFaceLandmarks';
import { drawContour } from './drawContour';
var DrawFaceLandmarksOptions = /** @class */ (function () {
function DrawFaceLandmarksOptions(options) {
if (options === void 0) { options = {}; }
var _a = options.drawLines, drawLines = _a === void 0 ? true : _a, _b = options.drawPoints, drawPoints = _b === void 0 ? true : _b, lineWidth = options.lineWidth, lineColor = options.lineColor, pointSize = options.pointSize, pointColor = options.pointColor;
this.drawLines = drawLines;
this.drawPoints = drawPoints;
this.lineWidth = lineWidth || 1;
this.pointSize = pointSize || 2;
this.lineColor = lineColor || 'rgba(0, 255, 255, 1)';
this.pointColor = pointColor || 'rgba(255, 0, 255, 1)';
}
return DrawFaceLandmarksOptions;
}());
export { DrawFaceLandmarksOptions };
var DrawFaceLandmarks = /** @class */ (function () {
function DrawFaceLandmarks(faceLandmarks, options) {
if (options === void 0) { options = {}; }
this.faceLandmarks = faceLandmarks;
this.options = new DrawFaceLandmarksOptions(options);
}
DrawFaceLandmarks.prototype.draw = function (canvasArg) {
var ctx = getContext2dOrThrow(canvasArg);
var _a = this.options, drawLines = _a.drawLines, drawPoints = _a.drawPoints, lineWidth = _a.lineWidth, lineColor = _a.lineColor, pointSize = _a.pointSize, pointColor = _a.pointColor;
if (drawLines && this.faceLandmarks instanceof FaceLandmarks68) {
ctx.strokeStyle = lineColor;
ctx.lineWidth = lineWidth;
drawContour(ctx, this.faceLandmarks.getJawOutline());
drawContour(ctx, this.faceLandmarks.getLeftEyeBrow());
drawContour(ctx, this.faceLandmarks.getRightEyeBrow());
drawContour(ctx, this.faceLandmarks.getNose());
drawContour(ctx, this.faceLandmarks.getLeftEye(), true);
drawContour(ctx, this.faceLandmarks.getRightEye(), true);
drawContour(ctx, this.faceLandmarks.getMouth(), true);
}
if (drawPoints) {
ctx.strokeStyle = pointColor;
ctx.fillStyle = pointColor;
var drawPoint = function (pt) {
ctx.beginPath();
ctx.arc(pt.x, pt.y, pointSize, 0, 2 * Math.PI);
ctx.fill();
};
this.faceLandmarks.positions.forEach(drawPoint);
}
};
return DrawFaceLandmarks;
}());
export { DrawFaceLandmarks };
export function drawFaceLandmarks(canvasArg, faceLandmarks) {
var faceLandmarksArray = Array.isArray(faceLandmarks) ? faceLandmarks : [faceLandmarks];
faceLandmarksArray.forEach(function (f) {
var landmarks = f instanceof FaceLandmarks
? f
: (isWithFaceLandmarks(f) ? f.landmarks : undefined);
if (!landmarks) {
throw new Error('drawFaceLandmarks - expected faceExpressions to be FaceLandmarks | WithFaceLandmarks<WithFaceDetection<{}>> or array thereof');
}
new DrawFaceLandmarks(landmarks).draw(canvasArg);
});
}
//# sourceMappingURL=DrawFaceLandmarks.js.map
\ No newline at end of file
{"version":3,"file":"DrawFaceLandmarks.js","sourceRoot":"","sources":["../../../src/draw/DrawFaceLandmarks.ts"],"names":[],"mappings":"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"}
\ No newline at end of file
{"version":3,"file":"drawContour.js","sourceRoot":"","sources":["../../../src/draw/drawContour.ts"],"names":[],"mappings":"AAEA,MAAM,UAAU,WAAW,CACzB,GAA6B,EAC7B,MAAe,EACf,QAAyB;IAAzB,yBAAA,EAAA,gBAAyB;IAEzB,GAAG,CAAC,SAAS,EAAE,CAAA;IAEf,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,UAAC,EAAQ,EAAE,OAAO;YAAf,QAAC,EAAE,QAAC;QAC7B,IAAM,IAAI,GAAG,MAAM,CAAC,OAAO,CAAC,CAAA;QAC5B,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,CAAA;QAC1B,GAAG,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA;IAClB,CAAC,CAAC,CAAA;IAEF,IAAI,QAAQ,EAAE;QACZ,IAAM,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAA;QACtC,IAAM,EAAE,GAAG,MAAM,CAAC,CAAC,CAAC,CAAA;QACpB,IAAI,CAAC,IAAI,IAAI,CAAC,EAAE,EAAE;YAChB,OAAM;SACP;QAED,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,CAAA;QAC1B,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAA;KACvB;IAED,GAAG,CAAC,MAAM,EAAE,CAAA;AACd,CAAC"}
\ No newline at end of file
import { IBoundingBox, IRect } from 'tfjs-image-recognition-base';
import { FaceDetection } from '../classes/FaceDetection';
import { WithFaceDetection } from '../factories/WithFaceDetection';
export declare type TDrawDetectionsInput = IRect | IBoundingBox | FaceDetection | WithFaceDetection<{}>;
export declare function drawDetections(canvasArg: string | HTMLCanvasElement, detections: TDrawDetectionsInput | Array<TDrawDetectionsInput>): void;
import { Box, draw, round } from 'tfjs-image-recognition-base';
import { FaceDetection } from '../classes/FaceDetection';
import { isWithFaceDetection } from '../factories/WithFaceDetection';
export function drawDetections(canvasArg, detections) {
var detectionsArray = Array.isArray(detections) ? detections : [detections];
detectionsArray.forEach(function (det) {
var score = det instanceof FaceDetection
? det.score
: (isWithFaceDetection(det) ? det.detection.score : undefined);
var box = det instanceof FaceDetection
? det.box
: (isWithFaceDetection(det) ? det.detection.box : new Box(det));
var label = score ? "" + round(score) : undefined;
new draw.DrawBox(box, { label: label }).draw(canvasArg);
});
}
//# sourceMappingURL=drawDetections.js.map
\ No newline at end of file
{"version":3,"file":"drawDetections.js","sourceRoot":"","sources":["../../../src/draw/drawDetections.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,IAAI,EAAuB,KAAK,EAAE,MAAM,6BAA6B,CAAC;AAEpF,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AACzD,OAAO,EAAE,mBAAmB,EAAqB,MAAM,gCAAgC,CAAC;AAIxF,MAAM,UAAU,cAAc,CAC5B,SAAqC,EACrC,UAA8D;IAE9D,IAAM,eAAe,GAAG,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAA;IAE7E,eAAe,CAAC,OAAO,CAAC,UAAA,GAAG;QACzB,IAAM,KAAK,GAAG,GAAG,YAAY,aAAa;YACxC,CAAC,CAAC,GAAG,CAAC,KAAK;YACX,CAAC,CAAC,CAAC,mBAAmB,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC,CAAA;QAEhE,IAAM,GAAG,GAAG,GAAG,YAAY,aAAa;YACtC,CAAC,CAAC,GAAG,CAAC,GAAG;YACT,CAAC,CAAC,CAAC,mBAAmB,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC,CAAA;QAEjE,IAAM,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC,KAAG,KAAK,CAAC,KAAK,CAAG,CAAC,CAAC,CAAC,SAAS,CAAA;QACnD,IAAI,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,KAAK,OAAA,EAAE,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAA;IAClD,CAAC,CAAC,CAAA;AACJ,CAAC"}
\ No newline at end of file
import { IPoint } from 'tfjs-image-recognition-base';
import { FaceExpressions } from '../faceExpressionNet';
import { WithFaceExpressions } from '../factories/WithFaceExpressions';
export declare type DrawFaceExpressionsInput = FaceExpressions | WithFaceExpressions<{}>;
export declare function drawFaceExpressions(canvasArg: string | HTMLCanvasElement, faceExpressions: DrawFaceExpressionsInput | Array<DrawFaceExpressionsInput>, minConfidence?: number, textFieldAnchor?: IPoint): void;
import { draw, Point, round } from 'tfjs-image-recognition-base';
import { FaceExpressions } from '../faceExpressionNet';
import { isWithFaceDetection } from '../factories/WithFaceDetection';
import { isWithFaceExpressions } from '../factories/WithFaceExpressions';
export function drawFaceExpressions(canvasArg, faceExpressions, minConfidence, textFieldAnchor) {
if (minConfidence === void 0) { minConfidence = 0.1; }
var faceExpressionsArray = Array.isArray(faceExpressions) ? faceExpressions : [faceExpressions];
faceExpressionsArray.forEach(function (e) {
var expr = e instanceof FaceExpressions
? e
: (isWithFaceExpressions(e) ? e.expressions : undefined);
if (!expr) {
throw new Error('drawFaceExpressions - expected faceExpressions to be FaceExpressions | WithFaceExpressions<{}> or array thereof');
}
var sorted = expr.asSortedArray();
var resultsToDisplay = sorted.filter(function (expr) { return expr.probability > minConfidence; });
var anchor = isWithFaceDetection(e)
? e.detection.box.bottomLeft
: (textFieldAnchor || new Point(0, 0));
var drawTextField = new draw.DrawTextField(resultsToDisplay.map(function (expr) { return expr.expression + " (" + round(expr.probability) + ")"; }), anchor);
drawTextField.draw(canvasArg);
});
}
//# sourceMappingURL=drawFaceExpressions.js.map
\ No newline at end of file
{"version":3,"file":"drawFaceExpressions.js","sourceRoot":"","sources":["../../../src/draw/drawFaceExpressions.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAU,KAAK,EAAE,KAAK,EAAE,MAAM,6BAA6B,CAAC;AAEzE,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,EAAE,mBAAmB,EAAE,MAAM,gCAAgC,CAAC;AACrE,OAAO,EAAE,qBAAqB,EAAuB,MAAM,kCAAkC,CAAC;AAI9F,MAAM,UAAU,mBAAmB,CACjC,SAAqC,EACrC,eAA2E,EAC3E,aAAmB,EACnB,eAAwB;IADxB,8BAAA,EAAA,mBAAmB;IAGnB,IAAM,oBAAoB,GAAG,KAAK,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,eAAe,CAAC,CAAA;IAEjG,oBAAoB,CAAC,OAAO,CAAC,UAAA,CAAC;QAC5B,IAAM,IAAI,GAAG,CAAC,YAAY,eAAe;YACvC,CAAC,CAAC,CAAC;YACH,CAAC,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,SAAS,CAAC,CAAA;QAC1D,IAAI,CAAC,IAAI,EAAE;YACT,MAAM,IAAI,KAAK,CAAC,iHAAiH,CAAC,CAAA;SACnI;QAED,IAAM,MAAM,GAAG,IAAI,CAAC,aAAa,EAAE,CAAA;QACnC,IAAM,gBAAgB,GAAG,MAAM,CAAC,MAAM,CAAC,UAAA,IAAI,IAAI,OAAA,IAAI,CAAC,WAAW,GAAG,aAAa,EAAhC,CAAgC,CAAC,CAAA;QAEhF,IAAM,MAAM,GAAG,mBAAmB,CAAC,CAAC,CAAC;YACnC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,GAAG,CAAC,UAAU;YAC5B,CAAC,CAAC,CAAC,eAAe,IAAI,IAAI,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAA;QAExC,IAAM,aAAa,GAAG,IAAI,IAAI,CAAC,aAAa,CAC1C,gBAAgB,CAAC,GAAG,CAAC,UAAA,IAAI,IAAI,OAAG,IAAI,CAAC,UAAU,UAAK,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,MAAG,EAAjD,CAAiD,CAAC,EAC/E,MAAM,CACP,CAAA;QACD,aAAa,CAAC,IAAI,CAAC,SAAS,CAAC,CAAA;IAC/B,CAAC,CAAC,CAAA;AACJ,CAAC"}
\ No newline at end of file
export * from './drawContour';
export * from './drawDetections';
export * from './drawFaceExpressions';
export * from './DrawFaceLandmarks';
export * from './drawContour';
export * from './drawDetections';
export * from './drawFaceExpressions';
export * from './DrawFaceLandmarks';
//# sourceMappingURL=index.js.map
\ No newline at end of file
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/draw/index.ts"],"names":[],"mappings":"AAAA,cAAc,eAAe,CAAA;AAC7B,cAAc,kBAAkB,CAAA;AAChC,cAAc,uBAAuB,CAAA;AACrC,cAAc,qBAAqB,CAAA"}
\ No newline at end of file
......@@ -3,14 +3,12 @@ import { NetInput, TNetInput } from 'tfjs-image-recognition-base';
import { FaceFeatureExtractor } from '../faceFeatureExtractor/FaceFeatureExtractor';
import { FaceFeatureExtractorParams } from '../faceFeatureExtractor/types';
import { FaceProcessor } from '../faceProcessor/FaceProcessor';
import { FaceExpressionPrediction } from './types';
import { FaceExpressions } from './FaceExpressions';
export declare class FaceExpressionNet extends FaceProcessor<FaceFeatureExtractorParams> {
static getFaceExpressionLabel(faceExpression: string): number;
static decodeProbabilites(probabilities: number[] | Float32Array): FaceExpressionPrediction[];
constructor(faceFeatureExtractor?: FaceFeatureExtractor);
forwardInput(input: NetInput | tf.Tensor4D): tf.Tensor2D;
forward(input: TNetInput): Promise<tf.Tensor2D>;
predictExpressions(input: TNetInput): Promise<FaceExpressionPrediction[] | FaceExpressionPrediction[][]>;
predictExpressions(input: TNetInput): Promise<FaceExpressions | FaceExpressions[]>;
protected getDefaultModelName(): string;
protected getClassifierChannelsIn(): number;
protected getClassifierChannelsOut(): number;
......
......@@ -3,27 +3,13 @@ import * as tf from '@tensorflow/tfjs-core';
import { toNetInput } from 'tfjs-image-recognition-base';
import { FaceFeatureExtractor } from '../faceFeatureExtractor/FaceFeatureExtractor';
import { FaceProcessor } from '../faceProcessor/FaceProcessor';
import { faceExpressionLabels } from './types';
import { FaceExpressions } from './FaceExpressions';
var FaceExpressionNet = /** @class */ (function (_super) {
tslib_1.__extends(FaceExpressionNet, _super);
function FaceExpressionNet(faceFeatureExtractor) {
if (faceFeatureExtractor === void 0) { faceFeatureExtractor = new FaceFeatureExtractor(); }
return _super.call(this, 'FaceExpressionNet', faceFeatureExtractor) || this;
}
FaceExpressionNet.getFaceExpressionLabel = function (faceExpression) {
var label = faceExpressionLabels[faceExpression];
if (typeof label !== 'number') {
throw new Error("getFaceExpressionLabel - no label for faceExpression: " + faceExpression);
}
return label;
};
FaceExpressionNet.decodeProbabilites = function (probabilities) {
if (probabilities.length !== 7) {
throw new Error("decodeProbabilites - expected probabilities.length to be 7, have: " + probabilities.length);
}
return Object.keys(faceExpressionLabels)
.map(function (expression) { return ({ expression: expression, probability: probabilities[faceExpressionLabels[expression]] }); });
};
FaceExpressionNet.prototype.forwardInput = function (input) {
var _this = this;
return tf.tidy(function () { return tf.softmax(_this.runNet(input)); });
......@@ -69,7 +55,7 @@ var FaceExpressionNet = /** @class */ (function (_super) {
probabilitesByBatch = _a.sent();
out.dispose();
predictionsByBatch = probabilitesByBatch
.map(function (propablities) { return FaceExpressionNet.decodeProbabilites(propablities); });
.map(function (probabilites) { return new FaceExpressions(probabilites); });
return [2 /*return*/, netInput.isBatchInput
? predictionsByBatch
: predictionsByBatch[0]];
......
{"version":3,"file":"FaceExpressionNet.js","sourceRoot":"","sources":["../../../src/faceExpressionNet/FaceExpressionNet.ts"],"names":[],"mappings":"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"}
\ No newline at end of file
{"version":3,"file":"FaceExpressionNet.js","sourceRoot":"","sources":["../../../src/faceExpressionNet/FaceExpressionNet.ts"],"names":[],"mappings":";AAAA,OAAO,KAAK,EAAE,MAAM,uBAAuB,CAAC;AAC5C,OAAO,EAAuB,UAAU,EAAE,MAAM,6BAA6B,CAAC;AAE9E,OAAO,EAAE,oBAAoB,EAAE,MAAM,8CAA8C,CAAC;AAEpF,OAAO,EAAE,aAAa,EAAE,MAAM,gCAAgC,CAAC;AAC/D,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAEpD;IAAuC,6CAAyC;IAE9E,2BAAY,oBAAuE;QAAvE,qCAAA,EAAA,2BAAiD,oBAAoB,EAAE;eACjF,kBAAM,mBAAmB,EAAE,oBAAoB,CAAC;IAClD,CAAC;IAEM,wCAAY,GAAnB,UAAoB,KAA6B;QAAjD,iBAEC;QADC,OAAO,EAAE,CAAC,IAAI,CAAC,cAAM,OAAA,EAAE,CAAC,OAAO,CAAC,KAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EAA9B,CAA8B,CAAC,CAAA;IACtD,CAAC;IAEY,mCAAO,GAApB,UAAqB,KAAgB;;;;;;wBAC5B,KAAA,IAAI,CAAC,YAAY,CAAA;wBAAC,qBAAM,UAAU,CAAC,KAAK,CAAC,EAAA;4BAAhD,sBAAO,SAAA,IAAI,GAAc,SAAuB,EAAC,EAAA;;;;KAClD;IAEY,8CAAkB,GAA/B,UAAgC,KAAgB;;;;;;4BAC7B,qBAAM,UAAU,CAAC,KAAK,CAAC,EAAA;;wBAAlC,QAAQ,GAAG,SAAuB;wBAC5B,qBAAM,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,EAAA;;wBAAvC,GAAG,GAAG,SAAiC;wBACjB,qBAAM,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,UAAM,CAAC;;;;gDAC1D,qBAAM,CAAC,CAAC,IAAI,EAAE,EAAA;;4CAArB,IAAI,GAAG,SAAc;4CAC3B,CAAC,CAAC,OAAO,EAAE,CAAA;4CACX,sBAAO,IAAI,EAAA;;;iCACZ,CAAC,CAAC,EAAA;;wBAJG,mBAAmB,GAAG,SAIzB;wBACH,GAAG,CAAC,OAAO,EAAE,CAAA;wBAEP,kBAAkB,GAAG,mBAAmB;6BAC3C,GAAG,CAAC,UAAA,YAAY,IAAI,OAAA,IAAI,eAAe,CAAC,YAA4B,CAAC,EAAjD,CAAiD,CAAC,CAAA;wBAEzE,sBAAO,QAAQ,CAAC,YAAY;gCAC1B,CAAC,CAAC,kBAAkB;gCACpB,CAAC,CAAC,kBAAkB,CAAC,CAAC,CAAC,EAAA;;;;KAC1B;IAES,+CAAmB,GAA7B;QACE,OAAO,uBAAuB,CAAA;IAChC,CAAC;IAES,mDAAuB,GAAjC;QACE,OAAO,GAAG,CAAA;IACZ,CAAC;IAES,oDAAwB,GAAlC;QACE,OAAO,CAAC,CAAA;IACV,CAAC;IACH,wBAAC;AAAD,CAAC,AA3CD,CAAuC,aAAa,GA2CnD"}
\ No newline at end of file
export declare const faceExpressionLabels: {
export declare const FACE_EXPRESSION_LABELS: string[];
export declare class FaceExpressions {
neutral: number;
happy: number;
sad: number;
......@@ -6,9 +7,9 @@ export declare const faceExpressionLabels: {
fearful: number;
disgusted: number;
surprised: number;
};
export declare type FaceExpression = 'neutral' | 'happy' | 'sad' | 'angry' | 'fearful' | 'disgusted' | 'surprised';
export declare type FaceExpressionPrediction = {
expression: FaceExpression;
probability: number;
};
constructor(probabilities: number[] | Float32Array);
asSortedArray(): {
expression: string;
probability: number;
}[];
}
export var FACE_EXPRESSION_LABELS = ['neutral', 'happy', 'sad', 'angry', 'fearful', 'disgusted', 'surprised'];
var FaceExpressions = /** @class */ (function () {
function FaceExpressions(probabilities) {
var _this = this;
if (probabilities.length !== 7) {
throw new Error("FaceExpressions.constructor - expected probabilities.length to be 7, have: " + probabilities.length);
}
FACE_EXPRESSION_LABELS.forEach(function (expression, idx) {
_this[expression] = probabilities[idx];
});
}
FaceExpressions.prototype.asSortedArray = function () {
var _this = this;
return FACE_EXPRESSION_LABELS
.map(function (expression) { return ({ expression: expression, probability: _this[expression] }); })
.sort(function (e0, e1) { return e1.probability - e0.probability; });
};
return FaceExpressions;
}());
export { FaceExpressions };
//# sourceMappingURL=FaceExpressions.js.map
\ No newline at end of file
{"version":3,"file":"FaceExpressions.js","sourceRoot":"","sources":["../../../src/faceExpressionNet/FaceExpressions.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,IAAM,sBAAsB,GAAG,CAAC,SAAS,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,WAAW,CAAC,CAAA;AAE/G;IASE,yBAAY,aAAsC;QAAlD,iBAQC;QAPC,IAAI,aAAa,CAAC,MAAM,KAAK,CAAC,EAAE;YAC9B,MAAM,IAAI,KAAK,CAAC,gFAA8E,aAAa,CAAC,MAAQ,CAAC,CAAA;SACtH;QAED,sBAAsB,CAAC,OAAO,CAAC,UAAC,UAAU,EAAE,GAAG;YAC7C,KAAI,CAAC,UAAU,CAAC,GAAG,aAAa,CAAC,GAAG,CAAC,CAAA;QACvC,CAAC,CAAC,CAAA;IACJ,CAAC;IAED,uCAAa,GAAb;QAAA,iBAIC;QAHC,OAAO,sBAAsB;aAC1B,GAAG,CAAC,UAAA,UAAU,IAAI,OAAA,CAAC,EAAE,UAAU,YAAA,EAAE,WAAW,EAAE,KAAI,CAAC,UAAU,CAAW,EAAE,CAAC,EAAzD,CAAyD,CAAC;aAC5E,IAAI,CAAC,UAAC,EAAE,EAAE,EAAE,IAAK,OAAA,EAAE,CAAC,WAAW,GAAG,EAAE,CAAC,WAAW,EAA/B,CAA+B,CAAC,CAAA;IACtD,CAAC;IACH,sBAAC;AAAD,CAAC,AAxBD,IAwBC"}
\ No newline at end of file
export * from './FaceExpressionNet';
export * from './types';
export * from './FaceExpressions';
export * from './FaceExpressionNet';
export * from './types';
export * from './FaceExpressions';
//# sourceMappingURL=index.js.map
\ No newline at end of file
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/faceExpressionNet/index.ts"],"names":[],"mappings":"AAAA,cAAc,qBAAqB,CAAC;AACpC,cAAc,SAAS,CAAC"}
\ No newline at end of file
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/faceExpressionNet/index.ts"],"names":[],"mappings":"AAAA,cAAc,qBAAqB,CAAC;AACpC,cAAc,mBAAmB,CAAC"}
\ No newline at end of file
export var faceExpressionLabels = {
neutral: 0,
happy: 1,
sad: 2,
angry: 3,
fearful: 4,
disgusted: 5,
surprised: 6
};
//# sourceMappingURL=types.js.map
\ No newline at end of file
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/faceExpressionNet/types.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,IAAM,oBAAoB,GAAG;IAClC,OAAO,EAAE,CAAC;IACV,KAAK,EAAE,CAAC;IACR,GAAG,EAAE,CAAC;IACN,KAAK,EAAE,CAAC;IACR,OAAO,EAAE,CAAC;IACV,SAAS,EAAE,CAAC;IACZ,SAAS,EAAC,CAAC;CACZ,CAAA"}
\ No newline at end of file
import * as tf from '@tensorflow/tfjs-core';
import { depthwiseSeparableConv } from './depthwiseSeparableConv';
import { depthwiseSeparableConv } from '../common/depthwiseSeparableConv';
export function denseBlock3(x, denseBlockParams, isFirstLayer) {
if (isFirstLayer === void 0) { isFirstLayer = false; }
return tf.tidy(function () {
......
{"version":3,"file":"denseBlock.js","sourceRoot":"","sources":["../../../src/faceFeatureExtractor/denseBlock.ts"],"names":[],"mappings":"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"}
\ No newline at end of file
{"version":3,"file":"denseBlock.js","sourceRoot":"","sources":["../../../src/faceFeatureExtractor/denseBlock.ts"],"names":[],"mappings":"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"}
\ No newline at end of file
{"version":3,"file":"depthwiseSeparableConv.js","sourceRoot":"","sources":["../../../src/faceFeatureExtractor/depthwiseSeparableConv.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,uBAAuB,CAAC;AAG5C,MAAM,UAAU,sBAAsB,CACpC,CAAc,EACd,MAAoD,EACpD,MAAwB;IAExB,OAAO,EAAE,CAAC,IAAI,CAAC;QACb,IAAI,GAAG,GAAG,EAAE,CAAC,eAAe,CAAC,CAAC,EAAE,MAAM,CAAC,gBAAgB,EAAE,MAAM,CAAC,gBAAgB,EAAE,MAAM,EAAE,MAAM,CAAC,CAAA;QACjG,GAAG,GAAG,EAAE,CAAC,GAAG,CAAC,GAAG,EAAE,MAAM,CAAC,IAAI,CAAC,CAAA;QAC9B,OAAO,GAAG,CAAA;IACZ,CAAC,CAAC,CAAA;AACJ,CAAC"}
\ No newline at end of file
import * as tf from '@tensorflow/tfjs-core';
import { TfjsImageRecognitionBase } from 'tfjs-image-recognition-base';
export function extractorsFactory(extractWeights, paramMappings) {
function extractSeparableConvParams(channelsIn, channelsOut, mappedPrefix) {
var depthwise_filter = tf.tensor4d(extractWeights(3 * 3 * channelsIn), [3, 3, channelsIn, 1]);
var pointwise_filter = tf.tensor4d(extractWeights(channelsIn * channelsOut), [1, 1, channelsIn, channelsOut]);
var bias = tf.tensor1d(extractWeights(channelsOut));
paramMappings.push({ paramPath: mappedPrefix + "/depthwise_filter" }, { paramPath: mappedPrefix + "/pointwise_filter" }, { paramPath: mappedPrefix + "/bias" });
return new TfjsImageRecognitionBase.SeparableConvParams(depthwise_filter, pointwise_filter, bias);
}
var extractConvParams = TfjsImageRecognitionBase.extractConvParamsFactory(extractWeights, paramMappings);
var extractSeparableConvParams = TfjsImageRecognitionBase.extractSeparableConvParamsFactory(extractWeights, paramMappings);
function extractDenseBlock3Params(channelsIn, channelsOut, mappedPrefix, isFirstLayer) {
if (isFirstLayer === void 0) { isFirstLayer = false; }
var conv0 = isFirstLayer
......
{"version":3,"file":"extractorsFactory.js","sourceRoot":"","sources":["../../../src/faceFeatureExtractor/extractorsFactory.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,uBAAuB,CAAC;AAC5C,OAAO,EAAE,wBAAwB,EAAE,MAAM,6BAA6B,CAAC;AAIvE,MAAM,UAAU,iBAAiB,CAAC,cAA+D,EAAE,aAAsD;IAEvJ,SAAS,0BAA0B,CAAC,UAAkB,EAAE,WAAmB,EAAE,YAAoB;QAC/F,IAAM,gBAAgB,GAAG,EAAE,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAC,GAAG,CAAC,GAAG,UAAU,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,UAAU,EAAE,CAAC,CAAC,CAAC,CAAA;QAC/F,IAAM,gBAAgB,GAAG,EAAE,CAAC,QAAQ,CAAC,cAAc,CAAC,UAAU,GAAG,WAAW,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,UAAU,EAAE,WAAW,CAAC,CAAC,CAAA;QAC/G,IAAM,IAAI,GAAG,EAAE,CAAC,QAAQ,CAAC,cAAc,CAAC,WAAW,CAAC,CAAC,CAAA;QAErD,aAAa,CAAC,IAAI,CAChB,EAAE,SAAS,EAAK,YAAY,sBAAmB,EAAE,EACjD,EAAE,SAAS,EAAK,YAAY,sBAAmB,EAAE,EACjD,EAAE,SAAS,EAAK,YAAY,UAAO,EAAE,CACtC,CAAA;QAED,OAAO,IAAI,wBAAwB,CAAC,mBAAmB,CACrD,gBAAgB,EAChB,gBAAgB,EAChB,IAAI,CACL,CAAA;IACH,CAAC;IAED,IAAM,iBAAiB,GAAG,wBAAwB,CAAC,wBAAwB,CAAC,cAAc,EAAE,aAAa,CAAC,CAAA;IAE1G,SAAS,wBAAwB,CAAC,UAAkB,EAAE,WAAmB,EAAE,YAAoB,EAAE,YAA6B;QAA7B,6BAAA,EAAA,oBAA6B;QAE5H,IAAM,KAAK,GAAG,YAAY;YACxB,CAAC,CAAC,iBAAiB,CAAC,UAAU,EAAE,WAAW,EAAE,CAAC,EAAK,YAAY,WAAQ,CAAC;YACxE,CAAC,CAAC,0BAA0B,CAAC,UAAU,EAAE,WAAW,EAAK,YAAY,WAAQ,CAAC,CAAA;QAChF,IAAM,KAAK,GAAG,0BAA0B,CAAC,WAAW,EAAE,WAAW,EAAK,YAAY,WAAQ,CAAC,CAAA;QAC3F,IAAM,KAAK,GAAG,0BAA0B,CAAC,WAAW,EAAE,WAAW,EAAK,YAAY,WAAQ,CAAC,CAAA;QAE3F,OAAO,EAAE,KAAK,OAAA,EAAE,KAAK,OAAA,EAAE,KAAK,OAAA,EAAE,CAAA;IAChC,CAAC;IAED,SAAS,wBAAwB,CAAC,UAAkB,EAAE,WAAmB,EAAE,YAAoB,EAAE,YAA6B;QAA7B,6BAAA,EAAA,oBAA6B;QAEtH,IAAA,kFAAuG,EAArG,gBAAK,EAAE,gBAAK,EAAE,gBAAuF,CAAA;QAC7G,IAAM,KAAK,GAAG,0BAA0B,CAAC,WAAW,EAAE,WAAW,EAAK,YAAY,WAAQ,CAAC,CAAA;QAE3F,OAAO,EAAE,KAAK,OAAA,EAAE,KAAK,OAAA,EAAE,KAAK,OAAA,EAAE,KAAK,OAAA,EAAE,CAAA;IACvC,CAAC;IAED,OAAO;QACL,wBAAwB,0BAAA;QACxB,wBAAwB,0BAAA;KACzB,CAAA;AAEH,CAAC"}
\ No newline at end of file
{"version":3,"file":"extractorsFactory.js","sourceRoot":"","sources":["../../../src/faceFeatureExtractor/extractorsFactory.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,wBAAwB,EAAE,MAAM,6BAA6B,CAAC;AAIvE,MAAM,UAAU,iBAAiB,CAAC,cAA+D,EAAE,aAAsD;IAEvJ,IAAM,iBAAiB,GAAG,wBAAwB,CAAC,wBAAwB,CAAC,cAAc,EAAE,aAAa,CAAC,CAAA;IAC1G,IAAM,0BAA0B,GAAG,wBAAwB,CAAC,iCAAiC,CAAC,cAAc,EAAE,aAAa,CAAC,CAAA;IAE5H,SAAS,wBAAwB,CAAC,UAAkB,EAAE,WAAmB,EAAE,YAAoB,EAAE,YAA6B;QAA7B,6BAAA,EAAA,oBAA6B;QAE5H,IAAM,KAAK,GAAG,YAAY;YACxB,CAAC,CAAC,iBAAiB,CAAC,UAAU,EAAE,WAAW,EAAE,CAAC,EAAK,YAAY,WAAQ,CAAC;YACxE,CAAC,CAAC,0BAA0B,CAAC,UAAU,EAAE,WAAW,EAAK,YAAY,WAAQ,CAAC,CAAA;QAChF,IAAM,KAAK,GAAG,0BAA0B,CAAC,WAAW,EAAE,WAAW,EAAK,YAAY,WAAQ,CAAC,CAAA;QAC3F,IAAM,KAAK,GAAG,0BAA0B,CAAC,WAAW,EAAE,WAAW,EAAK,YAAY,WAAQ,CAAC,CAAA;QAE3F,OAAO,EAAE,KAAK,OAAA,EAAE,KAAK,OAAA,EAAE,KAAK,OAAA,EAAE,CAAA;IAChC,CAAC;IAED,SAAS,wBAAwB,CAAC,UAAkB,EAAE,WAAmB,EAAE,YAAoB,EAAE,YAA6B;QAA7B,6BAAA,EAAA,oBAA6B;QAEtH,IAAA,kFAAuG,EAArG,gBAAK,EAAE,gBAAK,EAAE,gBAAuF,CAAA;QAC7G,IAAM,KAAK,GAAG,0BAA0B,CAAC,WAAW,EAAE,WAAW,EAAK,YAAY,WAAQ,CAAC,CAAA;QAE3F,OAAO,EAAE,KAAK,OAAA,EAAE,KAAK,OAAA,EAAE,KAAK,OAAA,EAAE,KAAK,OAAA,EAAE,CAAA;IACvC,CAAC;IAED,OAAO;QACL,wBAAwB,0BAAA;QACxB,wBAAwB,0BAAA;KACzB,CAAA;AAEH,CAAC"}
\ No newline at end of file
import { TfjsImageRecognitionBase } from 'tfjs-image-recognition-base';
import { loadConvParamsFactory } from '../common/loadConvParamsFactory';
export function loadParamsFactory(weightMap, paramMappings) {
var extractWeightEntry = TfjsImageRecognitionBase.extractWeightEntryFactory(weightMap, paramMappings);
function extractConvParams(prefix) {
var filters = extractWeightEntry(prefix + "/filters", 4);
var bias = extractWeightEntry(prefix + "/bias", 1);
return { filters: filters, bias: bias };
}
function extractSeparableConvParams(prefix) {
var depthwise_filter = extractWeightEntry(prefix + "/depthwise_filter", 4);
var pointwise_filter = extractWeightEntry(prefix + "/pointwise_filter", 4);
var bias = extractWeightEntry(prefix + "/bias", 1);
return new TfjsImageRecognitionBase.SeparableConvParams(depthwise_filter, pointwise_filter, bias);
}
var extractConvParams = loadConvParamsFactory(extractWeightEntry);
var extractSeparableConvParams = TfjsImageRecognitionBase.loadSeparableConvParamsFactory(extractWeightEntry);
function extractDenseBlock3Params(prefix, isFirstLayer) {
if (isFirstLayer === void 0) { isFirstLayer = false; }
var conv0 = isFirstLayer
......
{"version":3,"file":"loadParamsFactory.js","sourceRoot":"","sources":["../../../src/faceFeatureExtractor/loadParamsFactory.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,wBAAwB,EAAE,MAAM,6BAA6B,CAAC;AAIvE,MAAM,UAAU,iBAAiB,CAAC,SAAc,EAAE,aAAsD;IAEtG,IAAM,kBAAkB,GAAG,wBAAwB,CAAC,yBAAyB,CAAC,SAAS,EAAE,aAAa,CAAC,CAAA;IAEvG,SAAS,iBAAiB,CAAC,MAAc;QACvC,IAAM,OAAO,GAAG,kBAAkB,CAAiB,MAAM,aAAU,EAAE,CAAC,CAAC,CAAA;QACvE,IAAM,IAAI,GAAG,kBAAkB,CAAiB,MAAM,UAAO,EAAE,CAAC,CAAC,CAAA;QAEjE,OAAO,EAAE,OAAO,SAAA,EAAE,IAAI,MAAA,EAAE,CAAA;IAC1B,CAAC;IAED,SAAS,0BAA0B,CAAC,MAAc;QAChD,IAAM,gBAAgB,GAAG,kBAAkB,CAAiB,MAAM,sBAAmB,EAAE,CAAC,CAAC,CAAA;QACzF,IAAM,gBAAgB,GAAG,kBAAkB,CAAiB,MAAM,sBAAmB,EAAE,CAAC,CAAC,CAAA;QACzF,IAAM,IAAI,GAAG,kBAAkB,CAAiB,MAAM,UAAO,EAAE,CAAC,CAAC,CAAA;QAEjE,OAAO,IAAI,wBAAwB,CAAC,mBAAmB,CACrD,gBAAgB,EAChB,gBAAgB,EAChB,IAAI,CACL,CAAA;IACH,CAAC;IAED,SAAS,wBAAwB,CAAC,MAAc,EAAE,YAA6B;QAA7B,6BAAA,EAAA,oBAA6B;QAC7E,IAAM,KAAK,GAAG,YAAY;YACxB,CAAC,CAAC,iBAAiB,CAAI,MAAM,WAAQ,CAAC;YACtC,CAAC,CAAC,0BAA0B,CAAI,MAAM,WAAQ,CAAC,CAAA;QACjD,IAAM,KAAK,GAAG,0BAA0B,CAAI,MAAM,WAAQ,CAAC,CAAA;QAC3D,IAAM,KAAK,GAAG,0BAA0B,CAAI,MAAM,WAAQ,CAAC,CAAA;QAE3D,OAAO,EAAE,KAAK,OAAA,EAAE,KAAK,OAAA,EAAE,KAAK,OAAA,EAAE,CAAA;IAChC,CAAC;IAED,SAAS,wBAAwB,CAAC,MAAc,EAAE,YAA6B;QAA7B,6BAAA,EAAA,oBAA6B;QAC7E,IAAM,KAAK,GAAG,YAAY;YACxB,CAAC,CAAC,iBAAiB,CAAI,MAAM,WAAQ,CAAC;YACtC,CAAC,CAAC,0BAA0B,CAAI,MAAM,WAAQ,CAAC,CAAA;QACjD,IAAM,KAAK,GAAG,0BAA0B,CAAI,MAAM,WAAQ,CAAC,CAAA;QAC3D,IAAM,KAAK,GAAG,0BAA0B,CAAI,MAAM,WAAQ,CAAC,CAAA;QAC3D,IAAM,KAAK,GAAG,0BAA0B,CAAI,MAAM,WAAQ,CAAC,CAAA;QAE3D,OAAO,EAAE,KAAK,OAAA,EAAE,KAAK,OAAA,EAAE,KAAK,OAAA,EAAE,KAAK,OAAA,EAAE,CAAA;IACvC,CAAC;IAED,OAAO;QACL,wBAAwB,0BAAA;QACxB,wBAAwB,0BAAA;KACzB,CAAA;AACH,CAAC"}
\ No newline at end of file
{"version":3,"file":"loadParamsFactory.js","sourceRoot":"","sources":["../../../src/faceFeatureExtractor/loadParamsFactory.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,wBAAwB,EAAE,MAAM,6BAA6B,CAAC;AAEvE,OAAO,EAAE,qBAAqB,EAAE,MAAM,iCAAiC,CAAC;AAGxE,MAAM,UAAU,iBAAiB,CAAC,SAAc,EAAE,aAAsD;IAEtG,IAAM,kBAAkB,GAAG,wBAAwB,CAAC,yBAAyB,CAAC,SAAS,EAAE,aAAa,CAAC,CAAA;IAEvG,IAAM,iBAAiB,GAAG,qBAAqB,CAAC,kBAAkB,CAAC,CAAA;IACnE,IAAM,0BAA0B,GAAG,wBAAwB,CAAC,8BAA8B,CAAC,kBAAkB,CAAC,CAAA;IAE9G,SAAS,wBAAwB,CAAC,MAAc,EAAE,YAA6B;QAA7B,6BAAA,EAAA,oBAA6B;QAC7E,IAAM,KAAK,GAAG,YAAY;YACxB,CAAC,CAAC,iBAAiB,CAAI,MAAM,WAAQ,CAAC;YACtC,CAAC,CAAC,0BAA0B,CAAI,MAAM,WAAQ,CAAC,CAAA;QACjD,IAAM,KAAK,GAAG,0BAA0B,CAAI,MAAM,WAAQ,CAAC,CAAA;QAC3D,IAAM,KAAK,GAAG,0BAA0B,CAAI,MAAM,WAAQ,CAAC,CAAA;QAE3D,OAAO,EAAE,KAAK,OAAA,EAAE,KAAK,OAAA,EAAE,KAAK,OAAA,EAAE,CAAA;IAChC,CAAC;IAED,SAAS,wBAAwB,CAAC,MAAc,EAAE,YAA6B;QAA7B,6BAAA,EAAA,oBAA6B;QAC7E,IAAM,KAAK,GAAG,YAAY;YACxB,CAAC,CAAC,iBAAiB,CAAI,MAAM,WAAQ,CAAC;YACtC,CAAC,CAAC,0BAA0B,CAAI,MAAM,WAAQ,CAAC,CAAA;QACjD,IAAM,KAAK,GAAG,0BAA0B,CAAI,MAAM,WAAQ,CAAC,CAAA;QAC3D,IAAM,KAAK,GAAG,0BAA0B,CAAI,MAAM,WAAQ,CAAC,CAAA;QAC3D,IAAM,KAAK,GAAG,0BAA0B,CAAI,MAAM,WAAQ,CAAC,CAAA;QAE3D,OAAO,EAAE,KAAK,OAAA,EAAE,KAAK,OAAA,EAAE,KAAK,OAAA,EAAE,KAAK,OAAA,EAAE,CAAA;IACvC,CAAC;IAED,OAAO;QACL,wBAAwB,0BAAA;QACxB,wBAAwB,0BAAA;KACzB,CAAA;AACH,CAAC"}
\ No newline at end of file
export declare type WithAge<TSource> = TSource & {
age: number;
};
export declare function isWithAge(obj: any): obj is WithAge<{}>;
export declare function extendWithAge<TSource>(sourceObj: TSource, age: number): WithAge<TSource>;
export function isWithAge(obj) {
return typeof obj['age'] === 'number';
}
export function extendWithAge(sourceObj, age) {
var extension = { age: age };
return Object.assign({}, sourceObj, extension);
}
//# sourceMappingURL=WithAge.js.map
\ No newline at end of file
{"version":3,"file":"WithAge.js","sourceRoot":"","sources":["../../../src/factories/WithAge.ts"],"names":[],"mappings":"AAIA,MAAM,UAAU,SAAS,CAAC,GAAQ;IAChC,OAAO,OAAO,GAAG,CAAC,KAAK,CAAC,KAAK,QAAQ,CAAA;AACvC,CAAC;AAED,MAAM,UAAU,aAAa,CAG3B,SAAkB,EAClB,GAAW;IAGX,IAAM,SAAS,GAAG,EAAE,GAAG,KAAA,EAAE,CAAA;IACzB,OAAO,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,SAAS,EAAE,SAAS,CAAC,CAAA;AAChD,CAAC"}
\ No newline at end of file
......@@ -2,4 +2,5 @@ import { FaceDetection } from '../classes/FaceDetection';
export declare type WithFaceDetection<TSource> = TSource & {
detection: FaceDetection;
};
export declare function isWithFaceDetection(obj: any): obj is WithFaceDetection<{}>;
export declare function extendWithFaceDetection<TSource>(sourceObj: TSource, detection: FaceDetection): WithFaceDetection<TSource>;
import { FaceDetection } from '../classes/FaceDetection';
export function isWithFaceDetection(obj) {
return obj['detection'] instanceof FaceDetection;
}
export function extendWithFaceDetection(sourceObj, detection) {
var extension = { detection: detection };
return Object.assign({}, sourceObj, extension);
......
{"version":3,"file":"WithFaceDetection.js","sourceRoot":"","sources":["../../../src/factories/WithFaceDetection.ts"],"names":[],"mappings":"AAMA,MAAM,UAAU,uBAAuB,CAGrC,SAAkB,EAClB,SAAwB;IAGxB,IAAM,SAAS,GAAG,EAAE,SAAS,WAAA,EAAE,CAAA;IAC/B,OAAO,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,SAAS,EAAE,SAAS,CAAC,CAAA;AAChD,CAAC"}
\ No newline at end of file
{"version":3,"file":"WithFaceDetection.js","sourceRoot":"","sources":["../../../src/factories/WithFaceDetection.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAMzD,MAAM,UAAU,mBAAmB,CAAC,GAAQ;IAC1C,OAAO,GAAG,CAAC,WAAW,CAAC,YAAY,aAAa,CAAA;AAClD,CAAC;AAED,MAAM,UAAU,uBAAuB,CAGrC,SAAkB,EAClB,SAAwB;IAGxB,IAAM,SAAS,GAAG,EAAE,SAAS,WAAA,EAAE,CAAA;IAC/B,OAAO,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,SAAS,EAAE,SAAS,CAAC,CAAA;AAChD,CAAC"}
\ No newline at end of file
import { FaceExpressionPrediction } from '../faceExpressionNet/types';
import { FaceExpressions } from '../faceExpressionNet/FaceExpressions';
export declare type WithFaceExpressions<TSource> = TSource & {
expressions: FaceExpressionPrediction[];
expressions: FaceExpressions;
};
export declare function extendWithFaceExpressions<TSource>(sourceObj: TSource, expressions: FaceExpressionPrediction[]): WithFaceExpressions<TSource>;
export declare function isWithFaceExpressions(obj: any): obj is WithFaceExpressions<{}>;
export declare function extendWithFaceExpressions<TSource>(sourceObj: TSource, expressions: FaceExpressions): WithFaceExpressions<TSource>;
import { FaceExpressions } from '../faceExpressionNet/FaceExpressions';
export function isWithFaceExpressions(obj) {
return obj['expressions'] instanceof FaceExpressions;
}
export function extendWithFaceExpressions(sourceObj, expressions) {
var extension = { expressions: expressions };
return Object.assign({}, sourceObj, extension);
......
{"version":3,"file":"WithFaceExpressions.js","sourceRoot":"","sources":["../../../src/factories/WithFaceExpressions.ts"],"names":[],"mappings":"AAMA,MAAM,UAAU,yBAAyB,CAGvC,SAAkB,EAClB,WAAuC;IAGvC,IAAM,SAAS,GAAG,EAAE,WAAW,aAAA,EAAE,CAAA;IACjC,OAAO,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,SAAS,EAAE,SAAS,CAAC,CAAA;AAChD,CAAC"}
\ No newline at end of file
{"version":3,"file":"WithFaceExpressions.js","sourceRoot":"","sources":["../../../src/factories/WithFaceExpressions.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,sCAAsC,CAAC;AAMvE,MAAM,UAAU,qBAAqB,CAAC,GAAQ;IAC5C,OAAO,GAAG,CAAC,aAAa,CAAC,YAAY,eAAe,CAAA;AACtD,CAAC;AAED,MAAM,UAAU,yBAAyB,CAGvC,SAAkB,EAClB,WAA4B;IAG5B,IAAM,SAAS,GAAG,EAAE,WAAW,aAAA,EAAE,CAAA;IACjC,OAAO,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,SAAS,EAAE,SAAS,CAAC,CAAA;AAChD,CAAC"}
\ No newline at end of file
......@@ -7,4 +7,5 @@ export declare type WithFaceLandmarks<TSource extends WithFaceDetection<{}>, TFa
unshiftedLandmarks: TFaceLandmarks;
alignedRect: FaceDetection;
};
export declare function isWithFaceLandmarks(obj: any): obj is WithFaceLandmarks<WithFaceDetection<{}>, FaceLandmarks>;
export declare function extendWithFaceLandmarks<TSource extends WithFaceDetection<{}>, TFaceLandmarks extends FaceLandmarks = FaceLandmarks68>(sourceObj: TSource, unshiftedLandmarks: TFaceLandmarks): WithFaceLandmarks<TSource, TFaceLandmarks>;
import { FaceDetection } from '../classes/FaceDetection';
import { FaceLandmarks } from '../classes/FaceLandmarks';
import { isWithFaceDetection } from './WithFaceDetection';
export function isWithFaceLandmarks(obj) {
return isWithFaceDetection(obj)
&& obj['landmarks'] instanceof FaceLandmarks
&& obj['unshiftedLandmarks'] instanceof FaceLandmarks
&& obj['alignedRect'] instanceof FaceDetection;
}
export function extendWithFaceLandmarks(sourceObj, unshiftedLandmarks) {
var shift = sourceObj.detection.box;
var landmarks = unshiftedLandmarks.shiftBy(shift.x, shift.y);
......
{"version":3,"file":"WithFaceLandmarks.js","sourceRoot":"","sources":["../../../src/factories/WithFaceLandmarks.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAczD,MAAM,UAAU,uBAAuB,CAIrC,SAAkB,EAClB,kBAAkC;IAG1B,IAAA,+BAAU,CAAwB;IAC1C,IAAM,SAAS,GAAG,kBAAkB,CAAC,OAAO,CAAiB,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,CAAA;IAE9E,IAAM,IAAI,GAAG,SAAS,CAAC,KAAK,EAAE,CAAA;IACtB,IAAA,yCAAS,CAAwB;IACzC,IAAM,WAAW,GAAG,IAAI,aAAa,CAAC,SAAS,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,OAAO,EAAE,CAAC,EAAE,SAAS,CAAC,CAAA;IAE9G,IAAM,SAAS,GAAG;QAChB,SAAS,WAAA;QACT,kBAAkB,oBAAA;QAClB,WAAW,aAAA;KACZ,CAAA;IAED,OAAO,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,SAAS,EAAE,SAAS,CAAC,CAAA;AAChD,CAAC"}
\ No newline at end of file
{"version":3,"file":"WithFaceLandmarks.js","sourceRoot":"","sources":["../../../src/factories/WithFaceLandmarks.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AACzD,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAEzD,OAAO,EAAE,mBAAmB,EAAqB,MAAM,qBAAqB,CAAC;AAW7E,MAAM,UAAU,mBAAmB,CAAC,GAAQ;IAC1C,OAAO,mBAAmB,CAAC,GAAG,CAAC;WAC1B,GAAG,CAAC,WAAW,CAAC,YAAY,aAAa;WACzC,GAAG,CAAC,oBAAoB,CAAC,YAAY,aAAa;WAClD,GAAG,CAAC,aAAa,CAAC,YAAY,aAAa,CAAA;AAClD,CAAC;AAED,MAAM,UAAU,uBAAuB,CAIrC,SAAkB,EAClB,kBAAkC;IAG1B,IAAA,+BAAU,CAAwB;IAC1C,IAAM,SAAS,GAAG,kBAAkB,CAAC,OAAO,CAAiB,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,CAAA;IAE9E,IAAM,IAAI,GAAG,SAAS,CAAC,KAAK,EAAE,CAAA;IACtB,IAAA,yCAAS,CAAwB;IACzC,IAAM,WAAW,GAAG,IAAI,aAAa,CAAC,SAAS,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,OAAO,EAAE,CAAC,EAAE,SAAS,CAAC,CAAA;IAE9G,IAAM,SAAS,GAAG;QAChB,SAAS,WAAA;QACT,kBAAkB,oBAAA;QAClB,WAAW,aAAA;KACZ,CAAA;IAED,OAAO,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,SAAS,EAAE,SAAS,CAAC,CAAA;AAChD,CAAC"}
\ No newline at end of file
import { Gender } from '../ageGenderNet/types';
export declare type WithGender<TSource> = TSource & {
gender: Gender;
genderProbability: number;
};
export declare function isWithGender(obj: any): obj is WithGender<{}>;
export declare function extendWithGender<TSource>(sourceObj: TSource, gender: Gender, genderProbability: number): WithGender<TSource>;
import { isValidProbablitiy } from 'tfjs-image-recognition-base';
import { Gender } from '../ageGenderNet/types';
export function isWithGender(obj) {
return (obj['gender'] === Gender.MALE || obj['gender'] === Gender.FEMALE)
&& isValidProbablitiy(obj['genderProbability']);
}
export function extendWithGender(sourceObj, gender, genderProbability) {
var extension = { gender: gender, genderProbability: genderProbability };
return Object.assign({}, sourceObj, extension);
}
//# sourceMappingURL=WithGender.js.map
\ No newline at end of file
{"version":3,"file":"WithGender.js","sourceRoot":"","sources":["../../../src/factories/WithGender.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,6BAA6B,CAAC;AAEjE,OAAO,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AAO/C,MAAM,UAAU,YAAY,CAAC,GAAQ;IACnC,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,KAAK,MAAM,CAAC,IAAI,IAAI,GAAG,CAAC,QAAQ,CAAC,KAAK,MAAM,CAAC,MAAM,CAAC;WACpE,kBAAkB,CAAC,GAAG,CAAC,mBAAmB,CAAC,CAAC,CAAA;AACnD,CAAC;AAED,MAAM,UAAU,gBAAgB,CAG9B,SAAkB,EAClB,MAAc,EACd,iBAAyB;IAGzB,IAAM,SAAS,GAAG,EAAE,MAAM,QAAA,EAAE,iBAAiB,mBAAA,EAAE,CAAA;IAC/C,OAAO,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,SAAS,EAAE,SAAS,CAAC,CAAA;AAChD,CAAC"}
\ No newline at end of file
......@@ -3,6 +3,8 @@ import { WithFaceDescriptor } from '../factories/WithFaceDescriptor';
import { WithFaceDetection } from '../factories/WithFaceDetection';
import { WithFaceLandmarks } from '../factories/WithFaceLandmarks';
import { ComposableTask } from './ComposableTask';
import { PredictAllAgeAndGenderWithFaceAlignmentTask, PredictSingleAgeAndGenderWithFaceAlignmentTask } from './PredictAgeAndGenderTask';
import { PredictAllFaceExpressionsWithFaceAlignmentTask, PredictSingleFaceExpressionsWithFaceAlignmentTask } from './PredictFaceExpressionsTask';
export declare class ComputeFaceDescriptorsTaskBase<TReturn, TParentReturn> extends ComposableTask<TReturn> {
protected parentTask: ComposableTask<TParentReturn> | Promise<TParentReturn>;
protected input: TNetInput;
......@@ -10,7 +12,11 @@ export declare class ComputeFaceDescriptorsTaskBase<TReturn, TParentReturn> exte
}
export declare class ComputeAllFaceDescriptorsTask<TSource extends WithFaceLandmarks<WithFaceDetection<{}>>> extends ComputeFaceDescriptorsTaskBase<WithFaceDescriptor<TSource>[], TSource[]> {
run(): Promise<WithFaceDescriptor<TSource>[]>;
withFaceExpressions(): PredictAllFaceExpressionsWithFaceAlignmentTask<WithFaceDescriptor<TSource>>;
withAgeAndGender(): PredictAllAgeAndGenderWithFaceAlignmentTask<WithFaceDescriptor<TSource>>;
}
export declare class ComputeSingleFaceDescriptorTask<TSource extends WithFaceLandmarks<WithFaceDetection<{}>>> extends ComputeFaceDescriptorsTaskBase<WithFaceDescriptor<TSource> | undefined, TSource | undefined> {
run(): Promise<WithFaceDescriptor<TSource> | undefined>;
withFaceExpressions(): PredictSingleFaceExpressionsWithFaceAlignmentTask<WithFaceDescriptor<TSource>>;
withAgeAndGender(): PredictSingleAgeAndGenderWithFaceAlignmentTask<WithFaceDescriptor<TSource>>;
}
import * as tslib_1 from "tslib";
import * as tf from '@tensorflow/tfjs-core';
import { extractFaces, extractFaceTensors } from '../dom';
import { extendWithFaceDescriptor } from '../factories/WithFaceDescriptor';
import { ComposableTask } from './ComposableTask';
import { extractAllFacesAndComputeResults, extractSingleFaceAndComputeResult } from './extractFacesAndComputeResults';
import { nets } from './nets';
import { PredictAllAgeAndGenderWithFaceAlignmentTask, PredictSingleAgeAndGenderWithFaceAlignmentTask, } from './PredictAgeAndGenderTask';
import { PredictAllFaceExpressionsWithFaceAlignmentTask, PredictSingleFaceExpressionsWithFaceAlignmentTask, } from './PredictFaceExpressionsTask';
var ComputeFaceDescriptorsTaskBase = /** @class */ (function (_super) {
tslib_1.__extends(ComputeFaceDescriptorsTaskBase, _super);
function ComputeFaceDescriptorsTaskBase(parentTask, input) {
......@@ -22,47 +23,28 @@ var ComputeAllFaceDescriptorsTask = /** @class */ (function (_super) {
}
ComputeAllFaceDescriptorsTask.prototype.run = function () {
return tslib_1.__awaiter(this, void 0, void 0, function () {
var parentResults, alignedRects, alignedFaces, _a, results;
var _this = this;
return tslib_1.__generator(this, function (_b) {
switch (_b.label) {
var parentResults, descriptors;
return tslib_1.__generator(this, function (_a) {
switch (_a.label) {
case 0: return [4 /*yield*/, this.parentTask];
case 1:
parentResults = _b.sent();
alignedRects = parentResults.map(function (_a) {
var alignedRect = _a.alignedRect;
return alignedRect;
});
if (!(this.input instanceof tf.Tensor)) return [3 /*break*/, 3];
return [4 /*yield*/, extractFaceTensors(this.input, alignedRects)];
parentResults = _a.sent();
return [4 /*yield*/, extractAllFacesAndComputeResults(parentResults, this.input, function (faces) { return Promise.all(faces.map(function (face) {
return nets.faceRecognitionNet.computeFaceDescriptor(face);
})); }, null, function (parentResult) { return parentResult.landmarks.align(null, { useDlibAlignment: true }); })];
case 2:
_a = _b.sent();
return [3 /*break*/, 5];
case 3: return [4 /*yield*/, extractFaces(this.input, alignedRects)];
case 4:
_a = _b.sent();
_b.label = 5;
case 5:
alignedFaces = _a;
return [4 /*yield*/, Promise.all(parentResults.map(function (parentResult, i) { return tslib_1.__awaiter(_this, void 0, void 0, function () {
var descriptor;
return tslib_1.__generator(this, function (_a) {
switch (_a.label) {
case 0: return [4 /*yield*/, nets.faceRecognitionNet.computeFaceDescriptor(alignedFaces[i])];
case 1:
descriptor = _a.sent();
return [2 /*return*/, extendWithFaceDescriptor(parentResult, descriptor)];
}
});
}); }))];
case 6:
results = _b.sent();
alignedFaces.forEach(function (f) { return f instanceof tf.Tensor && f.dispose(); });
return [2 /*return*/, results];
descriptors = _a.sent();
return [2 /*return*/, descriptors.map(function (descriptor, i) { return extendWithFaceDescriptor(parentResults[i], descriptor); })];
}
});
});
};
ComputeAllFaceDescriptorsTask.prototype.withFaceExpressions = function () {
return new PredictAllFaceExpressionsWithFaceAlignmentTask(this, this.input);
};
ComputeAllFaceDescriptorsTask.prototype.withAgeAndGender = function () {
return new PredictAllAgeAndGenderWithFaceAlignmentTask(this, this.input);
};
return ComputeAllFaceDescriptorsTask;
}(ComputeFaceDescriptorsTaskBase));
export { ComputeAllFaceDescriptorsTask };
......@@ -73,36 +55,29 @@ var ComputeSingleFaceDescriptorTask = /** @class */ (function (_super) {
}
ComputeSingleFaceDescriptorTask.prototype.run = function () {
return tslib_1.__awaiter(this, void 0, void 0, function () {
var parentResult, alignedRect, alignedFaces, _a, descriptor;
return tslib_1.__generator(this, function (_b) {
switch (_b.label) {
var parentResult, descriptor;
return tslib_1.__generator(this, function (_a) {
switch (_a.label) {
case 0: return [4 /*yield*/, this.parentTask];
case 1:
parentResult = _b.sent();
parentResult = _a.sent();
if (!parentResult) {
return [2 /*return*/];
}
alignedRect = parentResult.alignedRect;
if (!(this.input instanceof tf.Tensor)) return [3 /*break*/, 3];
return [4 /*yield*/, extractFaceTensors(this.input, [alignedRect])];
return [4 /*yield*/, extractSingleFaceAndComputeResult(parentResult, this.input, function (face) { return nets.faceRecognitionNet.computeFaceDescriptor(face); }, null, function (parentResult) { return parentResult.landmarks.align(null, { useDlibAlignment: true }); })];
case 2:
_a = _b.sent();
return [3 /*break*/, 5];
case 3: return [4 /*yield*/, extractFaces(this.input, [alignedRect])];
case 4:
_a = _b.sent();
_b.label = 5;
case 5:
alignedFaces = _a;
return [4 /*yield*/, nets.faceRecognitionNet.computeFaceDescriptor(alignedFaces[0])];
case 6:
descriptor = _b.sent();
alignedFaces.forEach(function (f) { return f instanceof tf.Tensor && f.dispose(); });
descriptor = _a.sent();
return [2 /*return*/, extendWithFaceDescriptor(parentResult, descriptor)];
}
});
});
};
ComputeSingleFaceDescriptorTask.prototype.withFaceExpressions = function () {
return new PredictSingleFaceExpressionsWithFaceAlignmentTask(this, this.input);
};
ComputeSingleFaceDescriptorTask.prototype.withAgeAndGender = function () {
return new PredictSingleAgeAndGenderWithFaceAlignmentTask(this, this.input);
};
return ComputeSingleFaceDescriptorTask;
}(ComputeFaceDescriptorsTaskBase));
export { ComputeSingleFaceDescriptorTask };
......
{"version":3,"file":"ComputeFaceDescriptorsTasks.js","sourceRoot":"","sources":["../../../src/globalApi/ComputeFaceDescriptorsTasks.ts"],"names":[],"mappings":"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"}
\ No newline at end of file
{"version":3,"file":"ComputeFaceDescriptorsTasks.js","sourceRoot":"","sources":["../../../src/globalApi/ComputeFaceDescriptorsTasks.ts"],"names":[],"mappings":"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"}
\ No newline at end of file
import { TNetInput } from 'tfjs-image-recognition-base';
import { FaceLandmarks68 } from '../classes/FaceLandmarks68';
import { FaceLandmark68Net } from '../faceLandmarkNet/FaceLandmark68Net';
import { FaceLandmark68TinyNet } from '../faceLandmarkNet/FaceLandmark68TinyNet';
import { WithFaceDetection } from '../factories/WithFaceDetection';
import { WithFaceLandmarks } from '../factories/WithFaceLandmarks';
import { ComposableTask } from './ComposableTask';
import { ComputeAllFaceDescriptorsTask, ComputeSingleFaceDescriptorTask } from './ComputeFaceDescriptorsTasks';
import { PredictAllAgeAndGenderWithFaceAlignmentTask, PredictSingleAgeAndGenderWithFaceAlignmentTask } from './PredictAgeAndGenderTask';
import { PredictAllFaceExpressionsWithFaceAlignmentTask, PredictSingleFaceExpressionsWithFaceAlignmentTask } from './PredictFaceExpressionsTask';
export declare class DetectFaceLandmarksTaskBase<TReturn, TParentReturn> extends ComposableTask<TReturn> {
protected parentTask: ComposableTask<TParentReturn> | Promise<TParentReturn>;
protected input: TNetInput;
......@@ -14,9 +17,13 @@ export declare class DetectFaceLandmarksTaskBase<TReturn, TParentReturn> extends
}
export declare class DetectAllFaceLandmarksTask<TSource extends WithFaceDetection<{}>> extends DetectFaceLandmarksTaskBase<WithFaceLandmarks<TSource>[], TSource[]> {
run(): Promise<WithFaceLandmarks<TSource>[]>;
withFaceDescriptors(): ComputeAllFaceDescriptorsTask<WithFaceLandmarks<TSource>>;
withFaceExpressions(): PredictAllFaceExpressionsWithFaceAlignmentTask<WithFaceLandmarks<TSource, FaceLandmarks68>>;
withAgeAndGender(): PredictAllAgeAndGenderWithFaceAlignmentTask<WithFaceLandmarks<TSource, FaceLandmarks68>>;
withFaceDescriptors(): ComputeAllFaceDescriptorsTask<WithFaceLandmarks<TSource, FaceLandmarks68>>;
}
export declare class DetectSingleFaceLandmarksTask<TSource extends WithFaceDetection<{}>> extends DetectFaceLandmarksTaskBase<WithFaceLandmarks<TSource> | undefined, TSource | undefined> {
run(): Promise<WithFaceLandmarks<TSource> | undefined>;
withFaceDescriptor(): ComputeSingleFaceDescriptorTask<WithFaceLandmarks<TSource>>;
withFaceExpressions(): PredictSingleFaceExpressionsWithFaceAlignmentTask<WithFaceLandmarks<TSource, FaceLandmarks68>>;
withAgeAndGender(): PredictSingleAgeAndGenderWithFaceAlignmentTask<WithFaceLandmarks<TSource, FaceLandmarks68>>;
withFaceDescriptor(): ComputeSingleFaceDescriptorTask<WithFaceLandmarks<TSource, FaceLandmarks68>>;
}
......@@ -5,6 +5,8 @@ import { extendWithFaceLandmarks } from '../factories/WithFaceLandmarks';
import { ComposableTask } from './ComposableTask';
import { ComputeAllFaceDescriptorsTask, ComputeSingleFaceDescriptorTask } from './ComputeFaceDescriptorsTasks';
import { nets } from './nets';
import { PredictAllAgeAndGenderWithFaceAlignmentTask, PredictSingleAgeAndGenderWithFaceAlignmentTask, } from './PredictAgeAndGenderTask';
import { PredictAllFaceExpressionsWithFaceAlignmentTask, PredictSingleFaceExpressionsWithFaceAlignmentTask, } from './PredictFaceExpressionsTask';
var DetectFaceLandmarksTaskBase = /** @class */ (function (_super) {
tslib_1.__extends(DetectFaceLandmarksTaskBase, _super);
function DetectFaceLandmarksTaskBase(parentTask, input, useTinyLandmarkNet) {
......@@ -63,6 +65,12 @@ var DetectAllFaceLandmarksTask = /** @class */ (function (_super) {
});
});
};
DetectAllFaceLandmarksTask.prototype.withFaceExpressions = function () {
return new PredictAllFaceExpressionsWithFaceAlignmentTask(this, this.input);
};
DetectAllFaceLandmarksTask.prototype.withAgeAndGender = function () {
return new PredictAllAgeAndGenderWithFaceAlignmentTask(this, this.input);
};
DetectAllFaceLandmarksTask.prototype.withFaceDescriptors = function () {
return new ComputeAllFaceDescriptorsTask(this, this.input);
};
......@@ -106,6 +114,12 @@ var DetectSingleFaceLandmarksTask = /** @class */ (function (_super) {
});
});
};
DetectSingleFaceLandmarksTask.prototype.withFaceExpressions = function () {
return new PredictSingleFaceExpressionsWithFaceAlignmentTask(this, this.input);
};
DetectSingleFaceLandmarksTask.prototype.withAgeAndGender = function () {
return new PredictSingleAgeAndGenderWithFaceAlignmentTask(this, this.input);
};
DetectSingleFaceLandmarksTask.prototype.withFaceDescriptor = function () {
return new ComputeSingleFaceDescriptorTask(this, this.input);
};
......
{"version":3,"file":"DetectFaceLandmarksTasks.js","sourceRoot":"","sources":["../../../src/globalApi/DetectFaceLandmarksTasks.ts"],"names":[],"mappings":";AAAA,OAAO,KAAK,EAAE,MAAM,uBAAuB,CAAC;AAI5C,OAAO,EAAE,YAAY,EAAE,kBAAkB,EAAE,MAAM,QAAQ,CAAC;AAI1D,OAAO,EAAE,uBAAuB,EAAqB,MAAM,gCAAgC,CAAC;AAC5F,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,EAAE,6BAA6B,EAAE,+BAA+B,EAAE,MAAM,+BAA+B,CAAC;AAC/G,OAAO,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AAG9B;IAAyE,uDAAuB;IAC9F,qCACY,UAAkE,EAClE,KAAgB,EAChB,kBAA2B;QAHvC,YAKE,iBAAO,SACR;QALW,gBAAU,GAAV,UAAU,CAAwD;QAClE,WAAK,GAAL,KAAK,CAAW;QAChB,wBAAkB,GAAlB,kBAAkB,CAAS;;IAGvC,CAAC;IAED,sBAAc,oDAAW;aAAzB;YACE,OAAO,IAAI,CAAC,kBAAkB;gBAC5B,CAAC,CAAC,IAAI,CAAC,qBAAqB;gBAC5B,CAAC,CAAC,IAAI,CAAC,iBAAiB,CAAA;QAC5B,CAAC;;;OAAA;IACH,kCAAC;AAAD,CAAC,AAdD,CAAyE,cAAc,GActF;;AAED;IAEU,sDAAoE;IAF9E;;IA2BA,CAAC;IAvBc,wCAAG,GAAhB;;;;;;4BAEwB,qBAAM,IAAI,CAAC,UAAU,EAAA;;wBAArC,aAAa,GAAG,SAAqB;wBACrC,UAAU,GAAG,aAAa,CAAC,GAAG,CAAC,UAAA,GAAG,IAAI,OAAA,GAAG,CAAC,SAAS,EAAb,CAAa,CAAC,CAAA;6BAEJ,CAAA,IAAI,CAAC,KAAK,YAAY,EAAE,CAAC,MAAM,CAAA,EAA/B,wBAA+B;wBACjF,qBAAM,kBAAkB,CAAC,IAAI,CAAC,KAAK,EAAE,UAAU,CAAC,EAAA;;wBAAhD,KAAA,SAAgD,CAAA;;4BAChD,qBAAM,YAAY,CAAC,IAAI,CAAC,KAAK,EAAE,UAAU,CAAC,EAAA;;wBAA1C,KAAA,SAA0C,CAAA;;;wBAFxC,KAAK,KAEmC;wBAElB,qBAAM,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CACrD,UAAA,IAAI,IAAI,OAAA,KAAI,CAAC,WAAW,CAAC,eAAe,CAAC,IAAI,CAAC,EAAtC,CAAsC,CAC/C,CAAC,EAAA;;wBAFI,mBAAmB,GAAG,SAEL;wBAEvB,KAAK,CAAC,OAAO,CAAC,UAAA,CAAC,IAAI,OAAA,CAAC,YAAY,EAAE,CAAC,MAAM,IAAI,CAAC,CAAC,OAAO,EAAE,EAArC,CAAqC,CAAC,CAAA;wBAEzD,sBAAO,aAAa,CAAC,GAAG,CAAC,UAAC,YAAY,EAAE,CAAC;gCACvC,OAAA,uBAAuB,CAAU,YAAY,EAAE,mBAAmB,CAAC,CAAC,CAAC,CAAC;4BAAtE,CAAsE,CACvE,EAAA;;;;KACF;IAED,wDAAmB,GAAnB;QACE,OAAO,IAAI,6BAA6B,CAA6B,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,CAAA;IACxF,CAAC;IACH,iCAAC;AAAD,CAAC,AA3BD,CAEU,2BAA2B,GAyBpC;;AAED;IAEW,yDAAwF;IAFnG;;IA0BA,CAAC;IAtBc,2CAAG,GAAhB;;;;;4BAEuB,qBAAM,IAAI,CAAC,UAAU,EAAA;;wBAApC,YAAY,GAAG,SAAqB;wBAC1C,IAAI,CAAC,YAAY,EAAE;4BACjB,sBAAM;yBACP;wBAEO,SAAS,GAAK,YAAY,UAAjB,CAAiB;6BACoB,CAAA,IAAI,CAAC,KAAK,YAAY,EAAE,CAAC,MAAM,CAAA,EAA/B,wBAA+B;wBACjF,qBAAM,kBAAkB,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,SAAS,CAAC,CAAC,EAAA;;wBAAjD,KAAA,SAAiD,CAAA;;4BACjD,qBAAM,YAAY,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,SAAS,CAAC,CAAC,EAAA;;wBAA3C,KAAA,SAA2C,CAAA;;;wBAFzC,KAAK,KAEoC;wBAE7B,qBAAM,IAAI,CAAC,WAAW,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAA;;wBAA5D,SAAS,GAAG,SAAmE;wBAErF,KAAK,CAAC,OAAO,CAAC,UAAA,CAAC,IAAI,OAAA,CAAC,YAAY,EAAE,CAAC,MAAM,IAAI,CAAC,CAAC,OAAO,EAAE,EAArC,CAAqC,CAAC,CAAA;wBAEzD,sBAAO,uBAAuB,CAAU,YAAY,EAAE,SAAS,CAAC,EAAA;;;;KACjE;IAED,0DAAkB,GAAlB;QACE,OAAO,IAAI,+BAA+B,CAA6B,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,CAAA;IAC1F,CAAC;IACH,oCAAC;AAAD,CAAC,AA1BD,CAEW,2BAA2B,GAwBrC"}
\ No newline at end of file
{"version":3,"file":"DetectFaceLandmarksTasks.js","sourceRoot":"","sources":["../../../src/globalApi/DetectFaceLandmarksTasks.ts"],"names":[],"mappings":"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"}
\ No newline at end of file
import { TNetInput } from 'tfjs-image-recognition-base';
import { FaceDetection } from '../classes/FaceDetection';
import { WithFaceDetection } from '../factories/WithFaceDetection';
import { ComposableTask } from './ComposableTask';
import { DetectAllFaceLandmarksTask, DetectSingleFaceLandmarksTask } from './DetectFaceLandmarksTasks';
import { PredictAllFaceExpressionsTask, PredictSingleFaceExpressionTask } from './PredictFaceExpressionsTask';
import { PredictAllAgeAndGenderTask, PredictSingleAgeAndGenderTask } from './PredictAgeAndGenderTask';
import { PredictAllFaceExpressionsTask, PredictSingleFaceExpressionsTask } from './PredictFaceExpressionsTask';
import { FaceDetectionOptions } from './types';
export declare class DetectFacesTaskBase<TReturn> extends ComposableTask<TReturn> {
protected input: TNetInput;
......@@ -13,12 +13,26 @@ export declare class DetectFacesTaskBase<TReturn> extends ComposableTask<TReturn
export declare class DetectAllFacesTask extends DetectFacesTaskBase<FaceDetection[]> {
run(): Promise<FaceDetection[]>;
private runAndExtendWithFaceDetections;
withFaceLandmarks(useTinyLandmarkNet?: boolean): DetectAllFaceLandmarksTask<WithFaceDetection<{}>>;
withFaceExpressions(): PredictAllFaceExpressionsTask<WithFaceDetection<{}>>;
withFaceLandmarks(useTinyLandmarkNet?: boolean): DetectAllFaceLandmarksTask<{
detection: FaceDetection;
}>;
withFaceExpressions(): PredictAllFaceExpressionsTask<{
detection: FaceDetection;
}>;
withAgeAndGender(): PredictAllAgeAndGenderTask<{
detection: FaceDetection;
}>;
}
export declare class DetectSingleFaceTask extends DetectFacesTaskBase<FaceDetection | undefined> {
run(): Promise<FaceDetection | undefined>;
private runAndExtendWithFaceDetection;
withFaceLandmarks(useTinyLandmarkNet?: boolean): DetectSingleFaceLandmarksTask<WithFaceDetection<{}>>;
withFaceExpressions(): PredictSingleFaceExpressionTask<WithFaceDetection<{}>>;
withFaceLandmarks(useTinyLandmarkNet?: boolean): DetectSingleFaceLandmarksTask<{
detection: FaceDetection;
}>;
withFaceExpressions(): PredictSingleFaceExpressionsTask<{
detection: FaceDetection;
}>;
withAgeAndGender(): PredictSingleAgeAndGenderTask<{
detection: FaceDetection;
}>;
}
......@@ -7,7 +7,8 @@ import { TinyFaceDetectorOptions } from '../tinyFaceDetector/TinyFaceDetectorOpt
import { ComposableTask } from './ComposableTask';
import { DetectAllFaceLandmarksTask, DetectSingleFaceLandmarksTask } from './DetectFaceLandmarksTasks';
import { nets } from './nets';
import { PredictAllFaceExpressionsTask, PredictSingleFaceExpressionTask } from './PredictFaceExpressionsTask';
import { PredictAllAgeAndGenderTask, PredictSingleAgeAndGenderTask } from './PredictAgeAndGenderTask';
import { PredictAllFaceExpressionsTask, PredictSingleFaceExpressionsTask } from './PredictFaceExpressionsTask';
var DetectFacesTaskBase = /** @class */ (function (_super) {
tslib_1.__extends(DetectFacesTaskBase, _super);
function DetectFacesTaskBase(input, options) {
......@@ -73,6 +74,9 @@ var DetectAllFacesTask = /** @class */ (function (_super) {
DetectAllFacesTask.prototype.withFaceExpressions = function () {
return new PredictAllFaceExpressionsTask(this.runAndExtendWithFaceDetections(), this.input);
};
DetectAllFacesTask.prototype.withAgeAndGender = function () {
return new PredictAllAgeAndGenderTask(this.runAndExtendWithFaceDetections(), this.input);
};
return DetectAllFacesTask;
}(DetectFacesTaskBase));
export { DetectAllFacesTask };
......@@ -119,7 +123,10 @@ var DetectSingleFaceTask = /** @class */ (function (_super) {
return new DetectSingleFaceLandmarksTask(this.runAndExtendWithFaceDetection(), this.input, useTinyLandmarkNet);
};
DetectSingleFaceTask.prototype.withFaceExpressions = function () {
return new PredictSingleFaceExpressionTask(this.runAndExtendWithFaceDetection(), this.input);
return new PredictSingleFaceExpressionsTask(this.runAndExtendWithFaceDetection(), this.input);
};
DetectSingleFaceTask.prototype.withAgeAndGender = function () {
return new PredictSingleAgeAndGenderTask(this.runAndExtendWithFaceDetection(), this.input);
};
return DetectSingleFaceTask;
}(DetectFacesTaskBase));
......
{"version":3,"file":"DetectFacesTasks.js","sourceRoot":"","sources":["../../../src/globalApi/DetectFacesTasks.ts"],"names":[],"mappings":"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"}
\ No newline at end of file
{"version":3,"file":"DetectFacesTasks.js","sourceRoot":"","sources":["../../../src/globalApi/DetectFacesTasks.ts"],"names":[],"mappings":"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"}
\ No newline at end of file
import * as tf from '@tensorflow/tfjs-core';
import { TNetInput } from 'tfjs-image-recognition-base';
import { WithAge } from '../factories/WithAge';
import { WithFaceDetection } from '../factories/WithFaceDetection';
import { WithFaceLandmarks } from '../factories/WithFaceLandmarks';
import { WithGender } from '../factories/WithGender';
import { ComposableTask } from './ComposableTask';
import { ComputeAllFaceDescriptorsTask, ComputeSingleFaceDescriptorTask } from './ComputeFaceDescriptorsTasks';
import { PredictAllFaceExpressionsTask, PredictAllFaceExpressionsWithFaceAlignmentTask, PredictSingleFaceExpressionsTask, PredictSingleFaceExpressionsWithFaceAlignmentTask } from './PredictFaceExpressionsTask';
export declare class PredictAgeAndGenderTaskBase<TReturn, TParentReturn> extends ComposableTask<TReturn> {
protected parentTask: ComposableTask<TParentReturn> | Promise<TParentReturn>;
protected input: TNetInput;
protected extractedFaces?: (HTMLCanvasElement | tf.Tensor<tf.Rank.R3>)[] | undefined;
constructor(parentTask: ComposableTask<TParentReturn> | Promise<TParentReturn>, input: TNetInput, extractedFaces?: (HTMLCanvasElement | tf.Tensor<tf.Rank.R3>)[] | undefined);
}
export declare class PredictAllAgeAndGenderTask<TSource extends WithFaceDetection<{}>> extends PredictAgeAndGenderTaskBase<WithAge<WithGender<TSource>>[], TSource[]> {
run(): Promise<WithAge<WithGender<TSource>>[]>;
withFaceExpressions(): PredictAllFaceExpressionsTask<WithAge<WithGender<TSource>>>;
}
export declare class PredictSingleAgeAndGenderTask<TSource extends WithFaceDetection<{}>> extends PredictAgeAndGenderTaskBase<WithAge<WithGender<TSource>> | undefined, TSource | undefined> {
run(): Promise<WithAge<WithGender<TSource>> | undefined>;
withFaceExpressions(): PredictSingleFaceExpressionsTask<WithAge<WithGender<TSource>>>;
}
export declare class PredictAllAgeAndGenderWithFaceAlignmentTask<TSource extends WithFaceLandmarks<WithFaceDetection<{}>>> extends PredictAllAgeAndGenderTask<TSource> {
withFaceExpressions(): PredictAllFaceExpressionsWithFaceAlignmentTask<WithAge<WithGender<TSource>>>;
withFaceDescriptors(): ComputeAllFaceDescriptorsTask<WithAge<WithGender<TSource>>>;
}
export declare class PredictSingleAgeAndGenderWithFaceAlignmentTask<TSource extends WithFaceLandmarks<WithFaceDetection<{}>>> extends PredictSingleAgeAndGenderTask<TSource> {
withFaceExpressions(): PredictSingleFaceExpressionsWithFaceAlignmentTask<WithAge<WithGender<TSource>>>;
withFaceDescriptor(): ComputeSingleFaceDescriptorTask<WithAge<WithGender<TSource>>>;
}
import * as tslib_1 from "tslib";
import { extendWithAge } from '../factories/WithAge';
import { extendWithGender } from '../factories/WithGender';
import { ComposableTask } from './ComposableTask';
import { ComputeAllFaceDescriptorsTask, ComputeSingleFaceDescriptorTask } from './ComputeFaceDescriptorsTasks';
import { extractAllFacesAndComputeResults, extractSingleFaceAndComputeResult } from './extractFacesAndComputeResults';
import { nets } from './nets';
import { PredictAllFaceExpressionsTask, PredictAllFaceExpressionsWithFaceAlignmentTask, PredictSingleFaceExpressionsTask, PredictSingleFaceExpressionsWithFaceAlignmentTask, } from './PredictFaceExpressionsTask';
var PredictAgeAndGenderTaskBase = /** @class */ (function (_super) {
tslib_1.__extends(PredictAgeAndGenderTaskBase, _super);
function PredictAgeAndGenderTaskBase(parentTask, input, extractedFaces) {
var _this = _super.call(this) || this;
_this.parentTask = parentTask;
_this.input = input;
_this.extractedFaces = extractedFaces;
return _this;
}
return PredictAgeAndGenderTaskBase;
}(ComposableTask));
export { PredictAgeAndGenderTaskBase };
var PredictAllAgeAndGenderTask = /** @class */ (function (_super) {
tslib_1.__extends(PredictAllAgeAndGenderTask, _super);
function PredictAllAgeAndGenderTask() {
return _super !== null && _super.apply(this, arguments) || this;
}
PredictAllAgeAndGenderTask.prototype.run = function () {
return tslib_1.__awaiter(this, void 0, void 0, function () {
var parentResults, ageAndGenderByFace;
var _this = this;
return tslib_1.__generator(this, function (_a) {
switch (_a.label) {
case 0: return [4 /*yield*/, this.parentTask];
case 1:
parentResults = _a.sent();
return [4 /*yield*/, extractAllFacesAndComputeResults(parentResults, this.input, function (faces) { return tslib_1.__awaiter(_this, void 0, void 0, function () {
return tslib_1.__generator(this, function (_a) {
switch (_a.label) {
case 0: return [4 /*yield*/, Promise.all(faces.map(function (face) { return nets.ageGenderNet.predictAgeAndGender(face); }))];
case 1: return [2 /*return*/, _a.sent()];
}
});
}); }, this.extractedFaces)];
case 2:
ageAndGenderByFace = _a.sent();
return [2 /*return*/, parentResults.map(function (parentResult, i) {
var _a = ageAndGenderByFace[i], age = _a.age, gender = _a.gender, genderProbability = _a.genderProbability;
return extendWithAge(extendWithGender(parentResult, gender, genderProbability), age);
})];
}
});
});
};
PredictAllAgeAndGenderTask.prototype.withFaceExpressions = function () {
return new PredictAllFaceExpressionsTask(this, this.input);
};
return PredictAllAgeAndGenderTask;
}(PredictAgeAndGenderTaskBase));
export { PredictAllAgeAndGenderTask };
var PredictSingleAgeAndGenderTask = /** @class */ (function (_super) {
tslib_1.__extends(PredictSingleAgeAndGenderTask, _super);
function PredictSingleAgeAndGenderTask() {
return _super !== null && _super.apply(this, arguments) || this;
}
PredictSingleAgeAndGenderTask.prototype.run = function () {
return tslib_1.__awaiter(this, void 0, void 0, function () {
var parentResult, _a, age, gender, genderProbability;
return tslib_1.__generator(this, function (_b) {
switch (_b.label) {
case 0: return [4 /*yield*/, this.parentTask];
case 1:
parentResult = _b.sent();
if (!parentResult) {
return [2 /*return*/];
}
return [4 /*yield*/, extractSingleFaceAndComputeResult(parentResult, this.input, function (face) { return nets.ageGenderNet.predictAgeAndGender(face); }, this.extractedFaces)];
case 2:
_a = _b.sent(), age = _a.age, gender = _a.gender, genderProbability = _a.genderProbability;
return [2 /*return*/, extendWithAge(extendWithGender(parentResult, gender, genderProbability), age)];
}
});
});
};
PredictSingleAgeAndGenderTask.prototype.withFaceExpressions = function () {
return new PredictSingleFaceExpressionsTask(this, this.input);
};
return PredictSingleAgeAndGenderTask;
}(PredictAgeAndGenderTaskBase));
export { PredictSingleAgeAndGenderTask };
var PredictAllAgeAndGenderWithFaceAlignmentTask = /** @class */ (function (_super) {
tslib_1.__extends(PredictAllAgeAndGenderWithFaceAlignmentTask, _super);
function PredictAllAgeAndGenderWithFaceAlignmentTask() {
return _super !== null && _super.apply(this, arguments) || this;
}
PredictAllAgeAndGenderWithFaceAlignmentTask.prototype.withFaceExpressions = function () {
return new PredictAllFaceExpressionsWithFaceAlignmentTask(this, this.input);
};
PredictAllAgeAndGenderWithFaceAlignmentTask.prototype.withFaceDescriptors = function () {
return new ComputeAllFaceDescriptorsTask(this, this.input);
};
return PredictAllAgeAndGenderWithFaceAlignmentTask;
}(PredictAllAgeAndGenderTask));
export { PredictAllAgeAndGenderWithFaceAlignmentTask };
var PredictSingleAgeAndGenderWithFaceAlignmentTask = /** @class */ (function (_super) {
tslib_1.__extends(PredictSingleAgeAndGenderWithFaceAlignmentTask, _super);
function PredictSingleAgeAndGenderWithFaceAlignmentTask() {
return _super !== null && _super.apply(this, arguments) || this;
}
PredictSingleAgeAndGenderWithFaceAlignmentTask.prototype.withFaceExpressions = function () {
return new PredictSingleFaceExpressionsWithFaceAlignmentTask(this, this.input);
};
PredictSingleAgeAndGenderWithFaceAlignmentTask.prototype.withFaceDescriptor = function () {
return new ComputeSingleFaceDescriptorTask(this, this.input);
};
return PredictSingleAgeAndGenderWithFaceAlignmentTask;
}(PredictSingleAgeAndGenderTask));
export { PredictSingleAgeAndGenderWithFaceAlignmentTask };
//# sourceMappingURL=PredictAgeAndGenderTask.js.map
\ No newline at end of file
{"version":3,"file":"PredictAgeAndGenderTask.js","sourceRoot":"","sources":["../../../src/globalApi/PredictAgeAndGenderTask.ts"],"names":[],"mappings":";AAIA,OAAO,EAAE,aAAa,EAAW,MAAM,sBAAsB,CAAC;AAG9D,OAAO,EAAE,gBAAgB,EAAc,MAAM,yBAAyB,CAAC;AACvE,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,EAAE,6BAA6B,EAAE,+BAA+B,EAAE,MAAM,+BAA+B,CAAC;AAC/G,OAAO,EAAE,gCAAgC,EAAE,iCAAiC,EAAE,MAAM,iCAAiC,CAAC;AACtH,OAAO,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AAC9B,OAAO,EACL,6BAA6B,EAC7B,8CAA8C,EAC9C,gCAAgC,EAChC,iDAAiD,GAClD,MAAM,8BAA8B,CAAC;AAEtC;IAAyE,uDAAuB;IAC9F,qCACY,UAAkE,EAClE,KAAgB,EAChB,cAAuD;QAHnE,YAKE,iBAAO,SACR;QALW,gBAAU,GAAV,UAAU,CAAwD;QAClE,WAAK,GAAL,KAAK,CAAW;QAChB,oBAAc,GAAd,cAAc,CAAyC;;IAGnE,CAAC;IACH,kCAAC;AAAD,CAAC,AARD,CAAyE,cAAc,GAQtF;;AAED;IAEU,sDAAsE;IAFhF;;IA0BA,CAAC;IAtBc,wCAAG,GAAhB;;;;;;4BAEwB,qBAAM,IAAI,CAAC,UAAU,EAAA;;wBAArC,aAAa,GAAG,SAAqB;wBAEhB,qBAAM,gCAAgC,CAC/D,aAAa,EACb,IAAI,CAAC,KAAK,EACV,UAAM,KAAK;;;gDAAI,qBAAM,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CACxC,UAAA,IAAI,IAAI,OAAA,IAAI,CAAC,YAAY,CAAC,mBAAmB,CAAC,IAAI,CAAoC,EAA9E,CAA8E,CACvF,CAAC,EAAA;gDAFa,sBAAA,SAEb,EAAA;;;iCAAA,EACF,IAAI,CAAC,cAAc,CACpB,EAAA;;wBAPK,kBAAkB,GAAG,SAO1B;wBAED,sBAAO,aAAa,CAAC,GAAG,CAAC,UAAC,YAAY,EAAE,CAAC;gCACjC,IAAA,0BAA0D,EAAxD,YAAG,EAAE,kBAAM,EAAE,wCAA2C,CAAA;gCAChE,OAAO,aAAa,CAAC,gBAAgB,CAAC,YAAY,EAAE,MAAM,EAAE,iBAAiB,CAAC,EAAE,GAAG,CAAC,CAAA;4BACtF,CAAC,CAAC,EAAA;;;;KACH;IAED,wDAAmB,GAAnB;QACE,OAAO,IAAI,6BAA6B,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,CAAA;IAC5D,CAAC;IACH,iCAAC;AAAD,CAAC,AA1BD,CAEU,2BAA2B,GAwBpC;;AAED;IAEW,yDAA0F;IAFrG;;IAwBA,CAAC;IApBc,2CAAG,GAAhB;;;;;4BAEuB,qBAAM,IAAI,CAAC,UAAU,EAAA;;wBAApC,YAAY,GAAG,SAAqB;wBAC1C,IAAI,CAAC,YAAY,EAAE;4BACjB,sBAAM;yBACP;wBAE0C,qBAAM,iCAAiC,CAChF,YAAY,EACZ,IAAI,CAAC,KAAK,EACV,UAAA,IAAI,IAAI,OAAA,IAAI,CAAC,YAAY,CAAC,mBAAmB,CAAC,IAAI,CAAoC,EAA9E,CAA8E,EACtF,IAAI,CAAC,cAAc,CACpB,EAAA;;wBALK,KAAqC,SAK1C,EALO,GAAG,SAAA,EAAE,MAAM,YAAA,EAAE,iBAAiB,uBAAA;wBAOtC,sBAAO,aAAa,CAAC,gBAAgB,CAAC,YAAY,EAAE,MAAM,EAAE,iBAAiB,CAAC,EAAE,GAAG,CAAC,EAAA;;;;KACrF;IAED,2DAAmB,GAAnB;QACE,OAAO,IAAI,gCAAgC,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,CAAA;IAC/D,CAAC;IACH,oCAAC;AAAD,CAAC,AAxBD,CAEW,2BAA2B,GAsBrC;;AAED;IAEU,uEAAmC;IAF7C;;IAWA,CAAC;IAPC,yEAAmB,GAAnB;QACE,OAAO,IAAI,8CAA8C,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,CAAA;IAC7E,CAAC;IAED,yEAAmB,GAAnB;QACE,OAAO,IAAI,6BAA6B,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,CAAA;IAC5D,CAAC;IACH,kDAAC;AAAD,CAAC,AAXD,CAEU,0BAA0B,GASnC;;AAED;IAEU,0EAAsC;IAFhD;;IAWA,CAAC;IAPC,4EAAmB,GAAnB;QACE,OAAO,IAAI,iDAAiD,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,CAAA;IAChF,CAAC;IAED,2EAAkB,GAAlB;QACE,OAAO,IAAI,+BAA+B,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,CAAA;IAC9D,CAAC;IACH,qDAAC;AAAD,CAAC,AAXD,CAEU,6BAA6B,GAStC"}
\ No newline at end of file
import * as tf from '@tensorflow/tfjs-core';
import { TNetInput } from 'tfjs-image-recognition-base';
import { WithFaceDetection } from '../factories/WithFaceDetection';
import { WithFaceExpressions } from '../factories/WithFaceExpressions';
import { WithFaceLandmarks } from '../factories/WithFaceLandmarks';
import { ComposableTask } from './ComposableTask';
import { DetectAllFaceLandmarksTask, DetectSingleFaceLandmarksTask } from './DetectFaceLandmarksTasks';
import { ComputeAllFaceDescriptorsTask, ComputeSingleFaceDescriptorTask } from './ComputeFaceDescriptorsTasks';
import { PredictAllAgeAndGenderTask, PredictAllAgeAndGenderWithFaceAlignmentTask, PredictSingleAgeAndGenderTask, PredictSingleAgeAndGenderWithFaceAlignmentTask } from './PredictAgeAndGenderTask';
export declare class PredictFaceExpressionsTaskBase<TReturn, TParentReturn> extends ComposableTask<TReturn> {
protected parentTask: ComposableTask<TParentReturn> | Promise<TParentReturn>;
protected input: TNetInput;
constructor(parentTask: ComposableTask<TParentReturn> | Promise<TParentReturn>, input: TNetInput);
protected extractedFaces?: (HTMLCanvasElement | tf.Tensor<tf.Rank.R3>)[] | undefined;
constructor(parentTask: ComposableTask<TParentReturn> | Promise<TParentReturn>, input: TNetInput, extractedFaces?: (HTMLCanvasElement | tf.Tensor<tf.Rank.R3>)[] | undefined);
}
export declare class PredictAllFaceExpressionsTask<TSource extends WithFaceDetection<{}>> extends PredictFaceExpressionsTaskBase<WithFaceExpressions<TSource>[], TSource[]> {
run(): Promise<WithFaceExpressions<TSource>[]>;
withFaceLandmarks(): DetectAllFaceLandmarksTask<WithFaceExpressions<TSource>>;
withAgeAndGender(): PredictAllAgeAndGenderTask<WithFaceExpressions<TSource>>;
}
export declare class PredictSingleFaceExpressionTask<TSource extends WithFaceDetection<{}>> extends PredictFaceExpressionsTaskBase<WithFaceExpressions<TSource> | undefined, TSource | undefined> {
export declare class PredictSingleFaceExpressionsTask<TSource extends WithFaceDetection<{}>> extends PredictFaceExpressionsTaskBase<WithFaceExpressions<TSource> | undefined, TSource | undefined> {
run(): Promise<WithFaceExpressions<TSource> | undefined>;
withFaceLandmarks(): DetectSingleFaceLandmarksTask<WithFaceExpressions<TSource>>;
withAgeAndGender(): PredictSingleAgeAndGenderTask<WithFaceExpressions<TSource>>;
}
export declare class PredictAllFaceExpressionsWithFaceAlignmentTask<TSource extends WithFaceLandmarks<WithFaceDetection<{}>>> extends PredictAllFaceExpressionsTask<TSource> {
withAgeAndGender(): PredictAllAgeAndGenderWithFaceAlignmentTask<WithFaceExpressions<TSource>>;
withFaceDescriptors(): ComputeAllFaceDescriptorsTask<WithFaceExpressions<TSource>>;
}
export declare class PredictSingleFaceExpressionsWithFaceAlignmentTask<TSource extends WithFaceLandmarks<WithFaceDetection<{}>>> extends PredictSingleFaceExpressionsTask<TSource> {
withAgeAndGender(): PredictSingleAgeAndGenderWithFaceAlignmentTask<WithFaceExpressions<TSource>>;
withFaceDescriptor(): ComputeSingleFaceDescriptorTask<WithFaceExpressions<TSource>>;
}
import * as tslib_1 from "tslib";
import * as tf from '@tensorflow/tfjs-core';
import { extractFaces, extractFaceTensors } from '../dom';
import { extendWithFaceExpressions } from '../factories/WithFaceExpressions';
import { ComposableTask } from './ComposableTask';
import { DetectAllFaceLandmarksTask, DetectSingleFaceLandmarksTask } from './DetectFaceLandmarksTasks';
import { ComputeAllFaceDescriptorsTask, ComputeSingleFaceDescriptorTask } from './ComputeFaceDescriptorsTasks';
import { extractAllFacesAndComputeResults, extractSingleFaceAndComputeResult } from './extractFacesAndComputeResults';
import { nets } from './nets';
import { PredictAllAgeAndGenderTask, PredictAllAgeAndGenderWithFaceAlignmentTask, PredictSingleAgeAndGenderTask, PredictSingleAgeAndGenderWithFaceAlignmentTask, } from './PredictAgeAndGenderTask';
var PredictFaceExpressionsTaskBase = /** @class */ (function (_super) {
tslib_1.__extends(PredictFaceExpressionsTaskBase, _super);
function PredictFaceExpressionsTaskBase(parentTask, input) {
function PredictFaceExpressionsTaskBase(parentTask, input, extractedFaces) {
var _this = _super.call(this) || this;
_this.parentTask = parentTask;
_this.input = input;
_this.extractedFaces = extractedFaces;
return _this;
}
return PredictFaceExpressionsTaskBase;
......@@ -23,80 +24,90 @@ var PredictAllFaceExpressionsTask = /** @class */ (function (_super) {
}
PredictAllFaceExpressionsTask.prototype.run = function () {
return tslib_1.__awaiter(this, void 0, void 0, function () {
var parentResults, detections, faces, _a, faceExpressionsByFace;
return tslib_1.__generator(this, function (_b) {
switch (_b.label) {
var parentResults, faceExpressionsByFace;
var _this = this;
return tslib_1.__generator(this, function (_a) {
switch (_a.label) {
case 0: return [4 /*yield*/, this.parentTask];
case 1:
parentResults = _b.sent();
detections = parentResults.map(function (parentResult) { return parentResult.detection; });
if (!(this.input instanceof tf.Tensor)) return [3 /*break*/, 3];
return [4 /*yield*/, extractFaceTensors(this.input, detections)];
parentResults = _a.sent();
return [4 /*yield*/, extractAllFacesAndComputeResults(parentResults, this.input, function (faces) { return tslib_1.__awaiter(_this, void 0, void 0, function () {
return tslib_1.__generator(this, function (_a) {
switch (_a.label) {
case 0: return [4 /*yield*/, Promise.all(faces.map(function (face) { return nets.faceExpressionNet.predictExpressions(face); }))];
case 1: return [2 /*return*/, _a.sent()];
}
});
}); }, this.extractedFaces)];
case 2:
_a = _b.sent();
return [3 /*break*/, 5];
case 3: return [4 /*yield*/, extractFaces(this.input, detections)];
case 4:
_a = _b.sent();
_b.label = 5;
case 5:
faces = _a;
return [4 /*yield*/, Promise.all(faces.map(function (face) { return nets.faceExpressionNet.predictExpressions(face); }))];
case 6:
faceExpressionsByFace = _b.sent();
faces.forEach(function (f) { return f instanceof tf.Tensor && f.dispose(); });
faceExpressionsByFace = _a.sent();
return [2 /*return*/, parentResults.map(function (parentResult, i) { return extendWithFaceExpressions(parentResult, faceExpressionsByFace[i]); })];
}
});
});
};
PredictAllFaceExpressionsTask.prototype.withFaceLandmarks = function () {
return new DetectAllFaceLandmarksTask(this, this.input, false);
PredictAllFaceExpressionsTask.prototype.withAgeAndGender = function () {
return new PredictAllAgeAndGenderTask(this, this.input);
};
return PredictAllFaceExpressionsTask;
}(PredictFaceExpressionsTaskBase));
export { PredictAllFaceExpressionsTask };
var PredictSingleFaceExpressionTask = /** @class */ (function (_super) {
tslib_1.__extends(PredictSingleFaceExpressionTask, _super);
function PredictSingleFaceExpressionTask() {
var PredictSingleFaceExpressionsTask = /** @class */ (function (_super) {
tslib_1.__extends(PredictSingleFaceExpressionsTask, _super);
function PredictSingleFaceExpressionsTask() {
return _super !== null && _super.apply(this, arguments) || this;
}
PredictSingleFaceExpressionTask.prototype.run = function () {
PredictSingleFaceExpressionsTask.prototype.run = function () {
return tslib_1.__awaiter(this, void 0, void 0, function () {
var parentResult, detection, faces, _a, faceExpressions;
return tslib_1.__generator(this, function (_b) {
switch (_b.label) {
var parentResult, faceExpressions;
return tslib_1.__generator(this, function (_a) {
switch (_a.label) {
case 0: return [4 /*yield*/, this.parentTask];
case 1:
parentResult = _b.sent();
parentResult = _a.sent();
if (!parentResult) {
return [2 /*return*/];
}
detection = parentResult.detection;
if (!(this.input instanceof tf.Tensor)) return [3 /*break*/, 3];
return [4 /*yield*/, extractFaceTensors(this.input, [detection])];
return [4 /*yield*/, extractSingleFaceAndComputeResult(parentResult, this.input, function (face) { return nets.faceExpressionNet.predictExpressions(face); }, this.extractedFaces)];
case 2:
_a = _b.sent();
return [3 /*break*/, 5];
case 3: return [4 /*yield*/, extractFaces(this.input, [detection])];
case 4:
_a = _b.sent();
_b.label = 5;
case 5:
faces = _a;
return [4 /*yield*/, nets.faceExpressionNet.predictExpressions(faces[0])];
case 6:
faceExpressions = _b.sent();
faces.forEach(function (f) { return f instanceof tf.Tensor && f.dispose(); });
faceExpressions = _a.sent();
return [2 /*return*/, extendWithFaceExpressions(parentResult, faceExpressions)];
}
});
});
};
PredictSingleFaceExpressionTask.prototype.withFaceLandmarks = function () {
return new DetectSingleFaceLandmarksTask(this, this.input, false);
PredictSingleFaceExpressionsTask.prototype.withAgeAndGender = function () {
return new PredictSingleAgeAndGenderTask(this, this.input);
};
return PredictSingleFaceExpressionTask;
return PredictSingleFaceExpressionsTask;
}(PredictFaceExpressionsTaskBase));
export { PredictSingleFaceExpressionTask };
export { PredictSingleFaceExpressionsTask };
var PredictAllFaceExpressionsWithFaceAlignmentTask = /** @class */ (function (_super) {
tslib_1.__extends(PredictAllFaceExpressionsWithFaceAlignmentTask, _super);
function PredictAllFaceExpressionsWithFaceAlignmentTask() {
return _super !== null && _super.apply(this, arguments) || this;
}
PredictAllFaceExpressionsWithFaceAlignmentTask.prototype.withAgeAndGender = function () {
return new PredictAllAgeAndGenderWithFaceAlignmentTask(this, this.input);
};
PredictAllFaceExpressionsWithFaceAlignmentTask.prototype.withFaceDescriptors = function () {
return new ComputeAllFaceDescriptorsTask(this, this.input);
};
return PredictAllFaceExpressionsWithFaceAlignmentTask;
}(PredictAllFaceExpressionsTask));
export { PredictAllFaceExpressionsWithFaceAlignmentTask };
var PredictSingleFaceExpressionsWithFaceAlignmentTask = /** @class */ (function (_super) {
tslib_1.__extends(PredictSingleFaceExpressionsWithFaceAlignmentTask, _super);
function PredictSingleFaceExpressionsWithFaceAlignmentTask() {
return _super !== null && _super.apply(this, arguments) || this;
}
PredictSingleFaceExpressionsWithFaceAlignmentTask.prototype.withAgeAndGender = function () {
return new PredictSingleAgeAndGenderWithFaceAlignmentTask(this, this.input);
};
PredictSingleFaceExpressionsWithFaceAlignmentTask.prototype.withFaceDescriptor = function () {
return new ComputeSingleFaceDescriptorTask(this, this.input);
};
return PredictSingleFaceExpressionsWithFaceAlignmentTask;
}(PredictSingleFaceExpressionsTask));
export { PredictSingleFaceExpressionsWithFaceAlignmentTask };
//# sourceMappingURL=PredictFaceExpressionsTask.js.map
\ No newline at end of file
{"version":3,"file":"PredictFaceExpressionsTask.js","sourceRoot":"","sources":["../../../src/globalApi/PredictFaceExpressionsTask.ts"],"names":[],"mappings":"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"}
\ No newline at end of file
{"version":3,"file":"PredictFaceExpressionsTask.js","sourceRoot":"","sources":["../../../src/globalApi/PredictFaceExpressionsTask.ts"],"names":[],"mappings":"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"}
\ No newline at end of file
import * as tf from '@tensorflow/tfjs-core';
import { TNetInput } from 'tfjs-image-recognition-base';
import { FaceDetection } from '../classes/FaceDetection';
import { WithFaceDetection } from '../factories/WithFaceDetection';
import { WithFaceLandmarks } from '../factories/WithFaceLandmarks';
export declare function extractAllFacesAndComputeResults<TSource extends WithFaceDetection<{}>, TResult>(parentResults: TSource[], input: TNetInput, computeResults: (faces: Array<HTMLCanvasElement | tf.Tensor3D>) => Promise<TResult>, extractedFaces?: Array<HTMLCanvasElement | tf.Tensor3D> | null, getRectForAlignment?: (parentResult: WithFaceLandmarks<TSource, any>) => FaceDetection): Promise<TResult>;
export declare function extractSingleFaceAndComputeResult<TSource extends WithFaceDetection<{}>, TResult>(parentResult: TSource, input: TNetInput, computeResult: (face: HTMLCanvasElement | tf.Tensor3D) => Promise<TResult>, extractedFaces?: Array<HTMLCanvasElement | tf.Tensor3D> | null, getRectForAlignment?: (parentResult: WithFaceLandmarks<TSource, any>) => FaceDetection): Promise<TResult>;
import * as tslib_1 from "tslib";
import * as tf from '@tensorflow/tfjs-core';
import { extractFaces, extractFaceTensors } from '../dom';
import { isWithFaceLandmarks } from '../factories/WithFaceLandmarks';
export function extractAllFacesAndComputeResults(parentResults, input, computeResults, extractedFaces, getRectForAlignment) {
if (getRectForAlignment === void 0) { getRectForAlignment = function (_a) {
var alignedRect = _a.alignedRect;
return alignedRect;
}; }
return tslib_1.__awaiter(this, void 0, void 0, function () {
var faceBoxes, faces, _a, _b, results;
return tslib_1.__generator(this, function (_c) {
switch (_c.label) {
case 0:
faceBoxes = parentResults.map(function (parentResult) {
return isWithFaceLandmarks(parentResult)
? getRectForAlignment(parentResult)
: parentResult.detection;
});
_a = extractedFaces;
if (_a) return [3 /*break*/, 5];
if (!(input instanceof tf.Tensor)) return [3 /*break*/, 2];
return [4 /*yield*/, extractFaceTensors(input, faceBoxes)];
case 1:
_b = _c.sent();
return [3 /*break*/, 4];
case 2: return [4 /*yield*/, extractFaces(input, faceBoxes)];
case 3:
_b = _c.sent();
_c.label = 4;
case 4:
_a = (_b);
_c.label = 5;
case 5:
faces = _a;
return [4 /*yield*/, computeResults(faces)];
case 6:
results = _c.sent();
faces.forEach(function (f) { return f instanceof tf.Tensor && f.dispose(); });
return [2 /*return*/, results];
}
});
});
}
export function extractSingleFaceAndComputeResult(parentResult, input, computeResult, extractedFaces, getRectForAlignment) {
return tslib_1.__awaiter(this, void 0, void 0, function () {
var _this = this;
return tslib_1.__generator(this, function (_a) {
return [2 /*return*/, extractAllFacesAndComputeResults([parentResult], input, function (faces) { return tslib_1.__awaiter(_this, void 0, void 0, function () { return tslib_1.__generator(this, function (_a) {
return [2 /*return*/, computeResult(faces[0])];
}); }); }, extractedFaces, getRectForAlignment)];
});
});
}
//# sourceMappingURL=extractFacesAndComputeResults.js.map
\ No newline at end of file
{"version":3,"file":"extractFacesAndComputeResults.js","sourceRoot":"","sources":["../../../src/globalApi/extractFacesAndComputeResults.ts"],"names":[],"mappings":";AAAA,OAAO,KAAK,EAAE,MAAM,uBAAuB,CAAC;AAI5C,OAAO,EAAE,YAAY,EAAE,kBAAkB,EAAE,MAAM,QAAQ,CAAC;AAE1D,OAAO,EAAE,mBAAmB,EAAqB,MAAM,gCAAgC,CAAC;AAExF,MAAM,UAAgB,gCAAgC,CACpD,aAAwB,EACxB,KAAgB,EAChB,cAAmF,EACnF,cAA8D,EAC9D,mBAAwH;IAAxH,oCAAA,EAAA,gCAAyF,EAAe;YAAb,4BAAW;QAAO,OAAA,WAAW;IAAX,CAAW;;;;;;oBAElH,SAAS,GAAG,aAAa,CAAC,GAAG,CAAC,UAAA,YAAY;wBAC9C,OAAA,mBAAmB,CAAC,YAAY,CAAC;4BAC/B,CAAC,CAAC,mBAAmB,CAAC,YAAY,CAAC;4BACnC,CAAC,CAAC,YAAY,CAAC,SAAS;oBAF1B,CAE0B,CAC3B,CAAA;oBACqD,KAAA,cAAc,CAAA;4BAAd,wBAAc;yBAClE,CAAA,KAAK,YAAY,EAAE,CAAC,MAAM,CAAA,EAA1B,wBAA0B;oBACtB,qBAAM,kBAAkB,CAAC,KAAK,EAAE,SAAS,CAAC,EAAA;;oBAA1C,KAAA,SAA0C,CAAA;;wBAC1C,qBAAM,YAAY,CAAC,KAAK,EAAE,SAAS,CAAC,EAAA;;oBAApC,KAAA,SAAoC,CAAA;;;oBAH8B,KAAA,IAIvE,CAAA;;;oBAJK,KAAK,KAIV;oBAEe,qBAAM,cAAc,CAAC,KAAK,CAAC,EAAA;;oBAArC,OAAO,GAAG,SAA2B;oBAE3C,KAAK,CAAC,OAAO,CAAC,UAAA,CAAC,IAAI,OAAA,CAAC,YAAY,EAAE,CAAC,MAAM,IAAI,CAAC,CAAC,OAAO,EAAE,EAArC,CAAqC,CAAC,CAAA;oBAEzD,sBAAO,OAAO,EAAA;;;;CACf;AAED,MAAM,UAAgB,iCAAiC,CACrD,YAAqB,EACrB,KAAgB,EAChB,aAA0E,EAC1E,cAA8D,EAC9D,mBAAsF;;;;YAEtF,sBAAO,gCAAgC,CACrC,CAAC,YAAY,CAAC,EACd,KAAK,EACL,UAAM,KAAK;oBAAI,sBAAA,aAAa,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAA;yBAAA,EACtC,cAAc,EACd,mBAAmB,CACpB,EAAA;;;CACF"}
\ No newline at end of file
import { TfjsImageRecognitionBase, TNetInput } from 'tfjs-image-recognition-base';
import { AgeGenderNet } from '../ageGenderNet/AgeGenderNet';
import { AgeAndGenderPrediction } from '../ageGenderNet/types';
import { FaceDetection } from '../classes/FaceDetection';
import { FaceLandmarks5 } from '../classes/FaceLandmarks5';
import { FaceLandmarks68 } from '../classes/FaceLandmarks68';
import { FaceExpressionNet } from '../faceExpressionNet/FaceExpressionNet';
import { FaceExpressionPrediction } from '../faceExpressionNet/types';
import { FaceExpressions } from '../faceExpressionNet/FaceExpressions';
import { FaceLandmark68Net } from '../faceLandmarkNet/FaceLandmark68Net';
import { FaceLandmark68TinyNet } from '../faceLandmarkNet/FaceLandmark68TinyNet';
import { FaceRecognitionNet } from '../faceRecognitionNet/FaceRecognitionNet';
......@@ -24,6 +26,7 @@ export declare const nets: {
faceLandmark68TinyNet: FaceLandmark68TinyNet;
faceRecognitionNet: FaceRecognitionNet;
faceExpressionNet: FaceExpressionNet;
ageGenderNet: AgeGenderNet;
};
/**
* Attempts to detect all faces in an image using SSD Mobilenetv1 Network.
......@@ -90,14 +93,21 @@ export declare const detectFaceLandmarksTiny: (input: TNetInput) => Promise<Face
*/
export declare const computeFaceDescriptor: (input: TNetInput) => Promise<Float32Array | Float32Array[]>;
/**
* Recognizes the facial expressions of a face and returns the likelyhood of
* each facial expression.
* Recognizes the facial expressions from a face image.
*
* @param inputs The face image extracted from the bounding box of a face. Can
* also be an array of input images, which will be batch processed.
* @returns An array of facial expressions with corresponding probabilities or array thereof in case of batch input.
* @returns Facial expressions with corresponding probabilities or array thereof in case of batch input.
*/
export declare const recognizeFaceExpressions: (input: TNetInput) => Promise<FaceExpressionPrediction[] | FaceExpressionPrediction[][]>;
export declare const recognizeFaceExpressions: (input: TNetInput) => Promise<FaceExpressions | FaceExpressions[]>;
/**
* Predicts age and gender from a face image.
*
* @param inputs The face image extracted from the bounding box of a face. Can
* also be an array of input images, which will be batch processed.
* @returns Predictions with age, gender and gender probability or array thereof in case of batch input.
*/
export declare const predictAgeAndGender: (input: TNetInput) => Promise<AgeAndGenderPrediction | AgeAndGenderPrediction[]>;
export declare const loadSsdMobilenetv1Model: (url: string) => Promise<void>;
export declare const loadTinyFaceDetectorModel: (url: string) => Promise<void>;
export declare const loadMtcnnModel: (url: string) => Promise<void>;
......@@ -106,6 +116,7 @@ export declare const loadFaceLandmarkModel: (url: string) => Promise<void>;
export declare const loadFaceLandmarkTinyModel: (url: string) => Promise<void>;
export declare const loadFaceRecognitionModel: (url: string) => Promise<void>;
export declare const loadFaceExpressionModel: (url: string) => Promise<void>;
export declare const loadAgeGenderModel: (url: string) => Promise<void>;
export declare const loadFaceDetectionModel: (url: string) => Promise<void>;
export declare const locateFaces: (input: TNetInput, options: SsdMobilenetv1Options) => Promise<FaceDetection[]>;
export declare const detectLandmarks: (input: TNetInput) => Promise<FaceLandmarks68 | FaceLandmarks68[]>;
import { AgeGenderNet } from '../ageGenderNet/AgeGenderNet';
import { FaceExpressionNet } from '../faceExpressionNet/FaceExpressionNet';
import { FaceLandmark68Net } from '../faceLandmarkNet/FaceLandmark68Net';
import { FaceLandmark68TinyNet } from '../faceLandmarkNet/FaceLandmark68TinyNet';
......@@ -14,7 +15,8 @@ export var nets = {
faceLandmark68Net: new FaceLandmark68Net(),
faceLandmark68TinyNet: new FaceLandmark68TinyNet(),
faceRecognitionNet: new FaceRecognitionNet(),
faceExpressionNet: new FaceExpressionNet()
faceExpressionNet: new FaceExpressionNet(),
ageGenderNet: new AgeGenderNet()
};
/**
* Attempts to detect all faces in an image using SSD Mobilenetv1 Network.
......@@ -93,16 +95,25 @@ export var computeFaceDescriptor = function (input) {
return nets.faceRecognitionNet.computeFaceDescriptor(input);
};
/**
* Recognizes the facial expressions of a face and returns the likelyhood of
* each facial expression.
* Recognizes the facial expressions from a face image.
*
* @param inputs The face image extracted from the bounding box of a face. Can
* also be an array of input images, which will be batch processed.
* @returns An array of facial expressions with corresponding probabilities or array thereof in case of batch input.
* @returns Facial expressions with corresponding probabilities or array thereof in case of batch input.
*/
export var recognizeFaceExpressions = function (input) {
return nets.faceExpressionNet.predictExpressions(input);
};
/**
* Predicts age and gender from a face image.
*
* @param inputs The face image extracted from the bounding box of a face. Can
* also be an array of input images, which will be batch processed.
* @returns Predictions with age, gender and gender probability or array thereof in case of batch input.
*/
export var predictAgeAndGender = function (input) {
return nets.ageGenderNet.predictAgeAndGender(input);
};
export var loadSsdMobilenetv1Model = function (url) { return nets.ssdMobilenetv1.load(url); };
export var loadTinyFaceDetectorModel = function (url) { return nets.tinyFaceDetector.load(url); };
export var loadMtcnnModel = function (url) { return nets.mtcnn.load(url); };
......@@ -111,6 +122,7 @@ export var loadFaceLandmarkModel = function (url) { return nets.faceLandmark68Ne
export var loadFaceLandmarkTinyModel = function (url) { return nets.faceLandmark68TinyNet.load(url); };
export var loadFaceRecognitionModel = function (url) { return nets.faceRecognitionNet.load(url); };
export var loadFaceExpressionModel = function (url) { return nets.faceExpressionNet.load(url); };
export var loadAgeGenderModel = function (url) { return nets.ageGenderNet.load(url); };
// backward compatibility
export var loadFaceDetectionModel = loadSsdMobilenetv1Model;
export var locateFaces = ssdMobilenetv1;
......
{"version":3,"file":"nets.js","sourceRoot":"","sources":["../../../src/globalApi/nets.ts"],"names":[],"mappings":"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"}
\ No newline at end of file
{"version":3,"file":"nets.js","sourceRoot":"","sources":["../../../src/globalApi/nets.ts"],"names":[],"mappings":"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"}
\ No newline at end of file
import * as tf from '@tensorflow/tfjs-core';
import { draw as drawBase } from 'tfjs-image-recognition-base';
import * as drawExtended from './draw';
export { tf };
export * from 'tfjs-image-recognition-base';
export * from './ageGenderNet/index';
declare const draw: {
drawContour(ctx: CanvasRenderingContext2D, points: import("tfjs-image-recognition-base").Point[], isClosed?: boolean): void;
drawDetections(canvasArg: string | HTMLCanvasElement, detections: import("tfjs-image-recognition-base").IRect | import("tfjs-image-recognition-base").IBoundingBox | import("./classes").FaceDetection | {
detection: import("./classes").FaceDetection;
} | drawExtended.TDrawDetectionsInput[]): void;
drawFaceExpressions(canvasArg: string | HTMLCanvasElement, faceExpressions: import("./faceExpressionNet").FaceExpressions | {
expressions: import("./faceExpressionNet").FaceExpressions;
} | drawExtended.DrawFaceExpressionsInput[], minConfidence?: number, textFieldAnchor?: import("tfjs-image-recognition-base").IPoint | undefined): void;
drawFaceLandmarks(canvasArg: string | HTMLCanvasElement, faceLandmarks: import("./classes").FaceLandmarks | import("./factories").WithFaceLandmarks<{
detection: import("./classes").FaceDetection;
}, import("./classes").FaceLandmarks68> | drawExtended.DrawFaceLandmarksInput[]): void;
DrawFaceLandmarksOptions: typeof drawExtended.DrawFaceLandmarksOptions;
DrawFaceLandmarks: typeof drawExtended.DrawFaceLandmarks;
DrawBoxOptions: typeof drawBase.DrawBoxOptions;
DrawBox: typeof drawBase.DrawBox;
AnchorPosition: typeof drawBase.AnchorPosition;
DrawTextFieldOptions: typeof drawBase.DrawTextFieldOptions;
DrawTextField: typeof drawBase.DrawTextField;
};
export { draw };
export * from './classes/index';
export * from './dom/index';
export * from './faceExpressionNet/index';
......
import * as tslib_1 from "tslib";
import * as tf from '@tensorflow/tfjs-core';
import { draw as drawBase } from 'tfjs-image-recognition-base';
import * as drawExtended from './draw';
export { tf };
export * from 'tfjs-image-recognition-base';
export * from './ageGenderNet/index';
var draw = tslib_1.__assign({}, drawBase, drawExtended);
export { draw };
export * from './classes/index';
export * from './dom/index';
export * from './faceExpressionNet/index';
......
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,uBAAuB,CAAC;AAE5C,OAAO,EACL,EAAE,EACH,CAAA;AAED,cAAc,6BAA6B,CAAC;AAE5C,cAAc,iBAAiB,CAAC;AAChC,cAAc,aAAa,CAAA;AAC3B,cAAc,2BAA2B,CAAC;AAC1C,cAAc,yBAAyB,CAAC;AACxC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,mBAAmB,CAAC;AAClC,cAAc,mBAAmB,CAAC;AAClC,cAAc,eAAe,CAAC;AAC9B,cAAc,wBAAwB,CAAC;AACvC,cAAc,0BAA0B,CAAC;AACzC,cAAc,oBAAoB,CAAC;AAEnC,cAAc,qBAAqB,CAAC;AACpC,cAAc,iBAAiB,CAAC"}
\ No newline at end of file
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":";AAAA,OAAO,KAAK,EAAE,MAAM,uBAAuB,CAAC;AAC5C,OAAO,EAAE,IAAI,IAAI,QAAQ,EAAE,MAAM,6BAA6B,CAAC;AAE/D,OAAO,KAAK,YAAY,MAAM,QAAQ,CAAC;AAEvC,OAAO,EACL,EAAE,EACH,CAAA;AAED,cAAc,6BAA6B,CAAC;AAE5C,cAAc,sBAAsB,CAAC;AACrC,IAAM,IAAI,wBAAO,QAAQ,EAAK,YAAY,CAAE,CAAA;AAC5C,OAAO,EAAE,IAAI,EAAE,CAAA;AAEf,cAAc,iBAAiB,CAAC;AAChC,cAAc,aAAa,CAAA;AAC3B,cAAc,2BAA2B,CAAC;AAC1C,cAAc,yBAAyB,CAAC;AACxC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,mBAAmB,CAAC;AAClC,cAAc,mBAAmB,CAAC;AAClC,cAAc,eAAe,CAAC;AAC9B,cAAc,wBAAwB,CAAC;AACvC,cAAc,0BAA0B,CAAC;AACzC,cAAc,oBAAoB,CAAC;AAEnC,cAAc,qBAAqB,CAAC;AACpC,cAAc,iBAAiB,CAAC"}
\ No newline at end of file
import { BoundingBox, IPoint } from 'tfjs-image-recognition-base';
export declare function minBbox(pts: IPoint[]): BoundingBox;
import { BoundingBox } from 'tfjs-image-recognition-base';
export function minBbox(pts) {
var xs = pts.map(function (pt) { return pt.x; });
var ys = pts.map(function (pt) { return pt.y; });
var minX = xs.reduce(function (min, x) { return x < min ? x : min; }, Infinity);
var minY = ys.reduce(function (min, y) { return y < min ? y : min; }, Infinity);
var maxX = xs.reduce(function (max, x) { return max < x ? x : max; }, 0);
var maxY = ys.reduce(function (max, y) { return max < y ? y : max; }, 0);
return new BoundingBox(minX, minY, maxX, maxY);
}
//# sourceMappingURL=minBbox.js.map
\ No newline at end of file
{"version":3,"file":"minBbox.js","sourceRoot":"","sources":["../../src/minBbox.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAU,MAAM,6BAA6B,CAAC;AAElE,MAAM,UAAU,OAAO,CAAC,GAAa;IACnC,IAAM,EAAE,GAAG,GAAG,CAAC,GAAG,CAAC,UAAA,EAAE,IAAI,OAAA,EAAE,CAAC,CAAC,EAAJ,CAAI,CAAC,CAAA;IAC9B,IAAM,EAAE,GAAG,GAAG,CAAC,GAAG,CAAC,UAAA,EAAE,IAAI,OAAA,EAAE,CAAC,CAAC,EAAJ,CAAI,CAAC,CAAA;IAC9B,IAAM,IAAI,GAAG,EAAE,CAAC,MAAM,CAAC,UAAC,GAAG,EAAE,CAAC,IAAK,OAAA,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,EAAjB,CAAiB,EAAE,QAAQ,CAAC,CAAA;IAC/D,IAAM,IAAI,GAAG,EAAE,CAAC,MAAM,CAAC,UAAC,GAAG,EAAE,CAAC,IAAK,OAAA,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,EAAjB,CAAiB,EAAE,QAAQ,CAAC,CAAA;IAC/D,IAAM,IAAI,GAAG,EAAE,CAAC,MAAM,CAAC,UAAC,GAAG,EAAE,CAAC,IAAK,OAAA,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,EAAjB,CAAiB,EAAE,CAAC,CAAC,CAAA;IACxD,IAAM,IAAI,GAAG,EAAE,CAAC,MAAM,CAAC,UAAC,GAAG,EAAE,CAAC,IAAK,OAAA,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,EAAjB,CAAiB,EAAE,CAAC,CAAC,CAAA;IAExD,OAAO,IAAI,WAAW,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAA;AAChD,CAAC"}
\ No newline at end of file
import { IDimensions } from 'tfjs-image-recognition-base';
export declare function resizeResults<T>(results: T, { width, height }: IDimensions): T;
export declare function resizeResults<T>(results: T, dimensions: IDimensions): T;
import { Dimensions } from 'tfjs-image-recognition-base';
import { FaceDetection } from './classes/FaceDetection';
import { FaceLandmarks } from './classes/FaceLandmarks';
import { extendWithFaceDetection } from './factories/WithFaceDetection';
import { extendWithFaceLandmarks } from './factories/WithFaceLandmarks';
export function resizeResults(results, _a) {
var width = _a.width, height = _a.height;
import { extendWithFaceDetection, isWithFaceDetection } from './factories/WithFaceDetection';
import { extendWithFaceLandmarks, isWithFaceLandmarks } from './factories/WithFaceLandmarks';
export function resizeResults(results, dimensions) {
var _a = new Dimensions(dimensions.width, dimensions.height), width = _a.width, height = _a.height;
if (width <= 0 || height <= 0) {
throw new Error("resizeResults - invalid dimensions: " + JSON.stringify({ width: width, height: height }));
}
if (Array.isArray(results)) {
return results.map(function (obj) { return resizeResults(obj, { width: width, height: height }); });
}
var hasLandmarks = results['unshiftedLandmarks'] && results['unshiftedLandmarks'] instanceof FaceLandmarks;
var hasDetection = results['detection'] && results['detection'] instanceof FaceDetection;
if (hasLandmarks) {
var resizedDetection = results['detection'].forSize(width, height);
var resizedLandmarks = results['unshiftedLandmarks'].forSize(resizedDetection.box.width, resizedDetection.box.height);
if (isWithFaceLandmarks(results)) {
var resizedDetection = results.detection.forSize(width, height);
var resizedLandmarks = results.unshiftedLandmarks.forSize(resizedDetection.box.width, resizedDetection.box.height);
return extendWithFaceLandmarks(extendWithFaceDetection(results, resizedDetection), resizedLandmarks);
}
if (hasDetection) {
return extendWithFaceDetection(results, results['detection'].forSize(width, height));
if (isWithFaceDetection(results)) {
return extendWithFaceDetection(results, results.detection.forSize(width, height));
}
if (results instanceof FaceLandmarks || results instanceof FaceDetection) {
return results.forSize(width, height);
......
{"version":3,"file":"resizeResults.js","sourceRoot":"","sources":["../../src/resizeResults.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AACxD,OAAO,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AACxD,OAAO,EAAE,uBAAuB,EAAE,MAAM,+BAA+B,CAAC;AACxE,OAAO,EAAE,uBAAuB,EAAE,MAAM,+BAA+B,CAAC;AAExE,MAAM,UAAU,aAAa,CAAI,OAAU,EAAE,EAA8B;QAA5B,gBAAK,EAAE,kBAAM;IAE1D,IAAI,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE;QAC1B,OAAO,OAAO,CAAC,GAAG,CAAC,UAAA,GAAG,IAAI,OAAA,aAAa,CAAC,GAAG,EAAE,EAAE,KAAK,OAAA,EAAE,MAAM,QAAA,EAAE,CAAC,EAArC,CAAqC,CAAa,CAAA;KAC7E;IAED,IAAM,YAAY,GAAG,OAAO,CAAC,oBAAoB,CAAC,IAAI,OAAO,CAAC,oBAAoB,CAAC,YAAY,aAAa,CAAA;IAC5G,IAAM,YAAY,GAAG,OAAO,CAAC,WAAW,CAAC,IAAI,OAAO,CAAC,WAAW,CAAC,YAAY,aAAa,CAAA;IAE1F,IAAI,YAAY,EAAE;QAChB,IAAM,gBAAgB,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,MAAM,CAAC,CAAA;QACpE,IAAM,gBAAgB,GAAG,OAAO,CAAC,oBAAoB,CAAC,CAAC,OAAO,CAAC,gBAAgB,CAAC,GAAG,CAAC,KAAK,EAAE,gBAAgB,CAAC,GAAG,CAAC,MAAM,CAAC,CAAA;QAEvH,OAAO,uBAAuB,CAAC,uBAAuB,CAAC,OAAc,EAAE,gBAAgB,CAAC,EAAE,gBAAgB,CAAC,CAAA;KAC5G;IAED,IAAI,YAAY,EAAE;QAChB,OAAO,uBAAuB,CAAC,OAAc,EAAE,OAAO,CAAC,WAAW,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC,CAAA;KAC5F;IAED,IAAI,OAAO,YAAY,aAAa,IAAI,OAAO,YAAY,aAAa,EAAE;QACxE,OAAQ,OAAe,CAAC,OAAO,CAAC,KAAK,EAAE,MAAM,CAAC,CAAA;KAC/C;IAED,OAAO,OAAO,CAAA;AAChB,CAAC"}
\ No newline at end of file
{"version":3,"file":"resizeResults.js","sourceRoot":"","sources":["../../src/resizeResults.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAe,MAAM,6BAA6B,CAAC;AAEtE,OAAO,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AACxD,OAAO,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AACxD,OAAO,EAAE,uBAAuB,EAAE,mBAAmB,EAAE,MAAM,+BAA+B,CAAC;AAC7F,OAAO,EAAE,uBAAuB,EAAE,mBAAmB,EAAE,MAAM,+BAA+B,CAAC;AAE7F,MAAM,UAAU,aAAa,CAAI,OAAU,EAAE,UAAuB;IAE5D,IAAA,wDAAuE,EAArE,gBAAK,EAAE,kBAA8D,CAAA;IAE7E,IAAI,KAAK,IAAI,CAAC,IAAI,MAAM,IAAI,CAAC,EAAE;QAC7B,MAAM,IAAI,KAAK,CAAC,yCAAuC,IAAI,CAAC,SAAS,CAAC,EAAE,KAAK,OAAA,EAAE,MAAM,QAAA,EAAE,CAAG,CAAC,CAAA;KAC5F;IAED,IAAI,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE;QAC1B,OAAO,OAAO,CAAC,GAAG,CAAC,UAAA,GAAG,IAAI,OAAA,aAAa,CAAC,GAAG,EAAE,EAAE,KAAK,OAAA,EAAE,MAAM,QAAA,EAAE,CAAC,EAArC,CAAqC,CAAa,CAAA;KAC7E;IAED,IAAI,mBAAmB,CAAC,OAAO,CAAC,EAAE;QAChC,IAAM,gBAAgB,GAAG,OAAO,CAAC,SAAS,CAAC,OAAO,CAAC,KAAK,EAAE,MAAM,CAAC,CAAA;QACjE,IAAM,gBAAgB,GAAG,OAAO,CAAC,kBAAkB,CAAC,OAAO,CAAC,gBAAgB,CAAC,GAAG,CAAC,KAAK,EAAE,gBAAgB,CAAC,GAAG,CAAC,MAAM,CAAC,CAAA;QAEpH,OAAO,uBAAuB,CAAC,uBAAuB,CAAC,OAAO,EAAE,gBAAgB,CAAC,EAAE,gBAAgB,CAAC,CAAA;KACrG;IAED,IAAI,mBAAmB,CAAC,OAAO,CAAC,EAAE;QAChC,OAAO,uBAAuB,CAAC,OAAO,EAAE,OAAO,CAAC,SAAS,CAAC,OAAO,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC,CAAA;KAClF;IAED,IAAI,OAAO,YAAY,aAAa,IAAI,OAAO,YAAY,aAAa,EAAE;QACxE,OAAQ,OAAe,CAAC,OAAO,CAAC,KAAK,EAAE,MAAM,CAAC,CAAA;KAC/C;IAED,OAAO,OAAO,CAAA;AAChB,CAAC"}
\ No newline at end of file
import * as tf from '@tensorflow/tfjs-core';
import { NetInput, NeuralNetwork, TfjsImageRecognitionBase, TNetInput } from 'tfjs-image-recognition-base';
import { TinyXceptionParams } from './types';
export declare class TinyXception extends NeuralNetwork<TinyXceptionParams> {
private _numMainBlocks;
constructor(numMainBlocks: number);
forwardInput(input: NetInput): tf.Tensor4D;
forward(input: TNetInput): Promise<tf.Tensor4D>;
protected getDefaultModelName(): string;
protected extractParamsFromWeigthMap(weightMap: tf.NamedTensorMap): {
params: TinyXceptionParams;
paramMappings: TfjsImageRecognitionBase.ParamMapping[];
};
protected extractParams(weights: Float32Array): {
params: TinyXceptionParams;
paramMappings: TfjsImageRecognitionBase.ParamMapping[];
};
}
import * as tslib_1 from "tslib";
import * as tf from '@tensorflow/tfjs-core';
import { NeuralNetwork, normalize, range, toNetInput, } from 'tfjs-image-recognition-base';
import { depthwiseSeparableConv } from '../common/depthwiseSeparableConv';
import { extractParams } from './extractParams';
import { extractParamsFromWeigthMap } from './extractParamsFromWeigthMap';
function conv(x, params, stride) {
return tf.add(tf.conv2d(x, params.filters, stride, 'same'), params.bias);
}
function reductionBlock(x, params, isActivateInput) {
if (isActivateInput === void 0) { isActivateInput = true; }
var out = isActivateInput ? tf.relu(x) : x;
out = depthwiseSeparableConv(out, params.separable_conv0, [1, 1]);
out = depthwiseSeparableConv(tf.relu(out), params.separable_conv1, [1, 1]);
out = tf.maxPool(out, [3, 3], [2, 2], 'same');
out = tf.add(out, conv(x, params.expansion_conv, [2, 2]));
return out;
}
function mainBlock(x, params) {
var out = depthwiseSeparableConv(tf.relu(x), params.separable_conv0, [1, 1]);
out = depthwiseSeparableConv(tf.relu(out), params.separable_conv1, [1, 1]);
out = depthwiseSeparableConv(tf.relu(out), params.separable_conv2, [1, 1]);
out = tf.add(out, x);
return out;
}
var TinyXception = /** @class */ (function (_super) {
tslib_1.__extends(TinyXception, _super);
function TinyXception(numMainBlocks) {
var _this = _super.call(this, 'TinyXception') || this;
_this._numMainBlocks = numMainBlocks;
return _this;
}
TinyXception.prototype.forwardInput = function (input) {
var _this = this;
var params = this.params;
if (!params) {
throw new Error('TinyXception - load model before inference');
}
return tf.tidy(function () {
var batchTensor = input.toBatchTensor(112, true);
var meanRgb = [122.782, 117.001, 104.298];
var normalized = normalize(batchTensor, meanRgb).div(tf.scalar(256));
var out = tf.relu(conv(normalized, params.entry_flow.conv_in, [2, 2]));
out = reductionBlock(out, params.entry_flow.reduction_block_0, false);
out = reductionBlock(out, params.entry_flow.reduction_block_1);
range(_this._numMainBlocks, 0, 1).forEach(function (idx) {
out = mainBlock(out, params.middle_flow["main_block_" + idx]);
});
out = reductionBlock(out, params.exit_flow.reduction_block);
out = tf.relu(depthwiseSeparableConv(out, params.exit_flow.separable_conv, [1, 1]));
return out;
});
};
TinyXception.prototype.forward = function (input) {
return tslib_1.__awaiter(this, void 0, void 0, function () {
var _a;
return tslib_1.__generator(this, function (_b) {
switch (_b.label) {
case 0:
_a = this.forwardInput;
return [4 /*yield*/, toNetInput(input)];
case 1: return [2 /*return*/, _a.apply(this, [_b.sent()])];
}
});
});
};
TinyXception.prototype.getDefaultModelName = function () {
return 'tiny_xception_model';
};
TinyXception.prototype.extractParamsFromWeigthMap = function (weightMap) {
return extractParamsFromWeigthMap(weightMap, this._numMainBlocks);
};
TinyXception.prototype.extractParams = function (weights) {
return extractParams(weights, this._numMainBlocks);
};
return TinyXception;
}(NeuralNetwork));
export { TinyXception };
//# sourceMappingURL=TinyXception.js.map
\ No newline at end of file
{"version":3,"file":"TinyXception.js","sourceRoot":"","sources":["../../../src/xception/TinyXception.ts"],"names":[],"mappings":"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"}
\ No newline at end of file
import { TfjsImageRecognitionBase } from 'tfjs-image-recognition-base';
import { TinyXceptionParams } from './types';
export declare function extractParams(weights: Float32Array, numMainBlocks: number): {
params: TinyXceptionParams;
paramMappings: TfjsImageRecognitionBase.ParamMapping[];
};
import { range, TfjsImageRecognitionBase } from 'tfjs-image-recognition-base';
function extractorsFactory(extractWeights, paramMappings) {
var extractConvParams = TfjsImageRecognitionBase.extractConvParamsFactory(extractWeights, paramMappings);
var extractSeparableConvParams = TfjsImageRecognitionBase.extractSeparableConvParamsFactory(extractWeights, paramMappings);
function extractReductionBlockParams(channelsIn, channelsOut, mappedPrefix) {
var separable_conv0 = extractSeparableConvParams(channelsIn, channelsOut, mappedPrefix + "/separable_conv0");
var separable_conv1 = extractSeparableConvParams(channelsOut, channelsOut, mappedPrefix + "/separable_conv1");
var expansion_conv = extractConvParams(channelsIn, channelsOut, 1, mappedPrefix + "/expansion_conv");
return { separable_conv0: separable_conv0, separable_conv1: separable_conv1, expansion_conv: expansion_conv };
}
function extractMainBlockParams(channels, mappedPrefix) {
var separable_conv0 = extractSeparableConvParams(channels, channels, mappedPrefix + "/separable_conv0");
var separable_conv1 = extractSeparableConvParams(channels, channels, mappedPrefix + "/separable_conv1");
var separable_conv2 = extractSeparableConvParams(channels, channels, mappedPrefix + "/separable_conv2");
return { separable_conv0: separable_conv0, separable_conv1: separable_conv1, separable_conv2: separable_conv2 };
}
return {
extractConvParams: extractConvParams,
extractSeparableConvParams: extractSeparableConvParams,
extractReductionBlockParams: extractReductionBlockParams,
extractMainBlockParams: extractMainBlockParams
};
}
export function extractParams(weights, numMainBlocks) {
var paramMappings = [];
var _a = TfjsImageRecognitionBase.extractWeightsFactory(weights), extractWeights = _a.extractWeights, getRemainingWeights = _a.getRemainingWeights;
var _b = extractorsFactory(extractWeights, paramMappings), extractConvParams = _b.extractConvParams, extractSeparableConvParams = _b.extractSeparableConvParams, extractReductionBlockParams = _b.extractReductionBlockParams, extractMainBlockParams = _b.extractMainBlockParams;
var entry_flow_conv_in = extractConvParams(3, 32, 3, 'entry_flow/conv_in');
var entry_flow_reduction_block_0 = extractReductionBlockParams(32, 64, 'entry_flow/reduction_block_0');
var entry_flow_reduction_block_1 = extractReductionBlockParams(64, 128, 'entry_flow/reduction_block_1');
var entry_flow = {
conv_in: entry_flow_conv_in,
reduction_block_0: entry_flow_reduction_block_0,
reduction_block_1: entry_flow_reduction_block_1
};
var middle_flow = {};
range(numMainBlocks, 0, 1).forEach(function (idx) {
middle_flow["main_block_" + idx] = extractMainBlockParams(128, "middle_flow/main_block_" + idx);
});
var exit_flow_reduction_block = extractReductionBlockParams(128, 256, 'exit_flow/reduction_block');
var exit_flow_separable_conv = extractSeparableConvParams(256, 512, 'exit_flow/separable_conv');
var exit_flow = {
reduction_block: exit_flow_reduction_block,
separable_conv: exit_flow_separable_conv
};
if (getRemainingWeights().length !== 0) {
throw new Error("weights remaing after extract: " + getRemainingWeights().length);
}
return {
paramMappings: paramMappings,
params: { entry_flow: entry_flow, middle_flow: middle_flow, exit_flow: exit_flow }
};
}
//# sourceMappingURL=extractParams.js.map
\ No newline at end of file
{"version":3,"file":"extractParams.js","sourceRoot":"","sources":["../../../src/xception/extractParams.ts"],"names":[],"mappings":"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"}
\ No newline at end of file
import * as tf from '@tensorflow/tfjs-core';
import { TfjsImageRecognitionBase } from 'tfjs-image-recognition-base';
import { TinyXceptionParams } from './types';
export declare function extractParamsFromWeigthMap(weightMap: tf.NamedTensorMap, numMainBlocks: number): {
params: TinyXceptionParams;
paramMappings: TfjsImageRecognitionBase.ParamMapping[];
};
import { TfjsImageRecognitionBase, range } from 'tfjs-image-recognition-base';
import { loadConvParamsFactory } from '../common/loadConvParamsFactory';
function loadParamsFactory(weightMap, paramMappings) {
var extractWeightEntry = TfjsImageRecognitionBase.extractWeightEntryFactory(weightMap, paramMappings);
var extractConvParams = loadConvParamsFactory(extractWeightEntry);
var extractSeparableConvParams = TfjsImageRecognitionBase.loadSeparableConvParamsFactory(extractWeightEntry);
function extractReductionBlockParams(mappedPrefix) {
var separable_conv0 = extractSeparableConvParams(mappedPrefix + "/separable_conv0");
var separable_conv1 = extractSeparableConvParams(mappedPrefix + "/separable_conv1");
var expansion_conv = extractConvParams(mappedPrefix + "/expansion_conv");
return { separable_conv0: separable_conv0, separable_conv1: separable_conv1, expansion_conv: expansion_conv };
}
function extractMainBlockParams(mappedPrefix) {
var separable_conv0 = extractSeparableConvParams(mappedPrefix + "/separable_conv0");
var separable_conv1 = extractSeparableConvParams(mappedPrefix + "/separable_conv1");
var separable_conv2 = extractSeparableConvParams(mappedPrefix + "/separable_conv2");
return { separable_conv0: separable_conv0, separable_conv1: separable_conv1, separable_conv2: separable_conv2 };
}
return {
extractConvParams: extractConvParams,
extractSeparableConvParams: extractSeparableConvParams,
extractReductionBlockParams: extractReductionBlockParams,
extractMainBlockParams: extractMainBlockParams
};
}
export function extractParamsFromWeigthMap(weightMap, numMainBlocks) {
var paramMappings = [];
var _a = loadParamsFactory(weightMap, paramMappings), extractConvParams = _a.extractConvParams, extractSeparableConvParams = _a.extractSeparableConvParams, extractReductionBlockParams = _a.extractReductionBlockParams, extractMainBlockParams = _a.extractMainBlockParams;
var entry_flow_conv_in = extractConvParams('entry_flow/conv_in');
var entry_flow_reduction_block_0 = extractReductionBlockParams('entry_flow/reduction_block_0');
var entry_flow_reduction_block_1 = extractReductionBlockParams('entry_flow/reduction_block_1');
var entry_flow = {
conv_in: entry_flow_conv_in,
reduction_block_0: entry_flow_reduction_block_0,
reduction_block_1: entry_flow_reduction_block_1
};
var middle_flow = {};
range(numMainBlocks, 0, 1).forEach(function (idx) {
middle_flow["main_block_" + idx] = extractMainBlockParams("middle_flow/main_block_" + idx);
});
var exit_flow_reduction_block = extractReductionBlockParams('exit_flow/reduction_block');
var exit_flow_separable_conv = extractSeparableConvParams('exit_flow/separable_conv');
var exit_flow = {
reduction_block: exit_flow_reduction_block,
separable_conv: exit_flow_separable_conv
};
TfjsImageRecognitionBase.disposeUnusedWeightTensors(weightMap, paramMappings);
return { params: { entry_flow: entry_flow, middle_flow: middle_flow, exit_flow: exit_flow }, paramMappings: paramMappings };
}
//# sourceMappingURL=extractParamsFromWeigthMap.js.map
\ No newline at end of file
{"version":3,"file":"extractParamsFromWeigthMap.js","sourceRoot":"","sources":["../../../src/xception/extractParamsFromWeigthMap.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,wBAAwB,EAAE,KAAK,EAAE,MAAM,6BAA6B,CAAC;AAE9E,OAAO,EAAE,qBAAqB,EAAE,MAAM,iCAAiC,CAAC;AAGxE,SAAS,iBAAiB,CAAC,SAAc,EAAE,aAAsD;IAE/F,IAAM,kBAAkB,GAAG,wBAAwB,CAAC,yBAAyB,CAAC,SAAS,EAAE,aAAa,CAAC,CAAA;IAEvG,IAAM,iBAAiB,GAAG,qBAAqB,CAAC,kBAAkB,CAAC,CAAA;IACnE,IAAM,0BAA0B,GAAG,wBAAwB,CAAC,8BAA8B,CAAC,kBAAkB,CAAC,CAAA;IAE9G,SAAS,2BAA2B,CAAC,YAAoB;QAEvD,IAAM,eAAe,GAAG,0BAA0B,CAAI,YAAY,qBAAkB,CAAC,CAAA;QACrF,IAAM,eAAe,GAAG,0BAA0B,CAAI,YAAY,qBAAkB,CAAC,CAAA;QACrF,IAAM,cAAc,GAAG,iBAAiB,CAAI,YAAY,oBAAiB,CAAC,CAAA;QAE1E,OAAO,EAAE,eAAe,iBAAA,EAAE,eAAe,iBAAA,EAAE,cAAc,gBAAA,EAAE,CAAA;IAC7D,CAAC;IAED,SAAS,sBAAsB,CAAC,YAAoB;QAElD,IAAM,eAAe,GAAG,0BAA0B,CAAI,YAAY,qBAAkB,CAAC,CAAA;QACrF,IAAM,eAAe,GAAG,0BAA0B,CAAI,YAAY,qBAAkB,CAAC,CAAA;QACrF,IAAM,eAAe,GAAG,0BAA0B,CAAI,YAAY,qBAAkB,CAAC,CAAA;QAErF,OAAO,EAAE,eAAe,iBAAA,EAAE,eAAe,iBAAA,EAAE,eAAe,iBAAA,EAAE,CAAA;IAC9D,CAAC;IAED,OAAO;QACL,iBAAiB,mBAAA;QACjB,0BAA0B,4BAAA;QAC1B,2BAA2B,6BAAA;QAC3B,sBAAsB,wBAAA;KACvB,CAAA;AACH,CAAC;AAED,MAAM,UAAU,0BAA0B,CACxC,SAA4B,EAC5B,aAAqB;IAGrB,IAAM,aAAa,GAA4C,EAAE,CAAA;IAE3D,IAAA,gDAKyC,EAJ7C,wCAAiB,EACjB,0DAA0B,EAC1B,4DAA2B,EAC3B,kDAC6C,CAAA;IAE/C,IAAM,kBAAkB,GAAG,iBAAiB,CAAC,oBAAoB,CAAC,CAAA;IAClE,IAAM,4BAA4B,GAAG,2BAA2B,CAAC,8BAA8B,CAAC,CAAA;IAChG,IAAM,4BAA4B,GAAG,2BAA2B,CAAC,8BAA8B,CAAC,CAAA;IAEhG,IAAM,UAAU,GAAG;QACjB,OAAO,EAAE,kBAAkB;QAC3B,iBAAiB,EAAE,4BAA4B;QAC/C,iBAAiB,EAAE,4BAA4B;KAChD,CAAA;IAED,IAAM,WAAW,GAAG,EAAE,CAAA;IACtB,KAAK,CAAC,aAAa,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,UAAC,GAAG;QACrC,WAAW,CAAC,gBAAc,GAAK,CAAC,GAAG,sBAAsB,CAAC,4BAA0B,GAAK,CAAC,CAAA;IAC5F,CAAC,CAAC,CAAA;IAEF,IAAM,yBAAyB,GAAG,2BAA2B,CAAC,2BAA2B,CAAC,CAAA;IAC1F,IAAM,wBAAwB,GAAG,0BAA0B,CAAC,0BAA0B,CAAC,CAAA;IAEvF,IAAM,SAAS,GAAG;QAChB,eAAe,EAAE,yBAAyB;QAC1C,cAAc,EAAE,wBAAwB;KACzC,CAAA;IAED,wBAAwB,CAAC,0BAA0B,CAAC,SAAS,EAAE,aAAa,CAAC,CAAA;IAE7E,OAAO,EAAE,MAAM,EAAE,EAAE,UAAU,YAAA,EAAE,WAAW,aAAA,EAAE,SAAS,WAAA,EAAE,EAAE,aAAa,eAAA,EAAE,CAAA;AAC1E,CAAC"}
\ No newline at end of file
export * from './TinyXception';
export * from './TinyXception';
//# sourceMappingURL=index.js.map
\ No newline at end of file
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/xception/index.ts"],"names":[],"mappings":"AAAA,cAAc,gBAAgB,CAAC"}
\ No newline at end of file
import { TfjsImageRecognitionBase } from "tfjs-image-recognition-base";
export declare type ReductionBlockParams = {
separable_conv0: TfjsImageRecognitionBase.SeparableConvParams;
separable_conv1: TfjsImageRecognitionBase.SeparableConvParams;
expansion_conv: TfjsImageRecognitionBase.ConvParams;
};
export declare type MainBlockParams = {
separable_conv0: TfjsImageRecognitionBase.SeparableConvParams;
separable_conv1: TfjsImageRecognitionBase.SeparableConvParams;
separable_conv2: TfjsImageRecognitionBase.SeparableConvParams;
};
export declare type TinyXceptionParams = {
entry_flow: {
conv_in: TfjsImageRecognitionBase.ConvParams;
reduction_block_0: ReductionBlockParams;
reduction_block_1: ReductionBlockParams;
};
middle_flow: any;
exit_flow: {
reduction_block: ReductionBlockParams;
separable_conv: TfjsImageRecognitionBase.SeparableConvParams;
};
};
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/xception/types.ts"],"names":[],"mappings":""}
\ No newline at end of file
This source diff could not be displayed because it is too large. You can view the blob instead.
This source diff could not be displayed because it is too large. You can view the blob instead.
This source diff could not be displayed because it is too large. You can view the blob instead.
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment