Commit 5c7e120f authored by vincent's avatar 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 });
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
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":";;AAAA,2EAA6H;AAE7H,sCAAqC;AACrC,iDAAgD;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,mCAAK,CAAC,CAAC,EAAE,CAAC,CAAC;QAEtB,IAAA,qBAAK,EAAE,uBAAM,CAAY;QACjC,IAAI,CAAC,QAAQ,GAAG,IAAI,wCAAU,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,mCAAK,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,EAA3C,CAA2C,CAClD,CAAA;IACH,CAAC;IAED,sBAAW,gCAAK;aAAhB,cAA4B,OAAO,IAAI,mCAAK,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,mCAAK,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,mCAAK,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,6BAAa;gBAC5C,CAAC,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,EAAE;gBACvB,CAAC,CAAC,IAAI,iCAAG,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,4CAAc,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,kCAAI,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,iBAAO,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;AAzGY,sCAAa"}
\ 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;
}>;
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
{"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":";;AAAA,0CAA4C;AAG5C,mEAAkE;AAGlE,SAAgB,WAAW,CACzB,CAAc,EACd,gBAAmC,EACnC,YAA6B;IAA7B,6BAAA,EAAA,oBAA6B;IAE7B,OAAO,EAAE,CAAC,IAAI,CAAC;QACb,IAAM,IAAI,GAAG,EAAE,CAAC,IAAI,CAClB,YAAY;YACV,CAAC,CAAC,EAAE,CAAC,GAAG,CACN,EAAE,CAAC,MAAM,CAAC,CAAC,EAAG,gBAAgB,CAAC,KAA6C,CAAC,OAAO,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,MAAM,CAAC,EACrG,gBAAgB,CAAC,KAAK,CAAC,IAAI,CAC5B;YACD,CAAC,CAAC,+CAAsB,CAAC,CAAC,EAAE,gBAAgB,CAAC,KAAqD,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAC/F,CAAA;QAChB,IAAM,IAAI,GAAG,+CAAsB,CAAC,IAAI,EAAE,gBAAgB,CAAC,KAAK,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAA;QAEzE,IAAM,GAAG,GAAG,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,CAAgB,CAAA;QACtD,IAAM,IAAI,GAAG,+CAAsB,CAAC,GAAG,EAAE,gBAAgB,CAAC,KAAK,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAA;QAExE,OAAO,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAgB,CAAA;IACjE,CAAC,CAAC,CAAA;AACJ,CAAC;AArBD,kCAqBC;AAED,SAAgB,WAAW,CACzB,CAAc,EACd,gBAAmC,EACnC,YAA6B,EAC7B,WAA2B;IAD3B,6BAAA,EAAA,oBAA6B;IAC7B,4BAAA,EAAA,kBAA2B;IAE3B,OAAO,EAAE,CAAC,IAAI,CAAC;QACb,IAAM,IAAI,GAAG,EAAE,CAAC,IAAI,CAClB,YAAY;YACV,CAAC,CAAC,EAAE,CAAC,GAAG,CACN,EAAE,CAAC,MAAM,CAAC,CAAC,EAAG,gBAAgB,CAAC,KAA6C,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,MAAM,CAAC,EAC5H,gBAAgB,CAAC,KAAK,CAAC,IAAI,CAC5B;YACD,CAAC,CAAC,+CAAsB,CAAC,CAAC,EAAE,gBAAgB,CAAC,KAAqD,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CACtH,CAAA;QAChB,IAAM,IAAI,GAAG,+CAAsB,CAAC,IAAI,EAAE,gBAAgB,CAAC,KAAK,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAA;QAEzE,IAAM,GAAG,GAAG,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,CAAgB,CAAA;QACtD,IAAM,IAAI,GAAG,+CAAsB,CAAC,GAAG,EAAE,gBAAgB,CAAC,KAAK,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAA;QAExE,IAAM,GAAG,GAAG,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAgB,CAAA;QACpE,IAAM,IAAI,GAAG,+CAAsB,CAAC,GAAG,EAAE,gBAAgB,CAAC,KAAK,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAA;QAExE,OAAO,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,CAAgB,CAAA;IAC/E,CAAC,CAAC,CAAA;AACJ,CAAC;AAzBD,kCAyBC"}
\ 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":"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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>>>;
}
"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":"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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>;
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
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