Commit bfd892e5 by vincent

Merge branch 'master' into nodejs

parents fdc7566c df40bb4b
......@@ -4,13 +4,12 @@ node_js:
- "10"
env:
- BACKEND_CPU=true EXCLUDE_UNCOMPRESSED=true
before_script:
- wget -q -O - https://dl-ssl.google.com/linux/linux_signing_key.pub | sudo apt-key add -
- sudo sh -c 'echo "deb http://dl.google.com/linux/chrome/deb/ stable main" >> /etc/apt/sources.list.d/google.list'
- sudo apt-get update
- sudo apt-get install google-chrome-stable
- export DISPLAY=:99.0
- sh -e /etc/init.d/xvfb start
addons:
chrome: stable
before_install:
- export DISPLAY=:99.0
- sh -e /etc/init.d/xvfb start
- sleep 3 # give xvfb some time to start
script:
- npm run test-travis
- npm run build
\ No newline at end of file
......@@ -204,9 +204,9 @@ const detection = await faceapi.detectSingleFace(input)
By default **detectAllFaces** and **detectSingleFace** utilize the SSD Mobilenet V1 Face Detector. You can specify the face detector by passing the corresponding options object:
``` javascript
const detections1 = await faceapi.detectAllFaces(input, new SsdMobilenetv1Options())
const detections2 = await faceapi.detectAllFaces(input, new TinyFaceDetectorOptions())
const detections3 = await faceapi.detectAllFaces(input, new MtcnnOptions())
const detections1 = await faceapi.detectAllFaces(input, new faceapi.SsdMobilenetv1Options())
const detections2 = await faceapi.detectAllFaces(input, new faceapi.inyFaceDetectorOptions())
const detections3 = await faceapi.detectAllFaces(input, new faceapi.MtcnnOptions())
```
You can tune the options of each face detector as shown [here](#usage-face-detection-options).
......@@ -380,7 +380,7 @@ export interface ISsdMobilenetv1Options {
}
// example
const options = new SsdMobilenetv1Options({ minConfidence: 0.8 })
const options = new faceapi.SsdMobilenetv1Options({ minConfidence: 0.8 })
```
### TinyFaceDetectorOptions
......@@ -401,7 +401,7 @@ export interface ITinyFaceDetectorOptions {
}
// example
const options = new TinyFaceDetectorOptions({ inputSize: 320 })
const options = new faceapi.TinyFaceDetectorOptions({ inputSize: 320 })
```
### MtcnnOptions
......@@ -435,7 +435,7 @@ export interface IMtcnnOptions {
}
// example
const options = new MtcnnOptions({ minFaceSize: 100, scaleFactor: 0.8 })
const options = new faceapi.MtcnnOptions({ minFaceSize: 100, scaleFactor: 0.8 })
```
<a name="usage-utility-classes"></a>
......
import { TNetInput } from 'tfjs-image-recognition-base';
import { TinyYolov2Types } from 'tfjs-tiny-yolov2';
import { TinyYolov2 } from '.';
import { FullFaceDescription } from './classes/FullFaceDescription';
import { FaceDetectionNet } from './faceDetectionNet/FaceDetectionNet';
import { FaceLandmark68Net } from './faceLandmarkNet/FaceLandmark68Net';
import { FaceRecognitionNet } from './faceRecognitionNet/FaceRecognitionNet';
import { Mtcnn } from './mtcnn/Mtcnn';
import { MtcnnForwardParams } from './mtcnn/types';
export declare function allFacesSsdMobilenetv1Factory(ssdMobilenetv1: FaceDetectionNet, landmarkNet: FaceLandmark68Net, recognitionNet: FaceRecognitionNet): (input: TNetInput, minConfidence?: number, useBatchProcessing?: boolean) => Promise<FullFaceDescription[]>;
export declare function allFacesTinyYolov2Factory(tinyYolov2: TinyYolov2, landmarkNet: FaceLandmark68Net, recognitionNet: FaceRecognitionNet): (input: TNetInput, forwardParams?: TinyYolov2Types.TinyYolov2ForwardParams, useBatchProcessing?: boolean) => Promise<FullFaceDescription[]>;
export declare function allFacesMtcnnFactory(mtcnn: Mtcnn, recognitionNet: FaceRecognitionNet): (input: TNetInput, mtcnnForwardParams?: MtcnnForwardParams, useBatchProcessing?: boolean) => Promise<FullFaceDescription[]>;
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
var tslib_1 = require("tslib");
var tfjs_image_recognition_base_1 = require("tfjs-image-recognition-base");
var FullFaceDescription_1 = require("./classes/FullFaceDescription");
var dom_1 = require("./dom");
function computeDescriptorsFactory(recognitionNet) {
return function (input, alignedFaceBoxes, useBatchProcessing) {
return tslib_1.__awaiter(this, void 0, void 0, function () {
var alignedFaceCanvases, descriptors, _a;
return tslib_1.__generator(this, function (_b) {
switch (_b.label) {
case 0: return [4 /*yield*/, dom_1.extractFaces(input, alignedFaceBoxes)];
case 1:
alignedFaceCanvases = _b.sent();
if (!useBatchProcessing) return [3 /*break*/, 3];
return [4 /*yield*/, recognitionNet.computeFaceDescriptor(alignedFaceCanvases)];
case 2:
_a = _b.sent();
return [3 /*break*/, 5];
case 3: return [4 /*yield*/, Promise.all(alignedFaceCanvases.map(function (canvas) { return recognitionNet.computeFaceDescriptor(canvas); }))];
case 4:
_a = _b.sent();
_b.label = 5;
case 5:
descriptors = _a;
return [2 /*return*/, descriptors];
}
});
});
};
}
function allFacesFactory(detectFaces, landmarkNet, recognitionNet) {
var computeDescriptors = computeDescriptorsFactory(recognitionNet);
return function (input, useBatchProcessing) {
if (useBatchProcessing === void 0) { useBatchProcessing = false; }
return tslib_1.__awaiter(this, void 0, void 0, function () {
var detections, faceCanvases, faceLandmarksByFace, _a, alignedFaceBoxes, descriptors;
return tslib_1.__generator(this, function (_b) {
switch (_b.label) {
case 0: return [4 /*yield*/, detectFaces(input)];
case 1:
detections = _b.sent();
return [4 /*yield*/, dom_1.extractFaces(input, detections)];
case 2:
faceCanvases = _b.sent();
if (!useBatchProcessing) return [3 /*break*/, 4];
return [4 /*yield*/, landmarkNet.detectLandmarks(faceCanvases)];
case 3:
_a = _b.sent();
return [3 /*break*/, 6];
case 4: return [4 /*yield*/, Promise.all(faceCanvases.map(function (canvas) { return landmarkNet.detectLandmarks(canvas); }))];
case 5:
_a = _b.sent();
_b.label = 6;
case 6:
faceLandmarksByFace = _a;
alignedFaceBoxes = faceLandmarksByFace.map(function (landmarks, i) { return landmarks.align(detections[i].getBox()); });
return [4 /*yield*/, computeDescriptors(input, alignedFaceBoxes, useBatchProcessing)];
case 7:
descriptors = _b.sent();
return [2 /*return*/, detections.map(function (detection, i) {
return new FullFaceDescription_1.FullFaceDescription(detection, faceLandmarksByFace[i].shiftByPoint(new tfjs_image_recognition_base_1.Point(detection.box.x, detection.box.y)), descriptors[i]);
})];
}
});
});
};
}
function allFacesSsdMobilenetv1Factory(ssdMobilenetv1, landmarkNet, recognitionNet) {
return function (input, minConfidence, useBatchProcessing) {
if (minConfidence === void 0) { minConfidence = 0.8; }
if (useBatchProcessing === void 0) { useBatchProcessing = false; }
return tslib_1.__awaiter(this, void 0, void 0, function () {
var detectFaces, allFaces;
return tslib_1.__generator(this, function (_a) {
detectFaces = function (input) { return ssdMobilenetv1.locateFaces(input, minConfidence); };
allFaces = allFacesFactory(detectFaces, landmarkNet, recognitionNet);
return [2 /*return*/, allFaces(input, useBatchProcessing)];
});
});
};
}
exports.allFacesSsdMobilenetv1Factory = allFacesSsdMobilenetv1Factory;
function allFacesTinyYolov2Factory(tinyYolov2, landmarkNet, recognitionNet) {
return function (input, forwardParams, useBatchProcessing) {
if (forwardParams === void 0) { forwardParams = {}; }
if (useBatchProcessing === void 0) { useBatchProcessing = false; }
return tslib_1.__awaiter(this, void 0, void 0, function () {
var detectFaces, allFaces;
return tslib_1.__generator(this, function (_a) {
detectFaces = function (input) { return tinyYolov2.locateFaces(input, forwardParams); };
allFaces = allFacesFactory(detectFaces, landmarkNet, recognitionNet);
return [2 /*return*/, allFaces(input, useBatchProcessing)];
});
});
};
}
exports.allFacesTinyYolov2Factory = allFacesTinyYolov2Factory;
function allFacesMtcnnFactory(mtcnn, recognitionNet) {
var computeDescriptors = computeDescriptorsFactory(recognitionNet);
return function (input, mtcnnForwardParams, useBatchProcessing) {
if (mtcnnForwardParams === void 0) { mtcnnForwardParams = {}; }
if (useBatchProcessing === void 0) { useBatchProcessing = false; }
return tslib_1.__awaiter(this, void 0, void 0, function () {
var results, alignedFaceBoxes, descriptors;
return tslib_1.__generator(this, function (_a) {
switch (_a.label) {
case 0: return [4 /*yield*/, mtcnn.forward(input, mtcnnForwardParams)];
case 1:
results = _a.sent();
alignedFaceBoxes = results.map(function (_a) {
var faceLandmarks = _a.faceLandmarks;
return faceLandmarks.align();
});
return [4 /*yield*/, computeDescriptors(input, alignedFaceBoxes, useBatchProcessing)];
case 2:
descriptors = _a.sent();
return [2 /*return*/, results.map(function (_a, i) {
var faceDetection = _a.faceDetection, faceLandmarks = _a.faceLandmarks;
return new FullFaceDescription_1.FullFaceDescription(faceDetection, faceLandmarks, descriptors[i]);
})];
}
});
});
};
}
exports.allFacesMtcnnFactory = allFacesMtcnnFactory;
//# sourceMappingURL=allFacesFactory.js.map
\ No newline at end of file
{"version":3,"file":"allFacesFactory.js","sourceRoot":"","sources":["../../src/allFacesFactory.ts"],"names":[],"mappings":";;;AAAA,2EAAqE;AAMrE,qEAAoE;AACpE,6BAAqC;AAOrC,mCACE,cAAkC;IAElC,OAAO,UAAe,KAAgB,EAAE,gBAAwB,EAAE,kBAA2B;;;;;4BAC/D,qBAAM,kBAAY,CAAC,KAAK,EAAE,gBAAgB,CAAC,EAAA;;wBAAjE,mBAAmB,GAAG,SAA2C;6BAEnD,kBAAkB,EAAlB,wBAAkB;wBAClC,qBAAM,cAAc,CAAC,qBAAqB,CAAC,mBAAmB,CAAC,EAAA;;wBAA/D,KAAA,SAAiF,CAAA;;4BACjF,qBAAM,OAAO,CAAC,GAAG,CAAC,mBAAmB,CAAC,GAAG,CACzC,UAAA,MAAM,IAAI,OAAA,cAAc,CAAC,qBAAqB,CAAC,MAAM,CAAC,EAA5C,CAA4C,CACvD,CAAC,EAAA;;wBAFA,KAAA,SAEkB,CAAA;;;wBAJhB,WAAW,KAIK;wBAEtB,sBAAO,WAAW,EAAA;;;;KACnB,CAAA;AACH,CAAC;AAED,yBACE,WAA2D,EAC3D,WAA8B,EAC9B,cAAkC;IAElC,IAAM,kBAAkB,GAAG,yBAAyB,CAAC,cAAc,CAAC,CAAA;IAEpE,OAAO,UACL,KAAgB,EAChB,kBAAmC;QAAnC,mCAAA,EAAA,0BAAmC;;;;;4BAGhB,qBAAM,WAAW,CAAC,KAAK,CAAC,EAAA;;wBAArC,UAAU,GAAG,SAAwB;wBACtB,qBAAM,kBAAY,CAAC,KAAK,EAAE,UAAU,CAAC,EAAA;;wBAApD,YAAY,GAAG,SAAqC;6BAE9B,kBAAkB,EAAlB,wBAAkB;wBAC1C,qBAAM,WAAW,CAAC,eAAe,CAAC,YAAY,CAAC,EAAA;;wBAA/C,KAAA,SAAoE,CAAA;;4BACpE,qBAAM,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC,GAAG,CAClC,UAAA,MAAM,IAAI,OAAA,WAAW,CAAC,eAAe,CAAC,MAAM,CAAC,EAAnC,CAAmC,CAC9C,CAAC,EAAA;;wBAFA,KAAA,SAEqB,CAAA;;;wBAJnB,mBAAmB,KAIA;wBAGnB,gBAAgB,GAAG,mBAAmB,CAAC,GAAG,CAC9C,UAAC,SAAS,EAAE,CAAC,IAAK,OAAA,SAAS,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,EAAvC,CAAuC,CAC1D,CAAA;wBAEmB,qBAAM,kBAAkB,CAAC,KAAK,EAAE,gBAAgB,EAAE,kBAAkB,CAAC,EAAA;;wBAAnF,WAAW,GAAG,SAAqE;wBAEzF,sBAAO,UAAU,CAAC,GAAG,CAAC,UAAC,SAAS,EAAE,CAAC;gCACjC,OAAA,IAAI,yCAAmB,CACrB,SAAS,EACT,mBAAmB,CAAC,CAAC,CAAC,CAAC,YAAY,CACjC,IAAI,mCAAK,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,EAAE,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,CAC5C,EACD,WAAW,CAAC,CAAC,CAAC,CACf;4BAND,CAMC,CACF,EAAA;;;;KAEF,CAAA;AACH,CAAC;AAED,uCACE,cAAgC,EAChC,WAA8B,EAC9B,cAAkC;IAElC,OAAO,UACL,KAAgB,EAChB,aAA2B,EAC3B,kBAAmC;QADnC,8BAAA,EAAA,mBAA2B;QAC3B,mCAAA,EAAA,0BAAmC;;;;gBAE7B,WAAW,GAAG,UAAC,KAAgB,IAAK,OAAA,cAAc,CAAC,WAAW,CAAC,KAAK,EAAE,aAAa,CAAC,EAAhD,CAAgD,CAAA;gBACpF,QAAQ,GAAG,eAAe,CAAC,WAAW,EAAE,WAAW,EAAE,cAAc,CAAC,CAAA;gBAC1E,sBAAO,QAAQ,CAAC,KAAK,EAAE,kBAAkB,CAAC,EAAA;;;KAC3C,CAAA;AACH,CAAC;AAdD,sEAcC;AAED,mCACE,UAAsB,EACtB,WAA8B,EAC9B,cAAkC;IAElC,OAAO,UACL,KAAgB,EAChB,aAA2D,EAC3D,kBAAmC;QADnC,8BAAA,EAAA,kBAA2D;QAC3D,mCAAA,EAAA,0BAAmC;;;;gBAE7B,WAAW,GAAG,UAAC,KAAgB,IAAK,OAAA,UAAU,CAAC,WAAW,CAAC,KAAK,EAAE,aAAa,CAAC,EAA5C,CAA4C,CAAA;gBAChF,QAAQ,GAAG,eAAe,CAAC,WAAW,EAAE,WAAW,EAAE,cAAc,CAAC,CAAA;gBAC1E,sBAAO,QAAQ,CAAC,KAAK,EAAE,kBAAkB,CAAC,EAAA;;;KAC3C,CAAA;AACH,CAAC;AAdD,8DAcC;AAED,8BACE,KAAY,EACZ,cAAkC;IAElC,IAAM,kBAAkB,GAAG,yBAAyB,CAAC,cAAc,CAAC,CAAA;IAEpE,OAAO,UACL,KAAgB,EAChB,kBAA2C,EAC3C,kBAAmC;QADnC,mCAAA,EAAA,uBAA2C;QAC3C,mCAAA,EAAA,0BAAmC;;;;;4BAGnB,qBAAM,KAAK,CAAC,OAAO,CAAC,KAAK,EAAE,kBAAkB,CAAC,EAAA;;wBAAxD,OAAO,GAAG,SAA8C;wBAExD,gBAAgB,GAAG,OAAO,CAAC,GAAG,CAClC,UAAC,EAAiB;gCAAf,gCAAa;4BAAO,OAAA,aAAa,CAAC,KAAK,EAAE;wBAArB,CAAqB,CAC7C,CAAA;wBAEmB,qBAAM,kBAAkB,CAAC,KAAK,EAAE,gBAAgB,EAAE,kBAAkB,CAAC,EAAA;;wBAAnF,WAAW,GAAG,SAAqE;wBAEzF,sBAAO,OAAO,CAAC,GAAG,CAAC,UAAC,EAAgC,EAAE,CAAC;oCAAjC,gCAAa,EAAE,gCAAa;gCAChD,OAAA,IAAI,yCAAmB,CACrB,aAAa,EACb,aAAa,EACb,WAAW,CAAC,CAAC,CAAC,CACf;4BAJD,CAIC,CACF,EAAA;;;;KAEF,CAAA;AACH,CAAC;AA7BD,oDA6BC"}
\ No newline at end of file
import * as tf from '@tensorflow/tfjs-core';
import { NetInput, NeuralNetwork, TNetInput } from 'tfjs-image-recognition-base';
import { FaceDetection } from '../classes/FaceDetection';
import { NetParams } from './types';
export declare class FaceDetectionNet extends NeuralNetwork<NetParams> {
constructor();
forwardInput(input: NetInput): {
boxes: tf.Tensor<tf.Rank.R2>[];
scores: tf.Tensor<tf.Rank.R1>[];
};
forward(input: TNetInput): Promise<{
boxes: tf.Tensor<tf.Rank.R2>[];
scores: tf.Tensor<tf.Rank.R1>[];
}>;
locateFaces(input: TNetInput, minConfidence?: number, maxResults?: number): Promise<FaceDetection[]>;
protected loadQuantizedParams(uri: string | undefined): Promise<{
params: NetParams;
paramMappings: {
originalPath?: string | undefined;
paramPath: string;
}[];
}>;
protected extractParams(weights: Float32Array): {
params: NetParams;
paramMappings: {
originalPath?: string | undefined;
paramPath: string;
}[];
};
}
"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 FaceDetection_1 = require("../classes/FaceDetection");
var extractParams_1 = require("./extractParams");
var loadQuantizedParams_1 = require("./loadQuantizedParams");
var mobileNetV1_1 = require("./mobileNetV1");
var nonMaxSuppression_1 = require("./nonMaxSuppression");
var outputLayer_1 = require("./outputLayer");
var predictionLayer_1 = require("./predictionLayer");
var FaceDetectionNet = /** @class */ (function (_super) {
tslib_1.__extends(FaceDetectionNet, _super);
function FaceDetectionNet() {
return _super.call(this, 'FaceDetectionNet') || this;
}
FaceDetectionNet.prototype.forwardInput = function (input) {
var params = this.params;
if (!params) {
throw new Error('FaceDetectionNet - load model before inference');
}
return tf.tidy(function () {
var batchTensor = input.toBatchTensor(512, false).toFloat();
var x = tf.sub(tf.mul(batchTensor, tf.scalar(0.007843137718737125)), tf.scalar(1));
var features = mobileNetV1_1.mobileNetV1(x, params.mobilenetv1);
var _a = predictionLayer_1.predictionLayer(features.out, features.conv11, params.prediction_layer), boxPredictions = _a.boxPredictions, classPredictions = _a.classPredictions;
return outputLayer_1.outputLayer(boxPredictions, classPredictions, params.output_layer);
});
};
FaceDetectionNet.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()])];
}
});
});
};
FaceDetectionNet.prototype.locateFaces = function (input, minConfidence, maxResults) {
if (minConfidence === void 0) { minConfidence = 0.8; }
if (maxResults === void 0) { maxResults = 100; }
return tslib_1.__awaiter(this, void 0, void 0, function () {
var netInput, _a, _boxes, _scores, boxes, scores, i, scoresData, _b, _c, iouThreshold, indices, reshapedDims, inputSize, padX, padY, results;
return tslib_1.__generator(this, function (_d) {
switch (_d.label) {
case 0: return [4 /*yield*/, tfjs_image_recognition_base_1.toNetInput(input)];
case 1:
netInput = _d.sent();
_a = this.forwardInput(netInput), _boxes = _a.boxes, _scores = _a.scores;
boxes = _boxes[0];
scores = _scores[0];
for (i = 1; i < _boxes.length; i++) {
_boxes[i].dispose();
_scores[i].dispose();
}
_c = (_b = Array).from;
return [4 /*yield*/, scores.data()];
case 2:
scoresData = _c.apply(_b, [_d.sent()]);
iouThreshold = 0.5;
indices = nonMaxSuppression_1.nonMaxSuppression(boxes, scoresData, maxResults, iouThreshold, minConfidence);
reshapedDims = netInput.getReshapedInputDimensions(0);
inputSize = netInput.inputSize;
padX = inputSize / reshapedDims.width;
padY = inputSize / reshapedDims.height;
results = indices
.map(function (idx) {
var _a = [
Math.max(0, boxes.get(idx, 0)),
Math.min(1.0, boxes.get(idx, 2))
].map(function (val) { return val * padY; }), top = _a[0], bottom = _a[1];
var _b = [
Math.max(0, boxes.get(idx, 1)),
Math.min(1.0, boxes.get(idx, 3))
].map(function (val) { return val * padX; }), left = _b[0], right = _b[1];
return new FaceDetection_1.FaceDetection(scoresData[idx], new tfjs_image_recognition_base_1.Rect(left, top, right - left, bottom - top), {
height: netInput.getInputHeight(0),
width: netInput.getInputWidth(0)
});
});
boxes.dispose();
scores.dispose();
return [2 /*return*/, results];
}
});
});
};
FaceDetectionNet.prototype.loadQuantizedParams = function (uri) {
return loadQuantizedParams_1.loadQuantizedParams(uri);
};
FaceDetectionNet.prototype.extractParams = function (weights) {
return extractParams_1.extractParams(weights);
};
return FaceDetectionNet;
}(tfjs_image_recognition_base_1.NeuralNetwork));
exports.FaceDetectionNet = FaceDetectionNet;
//# sourceMappingURL=FaceDetectionNet.js.map
\ No newline at end of file
{"version":3,"file":"FaceDetectionNet.js","sourceRoot":"","sources":["../../../src/faceDetectionNet/FaceDetectionNet.ts"],"names":[],"mappings":"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"}
\ No newline at end of file
import * as tf from '@tensorflow/tfjs-core';
import { BoxPredictionParams } from './types';
export declare function boxPredictionLayer(x: tf.Tensor4D, params: BoxPredictionParams): {
boxPredictionEncoding: tf.Tensor<tf.Rank>;
classPrediction: tf.Tensor<tf.Rank>;
};
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
var tf = require("@tensorflow/tfjs-core");
var tfjs_tiny_yolov2_1 = require("tfjs-tiny-yolov2");
function boxPredictionLayer(x, params) {
return tf.tidy(function () {
var batchSize = x.shape[0];
var boxPredictionEncoding = tf.reshape(tfjs_tiny_yolov2_1.convLayer(x, params.box_encoding_predictor), [batchSize, -1, 1, 4]);
var classPrediction = tf.reshape(tfjs_tiny_yolov2_1.convLayer(x, params.class_predictor), [batchSize, -1, 3]);
return {
boxPredictionEncoding: boxPredictionEncoding,
classPrediction: classPrediction
};
});
}
exports.boxPredictionLayer = boxPredictionLayer;
//# sourceMappingURL=boxPredictionLayer.js.map
\ No newline at end of file
{"version":3,"file":"boxPredictionLayer.js","sourceRoot":"","sources":["../../../src/faceDetectionNet/boxPredictionLayer.ts"],"names":[],"mappings":";;AAAA,0CAA4C;AAC5C,qDAA6C;AAK7C,4BACE,CAAc,EACd,MAA2B;IAE3B,OAAO,EAAE,CAAC,IAAI,CAAC;QAEb,IAAM,SAAS,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAA;QAE5B,IAAM,qBAAqB,GAAG,EAAE,CAAC,OAAO,CACtC,4BAAS,CAAC,CAAC,EAAE,MAAM,CAAC,sBAAsB,CAAC,EAC3C,CAAC,SAAS,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CACtB,CAAA;QACD,IAAM,eAAe,GAAG,EAAE,CAAC,OAAO,CAChC,4BAAS,CAAC,CAAC,EAAE,MAAM,CAAC,eAAe,CAAC,EACpC,CAAC,SAAS,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CACnB,CAAA;QAED,OAAO;YACL,qBAAqB,uBAAA;YACrB,eAAe,iBAAA;SAChB,CAAA;IACH,CAAC,CAAC,CAAA;AACJ,CAAC;AAtBD,gDAsBC"}
\ No newline at end of file
import { ParamMapping } from 'tfjs-image-recognition-base';
import { NetParams } from './types';
export declare function extractParams(weights: Float32Array): {
params: NetParams;
paramMappings: ParamMapping[];
};
"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 extractDepthwiseConvParams(numChannels, mappedPrefix) {
var filters = tf.tensor4d(extractWeights(3 * 3 * numChannels), [3, 3, numChannels, 1]);
var batch_norm_scale = tf.tensor1d(extractWeights(numChannels));
var batch_norm_offset = tf.tensor1d(extractWeights(numChannels));
var batch_norm_mean = tf.tensor1d(extractWeights(numChannels));
var batch_norm_variance = tf.tensor1d(extractWeights(numChannels));
paramMappings.push({ paramPath: mappedPrefix + "/filters" }, { paramPath: mappedPrefix + "/batch_norm_scale" }, { paramPath: mappedPrefix + "/batch_norm_offset" }, { paramPath: mappedPrefix + "/batch_norm_mean" }, { paramPath: mappedPrefix + "/batch_norm_variance" });
return {
filters: filters,
batch_norm_scale: batch_norm_scale,
batch_norm_offset: batch_norm_offset,
batch_norm_mean: batch_norm_mean,
batch_norm_variance: batch_norm_variance
};
}
function extractConvParams(channelsIn, channelsOut, filterSize, mappedPrefix, isPointwiseConv) {
var filters = tf.tensor4d(extractWeights(channelsIn * channelsOut * filterSize * filterSize), [filterSize, filterSize, channelsIn, channelsOut]);
var bias = tf.tensor1d(extractWeights(channelsOut));
paramMappings.push({ paramPath: mappedPrefix + "/filters" }, { paramPath: mappedPrefix + "/" + (isPointwiseConv ? 'batch_norm_offset' : 'bias') });
return { filters: filters, bias: bias };
}
function extractPointwiseConvParams(channelsIn, channelsOut, filterSize, mappedPrefix) {
var _a = extractConvParams(channelsIn, channelsOut, filterSize, mappedPrefix, true), filters = _a.filters, bias = _a.bias;
return {
filters: filters,
batch_norm_offset: bias
};
}
function extractConvPairParams(channelsIn, channelsOut, mappedPrefix) {
var depthwise_conv = extractDepthwiseConvParams(channelsIn, mappedPrefix + "/depthwise_conv");
var pointwise_conv = extractPointwiseConvParams(channelsIn, channelsOut, 1, mappedPrefix + "/pointwise_conv");
return { depthwise_conv: depthwise_conv, pointwise_conv: pointwise_conv };
}
function extractMobilenetV1Params() {
var conv_0 = extractPointwiseConvParams(3, 32, 3, 'mobilenetv1/conv_0');
var conv_1 = extractConvPairParams(32, 64, 'mobilenetv1/conv_1');
var conv_2 = extractConvPairParams(64, 128, 'mobilenetv1/conv_2');
var conv_3 = extractConvPairParams(128, 128, 'mobilenetv1/conv_3');
var conv_4 = extractConvPairParams(128, 256, 'mobilenetv1/conv_4');
var conv_5 = extractConvPairParams(256, 256, 'mobilenetv1/conv_5');
var conv_6 = extractConvPairParams(256, 512, 'mobilenetv1/conv_6');
var conv_7 = extractConvPairParams(512, 512, 'mobilenetv1/conv_7');
var conv_8 = extractConvPairParams(512, 512, 'mobilenetv1/conv_8');
var conv_9 = extractConvPairParams(512, 512, 'mobilenetv1/conv_9');
var conv_10 = extractConvPairParams(512, 512, 'mobilenetv1/conv_10');
var conv_11 = extractConvPairParams(512, 512, 'mobilenetv1/conv_11');
var conv_12 = extractConvPairParams(512, 1024, 'mobilenetv1/conv_12');
var conv_13 = extractConvPairParams(1024, 1024, 'mobilenetv1/conv_13');
return {
conv_0: conv_0,
conv_1: conv_1,
conv_2: conv_2,
conv_3: conv_3,
conv_4: conv_4,
conv_5: conv_5,
conv_6: conv_6,
conv_7: conv_7,
conv_8: conv_8,
conv_9: conv_9,
conv_10: conv_10,
conv_11: conv_11,
conv_12: conv_12,
conv_13: conv_13
};
}
function extractPredictionLayerParams() {
var conv_0 = extractPointwiseConvParams(1024, 256, 1, 'prediction_layer/conv_0');
var conv_1 = extractPointwiseConvParams(256, 512, 3, 'prediction_layer/conv_1');
var conv_2 = extractPointwiseConvParams(512, 128, 1, 'prediction_layer/conv_2');
var conv_3 = extractPointwiseConvParams(128, 256, 3, 'prediction_layer/conv_3');
var conv_4 = extractPointwiseConvParams(256, 128, 1, 'prediction_layer/conv_4');
var conv_5 = extractPointwiseConvParams(128, 256, 3, 'prediction_layer/conv_5');
var conv_6 = extractPointwiseConvParams(256, 64, 1, 'prediction_layer/conv_6');
var conv_7 = extractPointwiseConvParams(64, 128, 3, 'prediction_layer/conv_7');
var box_encoding_0_predictor = extractConvParams(512, 12, 1, 'prediction_layer/box_predictor_0/box_encoding_predictor');
var class_predictor_0 = extractConvParams(512, 9, 1, 'prediction_layer/box_predictor_0/class_predictor');
var box_encoding_1_predictor = extractConvParams(1024, 24, 1, 'prediction_layer/box_predictor_1/box_encoding_predictor');
var class_predictor_1 = extractConvParams(1024, 18, 1, 'prediction_layer/box_predictor_1/class_predictor');
var box_encoding_2_predictor = extractConvParams(512, 24, 1, 'prediction_layer/box_predictor_2/box_encoding_predictor');
var class_predictor_2 = extractConvParams(512, 18, 1, 'prediction_layer/box_predictor_2/class_predictor');
var box_encoding_3_predictor = extractConvParams(256, 24, 1, 'prediction_layer/box_predictor_3/box_encoding_predictor');
var class_predictor_3 = extractConvParams(256, 18, 1, 'prediction_layer/box_predictor_3/class_predictor');
var box_encoding_4_predictor = extractConvParams(256, 24, 1, 'prediction_layer/box_predictor_4/box_encoding_predictor');
var class_predictor_4 = extractConvParams(256, 18, 1, 'prediction_layer/box_predictor_4/class_predictor');
var box_encoding_5_predictor = extractConvParams(128, 24, 1, 'prediction_layer/box_predictor_5/box_encoding_predictor');
var class_predictor_5 = extractConvParams(128, 18, 1, 'prediction_layer/box_predictor_5/class_predictor');
var box_predictor_0 = {
box_encoding_predictor: box_encoding_0_predictor,
class_predictor: class_predictor_0
};
var box_predictor_1 = {
box_encoding_predictor: box_encoding_1_predictor,
class_predictor: class_predictor_1
};
var box_predictor_2 = {
box_encoding_predictor: box_encoding_2_predictor,
class_predictor: class_predictor_2
};
var box_predictor_3 = {
box_encoding_predictor: box_encoding_3_predictor,
class_predictor: class_predictor_3
};
var box_predictor_4 = {
box_encoding_predictor: box_encoding_4_predictor,
class_predictor: class_predictor_4
};
var box_predictor_5 = {
box_encoding_predictor: box_encoding_5_predictor,
class_predictor: class_predictor_5
};
return {
conv_0: conv_0,
conv_1: conv_1,
conv_2: conv_2,
conv_3: conv_3,
conv_4: conv_4,
conv_5: conv_5,
conv_6: conv_6,
conv_7: conv_7,
box_predictor_0: box_predictor_0,
box_predictor_1: box_predictor_1,
box_predictor_2: box_predictor_2,
box_predictor_3: box_predictor_3,
box_predictor_4: box_predictor_4,
box_predictor_5: box_predictor_5
};
}
return {
extractMobilenetV1Params: extractMobilenetV1Params,
extractPredictionLayerParams: extractPredictionLayerParams
};
}
function extractParams(weights) {
var paramMappings = [];
var _a = tfjs_image_recognition_base_1.extractWeightsFactory(weights), extractWeights = _a.extractWeights, getRemainingWeights = _a.getRemainingWeights;
var _b = extractorsFactory(extractWeights, paramMappings), extractMobilenetV1Params = _b.extractMobilenetV1Params, extractPredictionLayerParams = _b.extractPredictionLayerParams;
var mobilenetv1 = extractMobilenetV1Params();
var prediction_layer = extractPredictionLayerParams();
var extra_dim = tf.tensor3d(extractWeights(5118 * 4), [1, 5118, 4]);
var output_layer = {
extra_dim: extra_dim
};
paramMappings.push({ paramPath: 'output_layer/extra_dim' });
if (getRemainingWeights().length !== 0) {
throw new Error("weights remaing after extract: " + getRemainingWeights().length);
}
return {
params: {
mobilenetv1: mobilenetv1,
prediction_layer: prediction_layer,
output_layer: output_layer
},
paramMappings: paramMappings
};
}
exports.extractParams = extractParams;
//# sourceMappingURL=extractParams.js.map
\ No newline at end of file
{"version":3,"file":"extractParams.js","sourceRoot":"","sources":["../../../src/faceDetectionNet/extractParams.ts"],"names":[],"mappings":"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"}
\ No newline at end of file
import { FaceDetectionNet } from './FaceDetectionNet';
export * from './FaceDetectionNet';
export declare function createFaceDetectionNet(weights: Float32Array): FaceDetectionNet;
export declare function faceDetectionNet(weights: Float32Array): FaceDetectionNet;
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
var tslib_1 = require("tslib");
var FaceDetectionNet_1 = require("./FaceDetectionNet");
tslib_1.__exportStar(require("./FaceDetectionNet"), exports);
function createFaceDetectionNet(weights) {
var net = new FaceDetectionNet_1.FaceDetectionNet();
net.extractWeights(weights);
return net;
}
exports.createFaceDetectionNet = createFaceDetectionNet;
function faceDetectionNet(weights) {
console.warn('faceDetectionNet(weights: Float32Array) will be deprecated in future, use createFaceDetectionNet instead');
return createFaceDetectionNet(weights);
}
exports.faceDetectionNet = faceDetectionNet;
//# sourceMappingURL=index.js.map
\ No newline at end of file
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/faceDetectionNet/index.ts"],"names":[],"mappings":";;;AAAA,uDAAsD;AAEtD,6DAAmC;AAEnC,gCAAuC,OAAqB;IAC1D,IAAM,GAAG,GAAG,IAAI,mCAAgB,EAAE,CAAA;IAClC,GAAG,CAAC,cAAc,CAAC,OAAO,CAAC,CAAA;IAC3B,OAAO,GAAG,CAAA;AACZ,CAAC;AAJD,wDAIC;AAED,0BAAiC,OAAqB;IACpD,OAAO,CAAC,IAAI,CAAC,0GAA0G,CAAC,CAAA;IACxH,OAAO,sBAAsB,CAAC,OAAO,CAAC,CAAA;AACxC,CAAC;AAHD,4CAGC"}
\ No newline at end of file
import { ParamMapping } from 'tfjs-image-recognition-base';
import { NetParams } from './types';
export declare function loadQuantizedParams(uri: string | undefined): Promise<{
params: NetParams;
paramMappings: ParamMapping[];
}>;
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
var tslib_1 = require("tslib");
var tfjs_image_recognition_base_1 = require("tfjs-image-recognition-base");
var DEFAULT_MODEL_NAME = 'ssd_mobilenetv1_model';
function extractorsFactory(weightMap, paramMappings) {
var extractWeightEntry = tfjs_image_recognition_base_1.extractWeightEntryFactory(weightMap, paramMappings);
function extractPointwiseConvParams(prefix, idx, mappedPrefix) {
var filters = extractWeightEntry(prefix + "/Conv2d_" + idx + "_pointwise/weights", 4, mappedPrefix + "/filters");
var batch_norm_offset = extractWeightEntry(prefix + "/Conv2d_" + idx + "_pointwise/convolution_bn_offset", 1, mappedPrefix + "/batch_norm_offset");
return { filters: filters, batch_norm_offset: batch_norm_offset };
}
function extractConvPairParams(idx) {
var mappedPrefix = "mobilenetv1/conv_" + idx;
var prefixDepthwiseConv = "MobilenetV1/Conv2d_" + idx + "_depthwise";
var mappedPrefixDepthwiseConv = mappedPrefix + "/depthwise_conv";
var mappedPrefixPointwiseConv = mappedPrefix + "/pointwise_conv";
var filters = extractWeightEntry(prefixDepthwiseConv + "/depthwise_weights", 4, mappedPrefixDepthwiseConv + "/filters");
var batch_norm_scale = extractWeightEntry(prefixDepthwiseConv + "/BatchNorm/gamma", 1, mappedPrefixDepthwiseConv + "/batch_norm_scale");
var batch_norm_offset = extractWeightEntry(prefixDepthwiseConv + "/BatchNorm/beta", 1, mappedPrefixDepthwiseConv + "/batch_norm_offset");
var batch_norm_mean = extractWeightEntry(prefixDepthwiseConv + "/BatchNorm/moving_mean", 1, mappedPrefixDepthwiseConv + "/batch_norm_mean");
var batch_norm_variance = extractWeightEntry(prefixDepthwiseConv + "/BatchNorm/moving_variance", 1, mappedPrefixDepthwiseConv + "/batch_norm_variance");
return {
depthwise_conv: {
filters: filters,
batch_norm_scale: batch_norm_scale,
batch_norm_offset: batch_norm_offset,
batch_norm_mean: batch_norm_mean,
batch_norm_variance: batch_norm_variance
},
pointwise_conv: extractPointwiseConvParams('MobilenetV1', idx, mappedPrefixPointwiseConv)
};
}
function extractMobilenetV1Params() {
return {
conv_0: extractPointwiseConvParams('MobilenetV1', 0, 'mobilenetv1/conv_0'),
conv_1: extractConvPairParams(1),
conv_2: extractConvPairParams(2),
conv_3: extractConvPairParams(3),
conv_4: extractConvPairParams(4),
conv_5: extractConvPairParams(5),
conv_6: extractConvPairParams(6),
conv_7: extractConvPairParams(7),
conv_8: extractConvPairParams(8),
conv_9: extractConvPairParams(9),
conv_10: extractConvPairParams(10),
conv_11: extractConvPairParams(11),
conv_12: extractConvPairParams(12),
conv_13: extractConvPairParams(13)
};
}
function extractConvParams(prefix, mappedPrefix) {
var filters = extractWeightEntry(prefix + "/weights", 4, mappedPrefix + "/filters");
var bias = extractWeightEntry(prefix + "/biases", 1, mappedPrefix + "/bias");
return { filters: filters, bias: bias };
}
function extractBoxPredictorParams(idx) {
var box_encoding_predictor = extractConvParams("Prediction/BoxPredictor_" + idx + "/BoxEncodingPredictor", "prediction_layer/box_predictor_" + idx + "/box_encoding_predictor");
var class_predictor = extractConvParams("Prediction/BoxPredictor_" + idx + "/ClassPredictor", "prediction_layer/box_predictor_" + idx + "/class_predictor");
return { box_encoding_predictor: box_encoding_predictor, class_predictor: class_predictor };
}
function extractPredictionLayerParams() {
return {
conv_0: extractPointwiseConvParams('Prediction', 0, 'prediction_layer/conv_0'),
conv_1: extractPointwiseConvParams('Prediction', 1, 'prediction_layer/conv_1'),
conv_2: extractPointwiseConvParams('Prediction', 2, 'prediction_layer/conv_2'),
conv_3: extractPointwiseConvParams('Prediction', 3, 'prediction_layer/conv_3'),
conv_4: extractPointwiseConvParams('Prediction', 4, 'prediction_layer/conv_4'),
conv_5: extractPointwiseConvParams('Prediction', 5, 'prediction_layer/conv_5'),
conv_6: extractPointwiseConvParams('Prediction', 6, 'prediction_layer/conv_6'),
conv_7: extractPointwiseConvParams('Prediction', 7, 'prediction_layer/conv_7'),
box_predictor_0: extractBoxPredictorParams(0),
box_predictor_1: extractBoxPredictorParams(1),
box_predictor_2: extractBoxPredictorParams(2),
box_predictor_3: extractBoxPredictorParams(3),
box_predictor_4: extractBoxPredictorParams(4),
box_predictor_5: extractBoxPredictorParams(5)
};
}
return {
extractMobilenetV1Params: extractMobilenetV1Params,
extractPredictionLayerParams: extractPredictionLayerParams
};
}
function loadQuantizedParams(uri) {
return tslib_1.__awaiter(this, void 0, void 0, function () {
var weightMap, paramMappings, _a, extractMobilenetV1Params, extractPredictionLayerParams, extra_dim, params;
return tslib_1.__generator(this, function (_b) {
switch (_b.label) {
case 0: return [4 /*yield*/, tfjs_image_recognition_base_1.loadWeightMap(uri, DEFAULT_MODEL_NAME)];
case 1:
weightMap = _b.sent();
paramMappings = [];
_a = extractorsFactory(weightMap, paramMappings), extractMobilenetV1Params = _a.extractMobilenetV1Params, extractPredictionLayerParams = _a.extractPredictionLayerParams;
extra_dim = weightMap['Output/extra_dim'];
paramMappings.push({ originalPath: 'Output/extra_dim', paramPath: 'output_layer/extra_dim' });
if (!tfjs_image_recognition_base_1.isTensor3D(extra_dim)) {
throw new Error("expected weightMap['Output/extra_dim'] to be a Tensor3D, instead have " + extra_dim);
}
params = {
mobilenetv1: extractMobilenetV1Params(),
prediction_layer: extractPredictionLayerParams(),
output_layer: {
extra_dim: extra_dim
}
};
tfjs_image_recognition_base_1.disposeUnusedWeightTensors(weightMap, paramMappings);
return [2 /*return*/, { params: params, paramMappings: paramMappings }];
}
});
});
}
exports.loadQuantizedParams = loadQuantizedParams;
//# sourceMappingURL=loadQuantizedParams.js.map
\ No newline at end of file
{"version":3,"file":"loadQuantizedParams.js","sourceRoot":"","sources":["../../../src/faceDetectionNet/loadQuantizedParams.ts"],"names":[],"mappings":"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"}
\ No newline at end of file
import * as tf from '@tensorflow/tfjs-core';
import { MobileNetV1 } from './types';
export declare function mobileNetV1(x: tf.Tensor4D, params: MobileNetV1.Params): {
out: tf.Tensor<tf.Rank.R4>;
conv11: any;
};
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
var tf = require("@tensorflow/tfjs-core");
var pointwiseConvLayer_1 = require("./pointwiseConvLayer");
var epsilon = 0.0010000000474974513;
function depthwiseConvLayer(x, params, strides) {
return tf.tidy(function () {
var out = tf.depthwiseConv2d(x, params.filters, strides, 'same');
out = tf.batchNormalization(out, params.batch_norm_mean, params.batch_norm_variance, epsilon, params.batch_norm_scale, params.batch_norm_offset);
return tf.clipByValue(out, 0, 6);
});
}
function getStridesForLayerIdx(layerIdx) {
return [2, 4, 6, 12].some(function (idx) { return idx === layerIdx; }) ? [2, 2] : [1, 1];
}
function mobileNetV1(x, params) {
return tf.tidy(function () {
var conv11 = null;
var out = pointwiseConvLayer_1.pointwiseConvLayer(x, params.conv_0, [2, 2]);
var convPairParams = [
params.conv_1,
params.conv_2,
params.conv_3,
params.conv_4,
params.conv_5,
params.conv_6,
params.conv_7,
params.conv_8,
params.conv_9,
params.conv_10,
params.conv_11,
params.conv_12,
params.conv_13
];
convPairParams.forEach(function (param, i) {
var layerIdx = i + 1;
var depthwiseConvStrides = getStridesForLayerIdx(layerIdx);
out = depthwiseConvLayer(out, param.depthwise_conv, depthwiseConvStrides);
out = pointwiseConvLayer_1.pointwiseConvLayer(out, param.pointwise_conv, [1, 1]);
if (layerIdx === 11) {
conv11 = out;
}
});
if (conv11 === null) {
throw new Error('mobileNetV1 - output of conv layer 11 is null');
}
return {
out: out,
conv11: conv11
};
});
}
exports.mobileNetV1 = mobileNetV1;
//# sourceMappingURL=mobileNetV1.js.map
\ No newline at end of file
{"version":3,"file":"mobileNetV1.js","sourceRoot":"","sources":["../../../src/faceDetectionNet/mobileNetV1.ts"],"names":[],"mappings":";;AAAA,0CAA4C;AAE5C,2DAA0D;AAG1D,IAAM,OAAO,GAAG,qBAAqB,CAAA;AAErC,4BACE,CAAc,EACd,MAAuC,EACvC,OAAyB;IAEzB,OAAO,EAAE,CAAC,IAAI,CAAC;QAEb,IAAI,GAAG,GAAG,EAAE,CAAC,eAAe,CAAC,CAAC,EAAE,MAAM,CAAC,OAAO,EAAE,OAAO,EAAE,MAAM,CAAC,CAAA;QAChE,GAAG,GAAG,EAAE,CAAC,kBAAkB,CACzB,GAAG,EACH,MAAM,CAAC,eAAe,EACtB,MAAM,CAAC,mBAAmB,EAC1B,OAAO,EACP,MAAM,CAAC,gBAAgB,EACvB,MAAM,CAAC,iBAAiB,CACzB,CAAA;QACD,OAAO,EAAE,CAAC,WAAW,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC,CAAA;IAElC,CAAC,CAAC,CAAA;AACJ,CAAC;AAED,+BAA+B,QAAgB;IAC7C,OAAO,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,UAAA,GAAG,IAAI,OAAA,GAAG,KAAK,QAAQ,EAAhB,CAAgB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA;AACtE,CAAC;AAED,qBAA4B,CAAc,EAAE,MAA0B;IACpE,OAAO,EAAE,CAAC,IAAI,CAAC;QAEb,IAAI,MAAM,GAAG,IAAI,CAAA;QACjB,IAAI,GAAG,GAAG,uCAAkB,CAAC,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAA;QAEtD,IAAM,cAAc,GAAG;YACrB,MAAM,CAAC,MAAM;YACb,MAAM,CAAC,MAAM;YACb,MAAM,CAAC,MAAM;YACb,MAAM,CAAC,MAAM;YACb,MAAM,CAAC,MAAM;YACb,MAAM,CAAC,MAAM;YACb,MAAM,CAAC,MAAM;YACb,MAAM,CAAC,MAAM;YACb,MAAM,CAAC,MAAM;YACb,MAAM,CAAC,OAAO;YACd,MAAM,CAAC,OAAO;YACd,MAAM,CAAC,OAAO;YACd,MAAM,CAAC,OAAO;SACf,CAAA;QAED,cAAc,CAAC,OAAO,CAAC,UAAC,KAAK,EAAE,CAAC;YAC9B,IAAM,QAAQ,GAAG,CAAC,GAAG,CAAC,CAAA;YACtB,IAAM,oBAAoB,GAAG,qBAAqB,CAAC,QAAQ,CAAC,CAAA;YAC5D,GAAG,GAAG,kBAAkB,CAAC,GAAG,EAAE,KAAK,CAAC,cAAc,EAAE,oBAAoB,CAAC,CAAA;YACzE,GAAG,GAAG,uCAAkB,CAAC,GAAG,EAAE,KAAK,CAAC,cAAc,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAA;YAC3D,IAAI,QAAQ,KAAK,EAAE,EAAE;gBACnB,MAAM,GAAG,GAAG,CAAA;aACb;QACH,CAAC,CAAC,CAAA;QAEF,IAAI,MAAM,KAAK,IAAI,EAAE;YACnB,MAAM,IAAI,KAAK,CAAC,+CAA+C,CAAC,CAAA;SACjE;QAED,OAAO;YACL,GAAG,KAAA;YACH,MAAM,EAAE,MAAa;SACtB,CAAA;IAEH,CAAC,CAAC,CAAA;AACJ,CAAC;AA1CD,kCA0CC"}
\ No newline at end of file
import * as tf from '@tensorflow/tfjs-core';
export declare function nonMaxSuppression(boxes: tf.Tensor2D, scores: number[], maxOutputSize: number, iouThreshold: number, scoreThreshold: number): number[];
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
function nonMaxSuppression(boxes, scores, maxOutputSize, iouThreshold, scoreThreshold) {
var numBoxes = boxes.shape[0];
var outputSize = Math.min(maxOutputSize, numBoxes);
var candidates = scores
.map(function (score, boxIndex) { return ({ score: score, boxIndex: boxIndex }); })
.filter(function (c) { return c.score > scoreThreshold; })
.sort(function (c1, c2) { return c2.score - c1.score; });
var suppressFunc = function (x) { return x <= iouThreshold ? 1 : 0; };
var selected = [];
candidates.forEach(function (c) {
if (selected.length >= outputSize) {
return;
}
var originalScore = c.score;
for (var j = selected.length - 1; j >= 0; --j) {
var iou = IOU(boxes, c.boxIndex, selected[j]);
if (iou === 0.0) {
continue;
}
c.score *= suppressFunc(iou);
if (c.score <= scoreThreshold) {
break;
}
}
if (originalScore === c.score) {
selected.push(c.boxIndex);
}
});
return selected;
}
exports.nonMaxSuppression = nonMaxSuppression;
function IOU(boxes, i, j) {
var yminI = Math.min(boxes.get(i, 0), boxes.get(i, 2));
var xminI = Math.min(boxes.get(i, 1), boxes.get(i, 3));
var ymaxI = Math.max(boxes.get(i, 0), boxes.get(i, 2));
var xmaxI = Math.max(boxes.get(i, 1), boxes.get(i, 3));
var yminJ = Math.min(boxes.get(j, 0), boxes.get(j, 2));
var xminJ = Math.min(boxes.get(j, 1), boxes.get(j, 3));
var ymaxJ = Math.max(boxes.get(j, 0), boxes.get(j, 2));
var xmaxJ = Math.max(boxes.get(j, 1), boxes.get(j, 3));
var areaI = (ymaxI - yminI) * (xmaxI - xminI);
var areaJ = (ymaxJ - yminJ) * (xmaxJ - xminJ);
if (areaI <= 0 || areaJ <= 0) {
return 0.0;
}
var intersectionYmin = Math.max(yminI, yminJ);
var intersectionXmin = Math.max(xminI, xminJ);
var intersectionYmax = Math.min(ymaxI, ymaxJ);
var intersectionXmax = Math.min(xmaxI, xmaxJ);
var intersectionArea = Math.max(intersectionYmax - intersectionYmin, 0.0) *
Math.max(intersectionXmax - intersectionXmin, 0.0);
return intersectionArea / (areaI + areaJ - intersectionArea);
}
//# sourceMappingURL=nonMaxSuppression.js.map
\ No newline at end of file
{"version":3,"file":"nonMaxSuppression.js","sourceRoot":"","sources":["../../../src/faceDetectionNet/nonMaxSuppression.ts"],"names":[],"mappings":"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"}
\ No newline at end of file
import * as tf from '@tensorflow/tfjs-core';
import { OutputLayerParams } from './types';
export declare function outputLayer(boxPredictions: tf.Tensor4D, classPredictions: tf.Tensor4D, params: OutputLayerParams): {
boxes: tf.Tensor<tf.Rank.R2>[];
scores: tf.Tensor<tf.Rank.R1>[];
};
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
var tf = require("@tensorflow/tfjs-core");
function getCenterCoordinatesAndSizesLayer(x) {
var vec = tf.unstack(tf.transpose(x, [1, 0]));
var sizes = [
tf.sub(vec[2], vec[0]),
tf.sub(vec[3], vec[1])
];
var centers = [
tf.add(vec[0], tf.div(sizes[0], tf.scalar(2))),
tf.add(vec[1], tf.div(sizes[1], tf.scalar(2)))
];
return {
sizes: sizes,
centers: centers
};
}
function decodeBoxesLayer(x0, x1) {
var _a = getCenterCoordinatesAndSizesLayer(x0), sizes = _a.sizes, centers = _a.centers;
var vec = tf.unstack(tf.transpose(x1, [1, 0]));
var div0_out = tf.div(tf.mul(tf.exp(tf.div(vec[2], tf.scalar(5))), sizes[0]), tf.scalar(2));
var add0_out = tf.add(tf.mul(tf.div(vec[0], tf.scalar(10)), sizes[0]), centers[0]);
var div1_out = tf.div(tf.mul(tf.exp(tf.div(vec[3], tf.scalar(5))), sizes[1]), tf.scalar(2));
var add1_out = tf.add(tf.mul(tf.div(vec[1], tf.scalar(10)), sizes[1]), centers[1]);
return tf.transpose(tf.stack([
tf.sub(add0_out, div0_out),
tf.sub(add1_out, div1_out),
tf.add(add0_out, div0_out),
tf.add(add1_out, div1_out)
]), [1, 0]);
}
function outputLayer(boxPredictions, classPredictions, params) {
return tf.tidy(function () {
var batchSize = boxPredictions.shape[0];
var boxes = decodeBoxesLayer(tf.reshape(tf.tile(params.extra_dim, [batchSize, 1, 1]), [-1, 4]), tf.reshape(boxPredictions, [-1, 4]));
boxes = tf.reshape(boxes, [batchSize, (boxes.shape[0] / batchSize), 4]);
var scoresAndClasses = tf.sigmoid(tf.slice(classPredictions, [0, 0, 1], [-1, -1, -1]));
var scores = tf.slice(scoresAndClasses, [0, 0, 0], [-1, -1, 1]);
scores = tf.reshape(scores, [batchSize, scores.shape[1]]);
var boxesByBatch = tf.unstack(boxes);
var scoresByBatch = tf.unstack(scores);
return {
boxes: boxesByBatch,
scores: scoresByBatch
};
});
}
exports.outputLayer = outputLayer;
//# sourceMappingURL=outputLayer.js.map
\ No newline at end of file
{"version":3,"file":"outputLayer.js","sourceRoot":"","sources":["../../../src/faceDetectionNet/outputLayer.ts"],"names":[],"mappings":"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"}
\ No newline at end of file
import * as tf from '@tensorflow/tfjs-core';
import { PointwiseConvParams } from './types';
export declare function pointwiseConvLayer(x: tf.Tensor4D, params: PointwiseConvParams, strides: [number, number]): tf.Tensor<tf.Rank.R4>;
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
var tf = require("@tensorflow/tfjs-core");
function pointwiseConvLayer(x, params, strides) {
return tf.tidy(function () {
var out = tf.conv2d(x, params.filters, strides, 'same');
out = tf.add(out, params.batch_norm_offset);
return tf.clipByValue(out, 0, 6);
});
}
exports.pointwiseConvLayer = pointwiseConvLayer;
//# sourceMappingURL=pointwiseConvLayer.js.map
\ No newline at end of file
{"version":3,"file":"pointwiseConvLayer.js","sourceRoot":"","sources":["../../../src/faceDetectionNet/pointwiseConvLayer.ts"],"names":[],"mappings":";;AAAA,0CAA4C;AAI5C,4BACE,CAAc,EACd,MAA2B,EAC3B,OAAyB;IAEzB,OAAO,EAAE,CAAC,IAAI,CAAC;QAEb,IAAI,GAAG,GAAG,EAAE,CAAC,MAAM,CAAC,CAAC,EAAE,MAAM,CAAC,OAAO,EAAE,OAAO,EAAE,MAAM,CAAC,CAAA;QACvD,GAAG,GAAG,EAAE,CAAC,GAAG,CAAC,GAAG,EAAE,MAAM,CAAC,iBAAiB,CAAC,CAAA;QAC3C,OAAO,EAAE,CAAC,WAAW,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC,CAAA;IAElC,CAAC,CAAC,CAAA;AACJ,CAAC;AAZD,gDAYC"}
\ No newline at end of file
import * as tf from '@tensorflow/tfjs-core';
import { PredictionLayerParams } from './types';
export declare function predictionLayer(x: tf.Tensor4D, conv11: tf.Tensor4D, params: PredictionLayerParams): {
boxPredictions: tf.Tensor<tf.Rank.R4>;
classPredictions: tf.Tensor<tf.Rank.R4>;
};
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
var tf = require("@tensorflow/tfjs-core");
var boxPredictionLayer_1 = require("./boxPredictionLayer");
var pointwiseConvLayer_1 = require("./pointwiseConvLayer");
function predictionLayer(x, conv11, params) {
return tf.tidy(function () {
var conv0 = pointwiseConvLayer_1.pointwiseConvLayer(x, params.conv_0, [1, 1]);
var conv1 = pointwiseConvLayer_1.pointwiseConvLayer(conv0, params.conv_1, [2, 2]);
var conv2 = pointwiseConvLayer_1.pointwiseConvLayer(conv1, params.conv_2, [1, 1]);
var conv3 = pointwiseConvLayer_1.pointwiseConvLayer(conv2, params.conv_3, [2, 2]);
var conv4 = pointwiseConvLayer_1.pointwiseConvLayer(conv3, params.conv_4, [1, 1]);
var conv5 = pointwiseConvLayer_1.pointwiseConvLayer(conv4, params.conv_5, [2, 2]);
var conv6 = pointwiseConvLayer_1.pointwiseConvLayer(conv5, params.conv_6, [1, 1]);
var conv7 = pointwiseConvLayer_1.pointwiseConvLayer(conv6, params.conv_7, [2, 2]);
var boxPrediction0 = boxPredictionLayer_1.boxPredictionLayer(conv11, params.box_predictor_0);
var boxPrediction1 = boxPredictionLayer_1.boxPredictionLayer(x, params.box_predictor_1);
var boxPrediction2 = boxPredictionLayer_1.boxPredictionLayer(conv1, params.box_predictor_2);
var boxPrediction3 = boxPredictionLayer_1.boxPredictionLayer(conv3, params.box_predictor_3);
var boxPrediction4 = boxPredictionLayer_1.boxPredictionLayer(conv5, params.box_predictor_4);
var boxPrediction5 = boxPredictionLayer_1.boxPredictionLayer(conv7, params.box_predictor_5);
var boxPredictions = tf.concat([
boxPrediction0.boxPredictionEncoding,
boxPrediction1.boxPredictionEncoding,
boxPrediction2.boxPredictionEncoding,
boxPrediction3.boxPredictionEncoding,
boxPrediction4.boxPredictionEncoding,
boxPrediction5.boxPredictionEncoding
], 1);
var classPredictions = tf.concat([
boxPrediction0.classPrediction,
boxPrediction1.classPrediction,
boxPrediction2.classPrediction,
boxPrediction3.classPrediction,
boxPrediction4.classPrediction,
boxPrediction5.classPrediction
], 1);
return {
boxPredictions: boxPredictions,
classPredictions: classPredictions
};
});
}
exports.predictionLayer = predictionLayer;
//# sourceMappingURL=predictionLayer.js.map
\ No newline at end of file
{"version":3,"file":"predictionLayer.js","sourceRoot":"","sources":["../../../src/faceDetectionNet/predictionLayer.ts"],"names":[],"mappings":";;AAAA,0CAA4C;AAE5C,2DAA0D;AAC1D,2DAA0D;AAG1D,yBACE,CAAc,EACd,MAAmB,EACnB,MAA6B;IAE7B,OAAO,EAAE,CAAC,IAAI,CAAC;QAEb,IAAM,KAAK,GAAG,uCAAkB,CAAC,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAA;QAC1D,IAAM,KAAK,GAAG,uCAAkB,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAA;QAC9D,IAAM,KAAK,GAAG,uCAAkB,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAA;QAC9D,IAAM,KAAK,GAAG,uCAAkB,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAA;QAC9D,IAAM,KAAK,GAAG,uCAAkB,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAA;QAC9D,IAAM,KAAK,GAAG,uCAAkB,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAA;QAC9D,IAAM,KAAK,GAAG,uCAAkB,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAA;QAC9D,IAAM,KAAK,GAAG,uCAAkB,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAA;QAE9D,IAAM,cAAc,GAAG,uCAAkB,CAAC,MAAM,EAAE,MAAM,CAAC,eAAe,CAAC,CAAA;QACzE,IAAM,cAAc,GAAG,uCAAkB,CAAC,CAAC,EAAE,MAAM,CAAC,eAAe,CAAC,CAAA;QACpE,IAAM,cAAc,GAAG,uCAAkB,CAAC,KAAK,EAAE,MAAM,CAAC,eAAe,CAAC,CAAA;QACxE,IAAM,cAAc,GAAG,uCAAkB,CAAC,KAAK,EAAE,MAAM,CAAC,eAAe,CAAC,CAAA;QACxE,IAAM,cAAc,GAAG,uCAAkB,CAAC,KAAK,EAAE,MAAM,CAAC,eAAe,CAAC,CAAA;QACxE,IAAM,cAAc,GAAG,uCAAkB,CAAC,KAAK,EAAE,MAAM,CAAC,eAAe,CAAC,CAAA;QAExE,IAAM,cAAc,GAAG,EAAE,CAAC,MAAM,CAAC;YAC/B,cAAc,CAAC,qBAAqB;YACpC,cAAc,CAAC,qBAAqB;YACpC,cAAc,CAAC,qBAAqB;YACpC,cAAc,CAAC,qBAAqB;YACpC,cAAc,CAAC,qBAAqB;YACpC,cAAc,CAAC,qBAAqB;SACrC,EAAE,CAAC,CAAgB,CAAA;QAEpB,IAAM,gBAAgB,GAAG,EAAE,CAAC,MAAM,CAAC;YACjC,cAAc,CAAC,eAAe;YAC9B,cAAc,CAAC,eAAe;YAC9B,cAAc,CAAC,eAAe;YAC9B,cAAc,CAAC,eAAe;YAC9B,cAAc,CAAC,eAAe;YAC9B,cAAc,CAAC,eAAe;SAC/B,EAAE,CAAC,CAAgB,CAAA;QAEpB,OAAO;YACL,cAAc,gBAAA;YACd,gBAAgB,kBAAA;SACjB,CAAA;IACH,CAAC,CAAC,CAAA;AACJ,CAAC;AA9CD,0CA8CC"}
\ No newline at end of file
import * as tf from '@tensorflow/tfjs-core';
import { ConvParams } from 'tfjs-tiny-yolov2';
export declare type PointwiseConvParams = {
filters: tf.Tensor4D;
batch_norm_offset: tf.Tensor1D;
};
export declare namespace MobileNetV1 {
type DepthwiseConvParams = {
filters: tf.Tensor4D;
batch_norm_scale: tf.Tensor1D;
batch_norm_offset: tf.Tensor1D;
batch_norm_mean: tf.Tensor1D;
batch_norm_variance: tf.Tensor1D;
};
type ConvPairParams = {
depthwise_conv: DepthwiseConvParams;
pointwise_conv: PointwiseConvParams;
};
type Params = {
conv_0: PointwiseConvParams;
conv_1: ConvPairParams;
conv_2: ConvPairParams;
conv_3: ConvPairParams;
conv_4: ConvPairParams;
conv_5: ConvPairParams;
conv_6: ConvPairParams;
conv_7: ConvPairParams;
conv_8: ConvPairParams;
conv_9: ConvPairParams;
conv_10: ConvPairParams;
conv_11: ConvPairParams;
conv_12: ConvPairParams;
conv_13: ConvPairParams;
};
}
export declare type BoxPredictionParams = {
box_encoding_predictor: ConvParams;
class_predictor: ConvParams;
};
export declare type PredictionLayerParams = {
conv_0: PointwiseConvParams;
conv_1: PointwiseConvParams;
conv_2: PointwiseConvParams;
conv_3: PointwiseConvParams;
conv_4: PointwiseConvParams;
conv_5: PointwiseConvParams;
conv_6: PointwiseConvParams;
conv_7: PointwiseConvParams;
box_predictor_0: BoxPredictionParams;
box_predictor_1: BoxPredictionParams;
box_predictor_2: BoxPredictionParams;
box_predictor_3: BoxPredictionParams;
box_predictor_4: BoxPredictionParams;
box_predictor_5: BoxPredictionParams;
};
export declare type OutputLayerParams = {
extra_dim: tf.Tensor3D;
};
export declare type NetParams = {
mobilenetv1: MobileNetV1.Params;
prediction_layer: PredictionLayerParams;
output_layer: OutputLayerParams;
};
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
//# sourceMappingURL=types.js.map
\ No newline at end of file
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/faceDetectionNet/types.ts"],"names":[],"mappings":""}
\ No newline at end of file
import * as tf from '@tensorflow/tfjs-core';
import { NetInput, TNetInput } from 'tfjs-image-recognition-base';
import { TinyYolov2Types } from 'tfjs-tiny-yolov2';
import { FaceDetection } from './classes/FaceDetection';
import { FaceLandmarks68 } from './classes/FaceLandmarks68';
import { FullFaceDescription } from './classes/FullFaceDescription';
import { FaceDetectionNet } from './faceDetectionNet/FaceDetectionNet';
import { FaceLandmark68Net } from './faceLandmarkNet/FaceLandmark68Net';
import { FaceLandmark68TinyNet } from './faceLandmarkNet/FaceLandmark68TinyNet';
import { FaceRecognitionNet } from './faceRecognitionNet/FaceRecognitionNet';
import { Mtcnn } from './mtcnn/Mtcnn';
import { MtcnnForwardParams, MtcnnResult } from './mtcnn/types';
import { TinyYolov2 } from './tinyYolov2/TinyYolov2';
export declare const detectionNet: FaceDetectionNet;
export declare const landmarkNet: FaceLandmark68Net;
export declare const recognitionNet: FaceRecognitionNet;
export declare const nets: {
ssdMobilenetv1: FaceDetectionNet;
faceLandmark68Net: FaceLandmark68Net;
faceLandmark68TinyNet: FaceLandmark68TinyNet;
faceRecognitionNet: FaceRecognitionNet;
mtcnn: Mtcnn;
tinyYolov2: TinyYolov2;
};
export declare function loadSsdMobilenetv1Model(url: string): Promise<void>;
export declare function loadFaceLandmarkModel(url: string): Promise<void>;
export declare function loadFaceLandmarkTinyModel(url: string): Promise<void>;
export declare function loadFaceRecognitionModel(url: string): Promise<void>;
export declare function loadMtcnnModel(url: string): Promise<void>;
export declare function loadTinyYolov2Model(url: string): Promise<void>;
export declare function loadFaceDetectionModel(url: string): Promise<void>;
export declare function loadModels(url: string): Promise<[void, void, void, void, void]>;
export declare function locateFaces(input: TNetInput, minConfidence?: number, maxResults?: number): Promise<FaceDetection[]>;
export declare const ssdMobilenetv1: typeof locateFaces;
export declare function detectLandmarks(input: TNetInput): Promise<FaceLandmarks68 | FaceLandmarks68[]>;
export declare function detectLandmarksTiny(input: TNetInput): Promise<FaceLandmarks68 | FaceLandmarks68[]>;
export declare function computeFaceDescriptor(input: TNetInput): Promise<Float32Array | Float32Array[]>;
export declare function mtcnn(input: TNetInput, forwardParams: MtcnnForwardParams): Promise<MtcnnResult[]>;
export declare function tinyYolov2(input: TNetInput, forwardParams: TinyYolov2Types.TinyYolov2ForwardParams): Promise<FaceDetection[]>;
export declare type allFacesSsdMobilenetv1Function = (input: tf.Tensor | NetInput | TNetInput, minConfidence?: number, useBatchProcessing?: boolean) => Promise<FullFaceDescription[]>;
export declare const allFacesSsdMobilenetv1: allFacesSsdMobilenetv1Function;
export declare type allFacesTinyYolov2Function = (input: tf.Tensor | NetInput | TNetInput, forwardParams?: TinyYolov2Types.TinyYolov2ForwardParams, useBatchProcessing?: boolean) => Promise<FullFaceDescription[]>;
export declare const allFacesTinyYolov2: allFacesTinyYolov2Function;
export declare type allFacesMtcnnFunction = (input: tf.Tensor | NetInput | TNetInput, mtcnnForwardParams?: MtcnnForwardParams, useBatchProcessing?: boolean) => Promise<FullFaceDescription[]>;
export declare const allFacesMtcnn: allFacesMtcnnFunction;
export declare const allFaces: allFacesSsdMobilenetv1Function;
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
var allFacesFactory_1 = require("./allFacesFactory");
var FaceDetectionNet_1 = require("./faceDetectionNet/FaceDetectionNet");
var FaceLandmark68Net_1 = require("./faceLandmarkNet/FaceLandmark68Net");
var FaceLandmark68TinyNet_1 = require("./faceLandmarkNet/FaceLandmark68TinyNet");
var FaceRecognitionNet_1 = require("./faceRecognitionNet/FaceRecognitionNet");
var Mtcnn_1 = require("./mtcnn/Mtcnn");
var TinyYolov2_1 = require("./tinyYolov2/TinyYolov2");
exports.detectionNet = new FaceDetectionNet_1.FaceDetectionNet();
exports.landmarkNet = new FaceLandmark68Net_1.FaceLandmark68Net();
exports.recognitionNet = new FaceRecognitionNet_1.FaceRecognitionNet();
// nets need more specific names, to avoid ambiguity in future
// when alternative net implementations are provided
exports.nets = {
ssdMobilenetv1: exports.detectionNet,
faceLandmark68Net: exports.landmarkNet,
faceLandmark68TinyNet: new FaceLandmark68TinyNet_1.FaceLandmark68TinyNet(),
faceRecognitionNet: exports.recognitionNet,
mtcnn: new Mtcnn_1.Mtcnn(),
tinyYolov2: new TinyYolov2_1.TinyYolov2()
};
function loadSsdMobilenetv1Model(url) {
return exports.nets.ssdMobilenetv1.load(url);
}
exports.loadSsdMobilenetv1Model = loadSsdMobilenetv1Model;
function loadFaceLandmarkModel(url) {
return exports.nets.faceLandmark68Net.load(url);
}
exports.loadFaceLandmarkModel = loadFaceLandmarkModel;
function loadFaceLandmarkTinyModel(url) {
return exports.nets.faceLandmark68TinyNet.load(url);
}
exports.loadFaceLandmarkTinyModel = loadFaceLandmarkTinyModel;
function loadFaceRecognitionModel(url) {
return exports.nets.faceRecognitionNet.load(url);
}
exports.loadFaceRecognitionModel = loadFaceRecognitionModel;
function loadMtcnnModel(url) {
return exports.nets.mtcnn.load(url);
}
exports.loadMtcnnModel = loadMtcnnModel;
function loadTinyYolov2Model(url) {
return exports.nets.tinyYolov2.load(url);
}
exports.loadTinyYolov2Model = loadTinyYolov2Model;
function loadFaceDetectionModel(url) {
return loadSsdMobilenetv1Model(url);
}
exports.loadFaceDetectionModel = loadFaceDetectionModel;
function loadModels(url) {
console.warn('loadModels will be deprecated in future');
return Promise.all([
loadSsdMobilenetv1Model(url),
loadFaceLandmarkModel(url),
loadFaceRecognitionModel(url),
loadMtcnnModel(url),
loadTinyYolov2Model(url)
]);
}
exports.loadModels = loadModels;
function locateFaces(input, minConfidence, maxResults) {
return exports.nets.ssdMobilenetv1.locateFaces(input, minConfidence, maxResults);
}
exports.locateFaces = locateFaces;
exports.ssdMobilenetv1 = locateFaces;
function detectLandmarks(input) {
return exports.nets.faceLandmark68Net.detectLandmarks(input);
}
exports.detectLandmarks = detectLandmarks;
function detectLandmarksTiny(input) {
return exports.nets.faceLandmark68TinyNet.detectLandmarks(input);
}
exports.detectLandmarksTiny = detectLandmarksTiny;
function computeFaceDescriptor(input) {
return exports.nets.faceRecognitionNet.computeFaceDescriptor(input);
}
exports.computeFaceDescriptor = computeFaceDescriptor;
function mtcnn(input, forwardParams) {
return exports.nets.mtcnn.forward(input, forwardParams);
}
exports.mtcnn = mtcnn;
function tinyYolov2(input, forwardParams) {
return exports.nets.tinyYolov2.locateFaces(input, forwardParams);
}
exports.tinyYolov2 = tinyYolov2;
exports.allFacesSsdMobilenetv1 = allFacesFactory_1.allFacesSsdMobilenetv1Factory(exports.nets.ssdMobilenetv1, exports.nets.faceLandmark68Net, exports.nets.faceRecognitionNet);
exports.allFacesTinyYolov2 = allFacesFactory_1.allFacesTinyYolov2Factory(exports.nets.tinyYolov2, exports.nets.faceLandmark68Net, exports.nets.faceRecognitionNet);
exports.allFacesMtcnn = allFacesFactory_1.allFacesMtcnnFactory(exports.nets.mtcnn, exports.nets.faceRecognitionNet);
exports.allFaces = exports.allFacesSsdMobilenetv1;
//# sourceMappingURL=globalApi.js.map
\ No newline at end of file
{"version":3,"file":"globalApi.js","sourceRoot":"","sources":["../../src/globalApi.ts"],"names":[],"mappings":"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"}
\ No newline at end of file
......@@ -3,8 +3,6 @@ import { FaceDetection } from '../classes/FaceDetection';
import { ComposableTask } from './ComposableTask';
import { DetectAllFaceLandmarksTask, DetectSingleFaceLandmarksTask } from './DetectFaceLandmarksTasks';
import { FaceDetectionOptions } from './types';
export declare function detectSingleFace(input: TNetInput, options?: FaceDetectionOptions): DetectSingleFaceTask;
export declare function detectAllFaces(input: TNetInput, options?: FaceDetectionOptions): DetectAllFacesTask;
export declare class DetectFacesTaskBase<TReturn> extends ComposableTask<TReturn> {
protected input: TNetInput;
protected options: FaceDetectionOptions;
......
......@@ -8,16 +8,6 @@ var TinyFaceDetectorOptions_1 = require("../tinyFaceDetector/TinyFaceDetectorOpt
var ComposableTask_1 = require("./ComposableTask");
var DetectFaceLandmarksTasks_1 = require("./DetectFaceLandmarksTasks");
var nets_1 = require("./nets");
function detectSingleFace(input, options) {
if (options === void 0) { options = new SsdMobilenetv1Options_1.SsdMobilenetv1Options(); }
return new DetectSingleFaceTask(input, options);
}
exports.detectSingleFace = detectSingleFace;
function detectAllFaces(input, options) {
if (options === void 0) { options = new SsdMobilenetv1Options_1.SsdMobilenetv1Options(); }
return new DetectAllFacesTask(input, options);
}
exports.detectAllFaces = detectAllFaces;
var DetectFacesTaskBase = /** @class */ (function (_super) {
tslib_1.__extends(DetectFacesTaskBase, _super);
function DetectFacesTaskBase(input, options) {
......
{"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":";;;AACA,qDAAqD;AAGrD,sDAAqD;AACrD,iFAAgF;AAChF,uFAAsF;AACtF,mDAAkD;AAClD,uEAAuG;AACvG,+BAA8B;AAG9B;IAAkD,+CAAuB;IACvE,6BACY,KAAgB,EAChB,OAA2D;QAA3D,wBAAA,EAAA,cAAoC,6CAAqB,EAAE;QAFvE,YAIE,iBAAO,SACR;QAJW,WAAK,GAAL,KAAK,CAAW;QAChB,aAAO,GAAP,OAAO,CAAoD;;IAGvE,CAAC;IACH,0BAAC;AAAD,CAAC,AAPD,CAAkD,+BAAc,GAO/D;AAPY,kDAAmB;AAShC;IAAwC,8CAAoC;IAA5E;;IAkCA,CAAC;IAhCc,gCAAG,GAAhB;;;;;;wBAEQ,KAAqB,IAAI,EAAvB,KAAK,WAAA,EAAE,OAAO,aAAA,CAAS;6BAE3B,CAAA,OAAO,YAAY,2BAAY,CAAA,EAA/B,wBAA+B;wBACzB,qBAAM,WAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,EAAE,OAAO,CAAC,EAAA;4BAAhD,sBAAO,CAAC,SAAwC,CAAC;6BAC9C,GAAG,CAAC,UAAA,MAAM,IAAI,OAAA,MAAM,CAAC,aAAa,EAApB,CAAoB,CAAC,EAAA;;wBAGlC,qBAAqB,GAAG,OAAO,YAAY,iDAAuB;4BACtE,CAAC,CAAC,UAAC,KAAgB,IAAK,OAAA,WAAI,CAAC,gBAAgB,CAAC,WAAW,CAAC,KAAK,EAAE,OAAO,CAAC,EAAjD,CAAiD;4BACzE,CAAC,CAAC,CACA,OAAO,YAAY,6CAAqB;gCACtC,CAAC,CAAC,UAAC,KAAgB,IAAK,OAAA,WAAI,CAAC,cAAc,CAAC,WAAW,CAAC,KAAK,EAAE,OAAO,CAAC,EAA/C,CAA+C;gCACvE,CAAC,CAAC,CACA,OAAO,YAAY,oCAAiB;oCAClC,CAAC,CAAC,UAAC,KAAgB,IAAK,OAAA,WAAI,CAAC,UAAU,CAAC,WAAW,CAAC,KAAK,EAAE,OAAO,CAAC,EAA3C,CAA2C;oCACnE,CAAC,CAAC,IAAI,CACT,CACJ,CAAA;wBAEH,IAAI,CAAC,qBAAqB,EAAE;4BAC1B,MAAM,IAAI,KAAK,CAAC,qIAAqI,CAAC,CAAA;yBACvJ;wBAED,sBAAO,qBAAqB,CAAC,KAAK,CAAC,EAAA;;;;KACpC;IAED,8CAAiB,GAAjB,UAAkB,kBAAmC;QAAnC,mCAAA,EAAA,0BAAmC;QACnD,OAAO,IAAI,qDAA0B,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,EAAE,kBAAkB,CAAC,CAAA;IAC7E,CAAC;IAEH,yBAAC;AAAD,CAAC,AAlCD,CAAwC,mBAAmB,GAkC1D;AAlCY,gDAAkB;AAoC/B;IAA0C,gDAA8C;IAAxF;;IAWA,CAAC;IATc,kCAAG,GAAhB;;;;4BACU,qBAAM,IAAI,kBAAkB,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,OAAO,CAAC,EAAA;4BAA9D,sBAAO,CAAC,SAAsD,CAAC;6BAC5D,IAAI,CAAC,UAAC,EAAE,EAAE,EAAE,IAAK,OAAA,EAAE,CAAC,KAAK,GAAG,EAAE,CAAC,KAAK,EAAnB,CAAmB,CAAC,CAAC,CAAC,CAAC,EAAA;;;;KAC5C;IAED,gDAAiB,GAAjB,UAAkB,kBAAmC;QAAnC,mCAAA,EAAA,0BAAmC;QACnD,OAAO,IAAI,wDAA6B,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,EAAE,kBAAkB,CAAC,CAAA;IAChF,CAAC;IAEH,2BAAC;AAAD,CAAC,AAXD,CAA0C,mBAAmB,GAW5D;AAXY,oDAAoB"}
\ No newline at end of file
......@@ -4,13 +4,13 @@ var tslib_1 = require("tslib");
var tfjs_tiny_yolov2_1 = require("tfjs-tiny-yolov2");
var MtcnnOptions_1 = require("../mtcnn/MtcnnOptions");
var ssdMobilenetv1_1 = require("../ssdMobilenetv1");
var DetectFacesTasks_1 = require("./DetectFacesTasks");
var detectFaces_1 = require("./detectFaces");
// export allFaces API for backward compatibility
function allFacesSsdMobilenetv1(input, minConfidence) {
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*/, DetectFacesTasks_1.detectAllFaces(input, new ssdMobilenetv1_1.SsdMobilenetv1Options(minConfidence ? { minConfidence: minConfidence } : {}))
case 0: return [4 /*yield*/, detectFaces_1.detectAllFaces(input, new ssdMobilenetv1_1.SsdMobilenetv1Options(minConfidence ? { minConfidence: minConfidence } : {}))
.withFaceLandmarks()
.withFaceDescriptors()];
case 1: return [2 /*return*/, _a.sent()];
......@@ -24,7 +24,7 @@ function allFacesTinyYolov2(input, forwardParams) {
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*/, DetectFacesTasks_1.detectAllFaces(input, new tfjs_tiny_yolov2_1.TinyYolov2Options(forwardParams))
case 0: return [4 /*yield*/, detectFaces_1.detectAllFaces(input, new tfjs_tiny_yolov2_1.TinyYolov2Options(forwardParams))
.withFaceLandmarks()
.withFaceDescriptors()];
case 1: return [2 /*return*/, _a.sent()];
......@@ -38,7 +38,7 @@ function allFacesMtcnn(input, forwardParams) {
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*/, DetectFacesTasks_1.detectAllFaces(input, new MtcnnOptions_1.MtcnnOptions(forwardParams))
case 0: return [4 /*yield*/, detectFaces_1.detectAllFaces(input, new MtcnnOptions_1.MtcnnOptions(forwardParams))
.withFaceLandmarks()
.withFaceDescriptors()];
case 1: return [2 /*return*/, _a.sent()];
......
{"version":3,"file":"allFaces.js","sourceRoot":"","sources":["../../../src/globalApi/allFaces.ts"],"names":[],"mappings":";;;AACA,qDAAyE;AAGzE,sDAAoE;AACpE,oDAA0D;AAC1D,uDAAoD;AAEpD,iDAAiD;AAEjD,gCACE,KAAgB,EAChB,aAAsB;;;;wBAEf,qBAAM,iCAAc,CAAC,KAAK,EAAE,IAAI,sCAAqB,CAAC,aAAa,CAAC,CAAC,CAAC,EAAE,aAAa,eAAA,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;yBAClG,iBAAiB,EAAE;yBACnB,mBAAmB,EAAE,EAAA;wBAFxB,sBAAO,SAEiB,EAAA;;;;CACzB;AAPD,wDAOC;AAED,4BACE,KAAgB,EAChB,aAAsC;IAAtC,8BAAA,EAAA,kBAAsC;;;;wBAE/B,qBAAM,iCAAc,CAAC,KAAK,EAAE,IAAI,oCAAiB,CAAC,aAAa,CAAC,CAAC;yBACrE,iBAAiB,EAAE;yBACnB,mBAAmB,EAAE,EAAA;wBAFxB,sBAAO,SAEiB,EAAA;;;;CACzB;AAPD,gDAOC;AAED,uBACE,KAAgB,EAChB,aAAiC;IAAjC,8BAAA,EAAA,kBAAiC;;;;wBAE1B,qBAAM,iCAAc,CAAC,KAAK,EAAE,IAAI,2BAAY,CAAC,aAAa,CAAC,CAAC;yBAChE,iBAAiB,EAAE;yBACnB,mBAAmB,EAAE,EAAA;wBAFxB,sBAAO,SAEiB,EAAA;;;;CACzB;AAPD,sCAOC;AAEY,QAAA,QAAQ,GAAG,sBAAsB,CAAA"}
\ No newline at end of file
{"version":3,"file":"allFaces.js","sourceRoot":"","sources":["../../../src/globalApi/allFaces.ts"],"names":[],"mappings":";;;AACA,qDAAyE;AAGzE,sDAAoE;AACpE,oDAA0D;AAC1D,6CAA+C;AAE/C,iDAAiD;AAEjD,gCACE,KAAgB,EAChB,aAAsB;;;;wBAEf,qBAAM,4BAAc,CAAC,KAAK,EAAE,IAAI,sCAAqB,CAAC,aAAa,CAAC,CAAC,CAAC,EAAE,aAAa,eAAA,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;yBAClG,iBAAiB,EAAE;yBACnB,mBAAmB,EAAE,EAAA;wBAFxB,sBAAO,SAEiB,EAAA;;;;CACzB;AAPD,wDAOC;AAED,4BACE,KAAgB,EAChB,aAAsC;IAAtC,8BAAA,EAAA,kBAAsC;;;;wBAE/B,qBAAM,4BAAc,CAAC,KAAK,EAAE,IAAI,oCAAiB,CAAC,aAAa,CAAC,CAAC;yBACrE,iBAAiB,EAAE;yBACnB,mBAAmB,EAAE,EAAA;wBAFxB,sBAAO,SAEiB,EAAA;;;;CACzB;AAPD,gDAOC;AAED,uBACE,KAAgB,EAChB,aAAiC;IAAjC,8BAAA,EAAA,kBAAiC;;;;wBAE1B,qBAAM,4BAAc,CAAC,KAAK,EAAE,IAAI,2BAAY,CAAC,aAAa,CAAC,CAAC;yBAChE,iBAAiB,EAAE;yBACnB,mBAAmB,EAAE,EAAA;wBAFxB,sBAAO,SAEiB,EAAA;;;;CACzB;AAPD,sCAOC;AAEY,QAAA,QAAQ,GAAG,sBAAsB,CAAA"}
\ No newline at end of file
import { TNetInput } from 'tfjs-image-recognition-base';
import { DetectAllFacesTask, DetectSingleFaceTask } from './DetectFacesTasks';
import { FaceDetectionOptions } from './types';
export declare function detectSingleFace(input: TNetInput, options?: FaceDetectionOptions): DetectSingleFaceTask;
export declare function detectAllFaces(input: TNetInput, options?: FaceDetectionOptions): DetectAllFacesTask;
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
var SsdMobilenetv1Options_1 = require("../ssdMobilenetv1/SsdMobilenetv1Options");
var DetectFacesTasks_1 = require("./DetectFacesTasks");
function detectSingleFace(input, options) {
if (options === void 0) { options = new SsdMobilenetv1Options_1.SsdMobilenetv1Options(); }
return new DetectFacesTasks_1.DetectSingleFaceTask(input, options);
}
exports.detectSingleFace = detectSingleFace;
function detectAllFaces(input, options) {
if (options === void 0) { options = new SsdMobilenetv1Options_1.SsdMobilenetv1Options(); }
return new DetectFacesTasks_1.DetectAllFacesTask(input, options);
}
exports.detectAllFaces = detectAllFaces;
//# sourceMappingURL=detectFaces.js.map
\ No newline at end of file
{"version":3,"file":"detectFaces.js","sourceRoot":"","sources":["../../../src/globalApi/detectFaces.ts"],"names":[],"mappings":";;AAEA,iFAAgF;AAChF,uDAA8E;AAG9E,0BACE,KAAgB,EAChB,OAA2D;IAA3D,wBAAA,EAAA,cAAoC,6CAAqB,EAAE;IAE3D,OAAO,IAAI,uCAAoB,CAAC,KAAK,EAAE,OAAO,CAAC,CAAA;AACjD,CAAC;AALD,4CAKC;AAED,wBACE,KAAgB,EAChB,OAA2D;IAA3D,wBAAA,EAAA,cAAoC,6CAAqB,EAAE;IAE3D,OAAO,IAAI,qCAAkB,CAAC,KAAK,EAAE,OAAO,CAAC,CAAA;AAC/C,CAAC;AALD,wCAKC"}
\ No newline at end of file
export * from './allFaces';
export * from './ComposableTask';
export * from './ComputeFaceDescriptorsTasks';
export * from './detectFaces';
export * from './DetectFacesTasks';
export * from './DetectFaceLandmarksTasks';
export * from './FaceMatcher';
......
......@@ -4,6 +4,7 @@ var tslib_1 = require("tslib");
tslib_1.__exportStar(require("./allFaces"), exports);
tslib_1.__exportStar(require("./ComposableTask"), exports);
tslib_1.__exportStar(require("./ComputeFaceDescriptorsTasks"), exports);
tslib_1.__exportStar(require("./detectFaces"), exports);
tslib_1.__exportStar(require("./DetectFacesTasks"), exports);
tslib_1.__exportStar(require("./DetectFaceLandmarksTasks"), exports);
tslib_1.__exportStar(require("./FaceMatcher"), exports);
......
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/globalApi/index.ts"],"names":[],"mappings":";;;AAAA,qDAA0B;AAC1B,2DAAgC;AAChC,wEAA6C;AAC7C,6DAAkC;AAClC,qEAA0C;AAC1C,wDAA6B;AAC7B,iDAAsB"}
\ No newline at end of file
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/globalApi/index.ts"],"names":[],"mappings":";;;AAAA,qDAA0B;AAC1B,2DAAgC;AAChC,wEAA6C;AAC7C,wDAA6B;AAC7B,6DAAkC;AAClC,qEAA0C;AAC1C,wDAA6B;AAC7B,iDAAsB"}
\ No newline at end of file
import * as tf from '@tensorflow/tfjs-core';
export { tf };
export * from 'tfjs-image-recognition-base';
export * from './classes';
export * from './dom';
export * from './classes/index';
export * from './dom/index';
export * from './faceLandmarkNet/index';
export * from './faceRecognitionNet/index';
export * from './globalApi/index';
export * from './mtcnn/index';
export * from './ssdMobilenetv1/index';
export * from './tinyFaceDetector/index';
export * from './tinyYolov2/index';
export * from './euclideanDistance';
export * from './faceLandmarkNet';
export * from './faceRecognitionNet';
export * from './globalApi';
export * from './mtcnn';
export * from './ssdMobilenetv1';
export * from './tinyFaceDetector';
export * from './tinyYolov2';
......@@ -4,14 +4,14 @@ var tslib_1 = require("tslib");
var tf = require("@tensorflow/tfjs-core");
exports.tf = tf;
tslib_1.__exportStar(require("tfjs-image-recognition-base"), exports);
tslib_1.__exportStar(require("./classes"), exports);
tslib_1.__exportStar(require("./dom"), exports);
tslib_1.__exportStar(require("./classes/index"), exports);
tslib_1.__exportStar(require("./dom/index"), exports);
tslib_1.__exportStar(require("./faceLandmarkNet/index"), exports);
tslib_1.__exportStar(require("./faceRecognitionNet/index"), exports);
tslib_1.__exportStar(require("./globalApi/index"), exports);
tslib_1.__exportStar(require("./mtcnn/index"), exports);
tslib_1.__exportStar(require("./ssdMobilenetv1/index"), exports);
tslib_1.__exportStar(require("./tinyFaceDetector/index"), exports);
tslib_1.__exportStar(require("./tinyYolov2/index"), exports);
tslib_1.__exportStar(require("./euclideanDistance"), exports);
tslib_1.__exportStar(require("./faceLandmarkNet"), exports);
tslib_1.__exportStar(require("./faceRecognitionNet"), exports);
tslib_1.__exportStar(require("./globalApi"), exports);
tslib_1.__exportStar(require("./mtcnn"), exports);
tslib_1.__exportStar(require("./ssdMobilenetv1"), exports);
tslib_1.__exportStar(require("./tinyFaceDetector"), exports);
tslib_1.__exportStar(require("./tinyYolov2"), exports);
//# sourceMappingURL=index.js.map
\ No newline at end of file
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":";;;AAAA,0CAA4C;AAG1C,gBAAE;AAGJ,sEAA4C;AAE5C,oDAA0B;AAE1B,gDAAqB;AACrB,8DAAoC;AACpC,4DAAkC;AAClC,+DAAqC;AACrC,sDAA4B;AAC5B,kDAAwB;AACxB,2DAAiC;AACjC,6DAAmC;AACnC,uDAA6B"}
\ No newline at end of file
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":";;;AAAA,0CAA4C;AAG1C,gBAAE;AAGJ,sEAA4C;AAE5C,0DAAgC;AAChC,sDAA2B;AAC3B,kEAAwC;AACxC,qEAA2C;AAC3C,4DAAkC;AAClC,wDAA8B;AAC9B,iEAAuC;AACvC,mEAAyC;AACzC,6DAAmC;AAEnC,8DAAoC"}
\ No newline at end of file
export declare function getDefaultMtcnnForwardParams(): {
minFaceSize: number;
scaleFactor: number;
maxNumScales: number;
scoreThresholds: number[];
};
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
function getDefaultMtcnnForwardParams() {
return {
minFaceSize: 20,
scaleFactor: 0.709,
maxNumScales: 10,
scoreThresholds: [0.6, 0.7, 0.7]
};
}
exports.getDefaultMtcnnForwardParams = getDefaultMtcnnForwardParams;
//# sourceMappingURL=getDefaultMtcnnForwardParams.js.map
\ No newline at end of file
{"version":3,"file":"getDefaultMtcnnForwardParams.js","sourceRoot":"","sources":["../../../src/mtcnn/getDefaultMtcnnForwardParams.ts"],"names":[],"mappings":";;AAAA;IACE,OAAO;QACL,WAAW,EAAE,EAAE;QACf,WAAW,EAAE,KAAK;QAClB,YAAY,EAAE,EAAE;QAChB,eAAe,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;KACjC,CAAA;AACH,CAAC;AAPD,oEAOC"}
\ No newline at end of file
import { TNetInput } from 'tfjs-image-recognition-base';
import { TinyYolov2Types } from 'tfjs-tiny-yolov2';
import { TinyYolov2 } from '.';
import { FullFaceDescription } from './classes/FullFaceDescription';
import { FaceDetectionNet } from './faceDetectionNet/FaceDetectionNet';
import { FaceLandmark68Net } from './faceLandmarkNet/FaceLandmark68Net';
import { FaceRecognitionNet } from './faceRecognitionNet/FaceRecognitionNet';
import { Mtcnn } from './mtcnn/Mtcnn';
import { MtcnnForwardParams } from './mtcnn/types';
export declare function allFacesSsdMobilenetv1Factory(ssdMobilenetv1: FaceDetectionNet, landmarkNet: FaceLandmark68Net, recognitionNet: FaceRecognitionNet): (input: TNetInput, minConfidence?: number, useBatchProcessing?: boolean) => Promise<FullFaceDescription[]>;
export declare function allFacesTinyYolov2Factory(tinyYolov2: TinyYolov2, landmarkNet: FaceLandmark68Net, recognitionNet: FaceRecognitionNet): (input: TNetInput, forwardParams?: TinyYolov2Types.TinyYolov2ForwardParams, useBatchProcessing?: boolean) => Promise<FullFaceDescription[]>;
export declare function allFacesMtcnnFactory(mtcnn: Mtcnn, recognitionNet: FaceRecognitionNet): (input: TNetInput, mtcnnForwardParams?: MtcnnForwardParams, useBatchProcessing?: boolean) => Promise<FullFaceDescription[]>;
import * as tslib_1 from "tslib";
import { Point } from 'tfjs-image-recognition-base';
import { FullFaceDescription } from './classes/FullFaceDescription';
import { extractFaces } from './dom';
function computeDescriptorsFactory(recognitionNet) {
return function (input, alignedFaceBoxes, useBatchProcessing) {
return tslib_1.__awaiter(this, void 0, void 0, function () {
var alignedFaceCanvases, descriptors, _a;
return tslib_1.__generator(this, function (_b) {
switch (_b.label) {
case 0: return [4 /*yield*/, extractFaces(input, alignedFaceBoxes)];
case 1:
alignedFaceCanvases = _b.sent();
if (!useBatchProcessing) return [3 /*break*/, 3];
return [4 /*yield*/, recognitionNet.computeFaceDescriptor(alignedFaceCanvases)];
case 2:
_a = _b.sent();
return [3 /*break*/, 5];
case 3: return [4 /*yield*/, Promise.all(alignedFaceCanvases.map(function (canvas) { return recognitionNet.computeFaceDescriptor(canvas); }))];
case 4:
_a = _b.sent();
_b.label = 5;
case 5:
descriptors = _a;
return [2 /*return*/, descriptors];
}
});
});
};
}
function allFacesFactory(detectFaces, landmarkNet, recognitionNet) {
var computeDescriptors = computeDescriptorsFactory(recognitionNet);
return function (input, useBatchProcessing) {
if (useBatchProcessing === void 0) { useBatchProcessing = false; }
return tslib_1.__awaiter(this, void 0, void 0, function () {
var detections, faceCanvases, faceLandmarksByFace, _a, alignedFaceBoxes, descriptors;
return tslib_1.__generator(this, function (_b) {
switch (_b.label) {
case 0: return [4 /*yield*/, detectFaces(input)];
case 1:
detections = _b.sent();
return [4 /*yield*/, extractFaces(input, detections)];
case 2:
faceCanvases = _b.sent();
if (!useBatchProcessing) return [3 /*break*/, 4];
return [4 /*yield*/, landmarkNet.detectLandmarks(faceCanvases)];
case 3:
_a = _b.sent();
return [3 /*break*/, 6];
case 4: return [4 /*yield*/, Promise.all(faceCanvases.map(function (canvas) { return landmarkNet.detectLandmarks(canvas); }))];
case 5:
_a = _b.sent();
_b.label = 6;
case 6:
faceLandmarksByFace = _a;
alignedFaceBoxes = faceLandmarksByFace.map(function (landmarks, i) { return landmarks.align(detections[i].getBox()); });
return [4 /*yield*/, computeDescriptors(input, alignedFaceBoxes, useBatchProcessing)];
case 7:
descriptors = _b.sent();
return [2 /*return*/, detections.map(function (detection, i) {
return new FullFaceDescription(detection, faceLandmarksByFace[i].shiftByPoint(new Point(detection.box.x, detection.box.y)), descriptors[i]);
})];
}
});
});
};
}
export function allFacesSsdMobilenetv1Factory(ssdMobilenetv1, landmarkNet, recognitionNet) {
return function (input, minConfidence, useBatchProcessing) {
if (minConfidence === void 0) { minConfidence = 0.8; }
if (useBatchProcessing === void 0) { useBatchProcessing = false; }
return tslib_1.__awaiter(this, void 0, void 0, function () {
var detectFaces, allFaces;
return tslib_1.__generator(this, function (_a) {
detectFaces = function (input) { return ssdMobilenetv1.locateFaces(input, minConfidence); };
allFaces = allFacesFactory(detectFaces, landmarkNet, recognitionNet);
return [2 /*return*/, allFaces(input, useBatchProcessing)];
});
});
};
}
export function allFacesTinyYolov2Factory(tinyYolov2, landmarkNet, recognitionNet) {
return function (input, forwardParams, useBatchProcessing) {
if (forwardParams === void 0) { forwardParams = {}; }
if (useBatchProcessing === void 0) { useBatchProcessing = false; }
return tslib_1.__awaiter(this, void 0, void 0, function () {
var detectFaces, allFaces;
return tslib_1.__generator(this, function (_a) {
detectFaces = function (input) { return tinyYolov2.locateFaces(input, forwardParams); };
allFaces = allFacesFactory(detectFaces, landmarkNet, recognitionNet);
return [2 /*return*/, allFaces(input, useBatchProcessing)];
});
});
};
}
export function allFacesMtcnnFactory(mtcnn, recognitionNet) {
var computeDescriptors = computeDescriptorsFactory(recognitionNet);
return function (input, mtcnnForwardParams, useBatchProcessing) {
if (mtcnnForwardParams === void 0) { mtcnnForwardParams = {}; }
if (useBatchProcessing === void 0) { useBatchProcessing = false; }
return tslib_1.__awaiter(this, void 0, void 0, function () {
var results, alignedFaceBoxes, descriptors;
return tslib_1.__generator(this, function (_a) {
switch (_a.label) {
case 0: return [4 /*yield*/, mtcnn.forward(input, mtcnnForwardParams)];
case 1:
results = _a.sent();
alignedFaceBoxes = results.map(function (_a) {
var faceLandmarks = _a.faceLandmarks;
return faceLandmarks.align();
});
return [4 /*yield*/, computeDescriptors(input, alignedFaceBoxes, useBatchProcessing)];
case 2:
descriptors = _a.sent();
return [2 /*return*/, results.map(function (_a, i) {
var faceDetection = _a.faceDetection, faceLandmarks = _a.faceLandmarks;
return new FullFaceDescription(faceDetection, faceLandmarks, descriptors[i]);
})];
}
});
});
};
}
//# sourceMappingURL=allFacesFactory.js.map
\ No newline at end of file
{"version":3,"file":"allFacesFactory.js","sourceRoot":"","sources":["../../src/allFacesFactory.ts"],"names":[],"mappings":"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"}
\ No newline at end of file
import * as tf from '@tensorflow/tfjs-core';
import { NetInput, NeuralNetwork, TNetInput } from 'tfjs-image-recognition-base';
import { FaceDetection } from '../classes/FaceDetection';
import { NetParams } from './types';
export declare class FaceDetectionNet extends NeuralNetwork<NetParams> {
constructor();
forwardInput(input: NetInput): {
boxes: tf.Tensor<tf.Rank.R2>[];
scores: tf.Tensor<tf.Rank.R1>[];
};
forward(input: TNetInput): Promise<{
boxes: tf.Tensor<tf.Rank.R2>[];
scores: tf.Tensor<tf.Rank.R1>[];
}>;
locateFaces(input: TNetInput, minConfidence?: number, maxResults?: number): Promise<FaceDetection[]>;
protected loadQuantizedParams(uri: string | undefined): Promise<{
params: NetParams;
paramMappings: {
originalPath?: string | undefined;
paramPath: string;
}[];
}>;
protected extractParams(weights: Float32Array): {
params: NetParams;
paramMappings: {
originalPath?: string | undefined;
paramPath: string;
}[];
};
}
import * as tslib_1 from "tslib";
import * as tf from '@tensorflow/tfjs-core';
import { NeuralNetwork, Rect, toNetInput } from 'tfjs-image-recognition-base';
import { FaceDetection } from '../classes/FaceDetection';
import { extractParams } from './extractParams';
import { loadQuantizedParams } from './loadQuantizedParams';
import { mobileNetV1 } from './mobileNetV1';
import { nonMaxSuppression } from './nonMaxSuppression';
import { outputLayer } from './outputLayer';
import { predictionLayer } from './predictionLayer';
var FaceDetectionNet = /** @class */ (function (_super) {
tslib_1.__extends(FaceDetectionNet, _super);
function FaceDetectionNet() {
return _super.call(this, 'FaceDetectionNet') || this;
}
FaceDetectionNet.prototype.forwardInput = function (input) {
var params = this.params;
if (!params) {
throw new Error('FaceDetectionNet - load model before inference');
}
return tf.tidy(function () {
var batchTensor = input.toBatchTensor(512, false).toFloat();
var x = tf.sub(tf.mul(batchTensor, tf.scalar(0.007843137718737125)), tf.scalar(1));
var features = mobileNetV1(x, params.mobilenetv1);
var _a = predictionLayer(features.out, features.conv11, params.prediction_layer), boxPredictions = _a.boxPredictions, classPredictions = _a.classPredictions;
return outputLayer(boxPredictions, classPredictions, params.output_layer);
});
};
FaceDetectionNet.prototype.forward = function (input) {
return tslib_1.__awaiter(this, void 0, void 0, function () {
var _a;
return tslib_1.__generator(this, function (_b) {
switch (_b.label) {
case 0:
_a = this.forwardInput;
return [4 /*yield*/, toNetInput(input)];
case 1: return [2 /*return*/, _a.apply(this, [_b.sent()])];
}
});
});
};
FaceDetectionNet.prototype.locateFaces = function (input, minConfidence, maxResults) {
if (minConfidence === void 0) { minConfidence = 0.8; }
if (maxResults === void 0) { maxResults = 100; }
return tslib_1.__awaiter(this, void 0, void 0, function () {
var netInput, _a, _boxes, _scores, boxes, scores, i, scoresData, _b, _c, iouThreshold, indices, reshapedDims, inputSize, padX, padY, results;
return tslib_1.__generator(this, function (_d) {
switch (_d.label) {
case 0: return [4 /*yield*/, toNetInput(input)];
case 1:
netInput = _d.sent();
_a = this.forwardInput(netInput), _boxes = _a.boxes, _scores = _a.scores;
boxes = _boxes[0];
scores = _scores[0];
for (i = 1; i < _boxes.length; i++) {
_boxes[i].dispose();
_scores[i].dispose();
}
_c = (_b = Array).from;
return [4 /*yield*/, scores.data()];
case 2:
scoresData = _c.apply(_b, [_d.sent()]);
iouThreshold = 0.5;
indices = nonMaxSuppression(boxes, scoresData, maxResults, iouThreshold, minConfidence);
reshapedDims = netInput.getReshapedInputDimensions(0);
inputSize = netInput.inputSize;
padX = inputSize / reshapedDims.width;
padY = inputSize / reshapedDims.height;
results = indices
.map(function (idx) {
var _a = [
Math.max(0, boxes.get(idx, 0)),
Math.min(1.0, boxes.get(idx, 2))
].map(function (val) { return val * padY; }), top = _a[0], bottom = _a[1];
var _b = [
Math.max(0, boxes.get(idx, 1)),
Math.min(1.0, boxes.get(idx, 3))
].map(function (val) { return val * padX; }), left = _b[0], right = _b[1];
return new FaceDetection(scoresData[idx], new Rect(left, top, right - left, bottom - top), {
height: netInput.getInputHeight(0),
width: netInput.getInputWidth(0)
});
});
boxes.dispose();
scores.dispose();
return [2 /*return*/, results];
}
});
});
};
FaceDetectionNet.prototype.loadQuantizedParams = function (uri) {
return loadQuantizedParams(uri);
};
FaceDetectionNet.prototype.extractParams = function (weights) {
return extractParams(weights);
};
return FaceDetectionNet;
}(NeuralNetwork));
export { FaceDetectionNet };
//# sourceMappingURL=FaceDetectionNet.js.map
\ No newline at end of file
{"version":3,"file":"FaceDetectionNet.js","sourceRoot":"","sources":["../../../src/faceDetectionNet/FaceDetectionNet.ts"],"names":[],"mappings":"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"}
\ No newline at end of file
import * as tf from '@tensorflow/tfjs-core';
import { BoxPredictionParams } from './types';
export declare function boxPredictionLayer(x: tf.Tensor4D, params: BoxPredictionParams): {
boxPredictionEncoding: tf.Tensor<tf.Rank>;
classPrediction: tf.Tensor<tf.Rank>;
};
import * as tf from '@tensorflow/tfjs-core';
import { convLayer } from 'tfjs-tiny-yolov2';
export function boxPredictionLayer(x, params) {
return tf.tidy(function () {
var batchSize = x.shape[0];
var boxPredictionEncoding = tf.reshape(convLayer(x, params.box_encoding_predictor), [batchSize, -1, 1, 4]);
var classPrediction = tf.reshape(convLayer(x, params.class_predictor), [batchSize, -1, 3]);
return {
boxPredictionEncoding: boxPredictionEncoding,
classPrediction: classPrediction
};
});
}
//# sourceMappingURL=boxPredictionLayer.js.map
\ No newline at end of file
{"version":3,"file":"boxPredictionLayer.js","sourceRoot":"","sources":["../../../src/faceDetectionNet/boxPredictionLayer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,uBAAuB,CAAC;AAC5C,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAK7C,MAAM,6BACJ,CAAc,EACd,MAA2B;IAE3B,OAAO,EAAE,CAAC,IAAI,CAAC;QAEb,IAAM,SAAS,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAA;QAE5B,IAAM,qBAAqB,GAAG,EAAE,CAAC,OAAO,CACtC,SAAS,CAAC,CAAC,EAAE,MAAM,CAAC,sBAAsB,CAAC,EAC3C,CAAC,SAAS,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CACtB,CAAA;QACD,IAAM,eAAe,GAAG,EAAE,CAAC,OAAO,CAChC,SAAS,CAAC,CAAC,EAAE,MAAM,CAAC,eAAe,CAAC,EACpC,CAAC,SAAS,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CACnB,CAAA;QAED,OAAO;YACL,qBAAqB,uBAAA;YACrB,eAAe,iBAAA;SAChB,CAAA;IACH,CAAC,CAAC,CAAA;AACJ,CAAC"}
\ No newline at end of file
import { ParamMapping } from 'tfjs-image-recognition-base';
import { NetParams } from './types';
export declare function extractParams(weights: Float32Array): {
params: NetParams;
paramMappings: ParamMapping[];
};
import * as tf from '@tensorflow/tfjs-core';
import { extractWeightsFactory } from 'tfjs-image-recognition-base';
function extractorsFactory(extractWeights, paramMappings) {
function extractDepthwiseConvParams(numChannels, mappedPrefix) {
var filters = tf.tensor4d(extractWeights(3 * 3 * numChannels), [3, 3, numChannels, 1]);
var batch_norm_scale = tf.tensor1d(extractWeights(numChannels));
var batch_norm_offset = tf.tensor1d(extractWeights(numChannels));
var batch_norm_mean = tf.tensor1d(extractWeights(numChannels));
var batch_norm_variance = tf.tensor1d(extractWeights(numChannels));
paramMappings.push({ paramPath: mappedPrefix + "/filters" }, { paramPath: mappedPrefix + "/batch_norm_scale" }, { paramPath: mappedPrefix + "/batch_norm_offset" }, { paramPath: mappedPrefix + "/batch_norm_mean" }, { paramPath: mappedPrefix + "/batch_norm_variance" });
return {
filters: filters,
batch_norm_scale: batch_norm_scale,
batch_norm_offset: batch_norm_offset,
batch_norm_mean: batch_norm_mean,
batch_norm_variance: batch_norm_variance
};
}
function extractConvParams(channelsIn, channelsOut, filterSize, mappedPrefix, isPointwiseConv) {
var filters = tf.tensor4d(extractWeights(channelsIn * channelsOut * filterSize * filterSize), [filterSize, filterSize, channelsIn, channelsOut]);
var bias = tf.tensor1d(extractWeights(channelsOut));
paramMappings.push({ paramPath: mappedPrefix + "/filters" }, { paramPath: mappedPrefix + "/" + (isPointwiseConv ? 'batch_norm_offset' : 'bias') });
return { filters: filters, bias: bias };
}
function extractPointwiseConvParams(channelsIn, channelsOut, filterSize, mappedPrefix) {
var _a = extractConvParams(channelsIn, channelsOut, filterSize, mappedPrefix, true), filters = _a.filters, bias = _a.bias;
return {
filters: filters,
batch_norm_offset: bias
};
}
function extractConvPairParams(channelsIn, channelsOut, mappedPrefix) {
var depthwise_conv = extractDepthwiseConvParams(channelsIn, mappedPrefix + "/depthwise_conv");
var pointwise_conv = extractPointwiseConvParams(channelsIn, channelsOut, 1, mappedPrefix + "/pointwise_conv");
return { depthwise_conv: depthwise_conv, pointwise_conv: pointwise_conv };
}
function extractMobilenetV1Params() {
var conv_0 = extractPointwiseConvParams(3, 32, 3, 'mobilenetv1/conv_0');
var conv_1 = extractConvPairParams(32, 64, 'mobilenetv1/conv_1');
var conv_2 = extractConvPairParams(64, 128, 'mobilenetv1/conv_2');
var conv_3 = extractConvPairParams(128, 128, 'mobilenetv1/conv_3');
var conv_4 = extractConvPairParams(128, 256, 'mobilenetv1/conv_4');
var conv_5 = extractConvPairParams(256, 256, 'mobilenetv1/conv_5');
var conv_6 = extractConvPairParams(256, 512, 'mobilenetv1/conv_6');
var conv_7 = extractConvPairParams(512, 512, 'mobilenetv1/conv_7');
var conv_8 = extractConvPairParams(512, 512, 'mobilenetv1/conv_8');
var conv_9 = extractConvPairParams(512, 512, 'mobilenetv1/conv_9');
var conv_10 = extractConvPairParams(512, 512, 'mobilenetv1/conv_10');
var conv_11 = extractConvPairParams(512, 512, 'mobilenetv1/conv_11');
var conv_12 = extractConvPairParams(512, 1024, 'mobilenetv1/conv_12');
var conv_13 = extractConvPairParams(1024, 1024, 'mobilenetv1/conv_13');
return {
conv_0: conv_0,
conv_1: conv_1,
conv_2: conv_2,
conv_3: conv_3,
conv_4: conv_4,
conv_5: conv_5,
conv_6: conv_6,
conv_7: conv_7,
conv_8: conv_8,
conv_9: conv_9,
conv_10: conv_10,
conv_11: conv_11,
conv_12: conv_12,
conv_13: conv_13
};
}
function extractPredictionLayerParams() {
var conv_0 = extractPointwiseConvParams(1024, 256, 1, 'prediction_layer/conv_0');
var conv_1 = extractPointwiseConvParams(256, 512, 3, 'prediction_layer/conv_1');
var conv_2 = extractPointwiseConvParams(512, 128, 1, 'prediction_layer/conv_2');
var conv_3 = extractPointwiseConvParams(128, 256, 3, 'prediction_layer/conv_3');
var conv_4 = extractPointwiseConvParams(256, 128, 1, 'prediction_layer/conv_4');
var conv_5 = extractPointwiseConvParams(128, 256, 3, 'prediction_layer/conv_5');
var conv_6 = extractPointwiseConvParams(256, 64, 1, 'prediction_layer/conv_6');
var conv_7 = extractPointwiseConvParams(64, 128, 3, 'prediction_layer/conv_7');
var box_encoding_0_predictor = extractConvParams(512, 12, 1, 'prediction_layer/box_predictor_0/box_encoding_predictor');
var class_predictor_0 = extractConvParams(512, 9, 1, 'prediction_layer/box_predictor_0/class_predictor');
var box_encoding_1_predictor = extractConvParams(1024, 24, 1, 'prediction_layer/box_predictor_1/box_encoding_predictor');
var class_predictor_1 = extractConvParams(1024, 18, 1, 'prediction_layer/box_predictor_1/class_predictor');
var box_encoding_2_predictor = extractConvParams(512, 24, 1, 'prediction_layer/box_predictor_2/box_encoding_predictor');
var class_predictor_2 = extractConvParams(512, 18, 1, 'prediction_layer/box_predictor_2/class_predictor');
var box_encoding_3_predictor = extractConvParams(256, 24, 1, 'prediction_layer/box_predictor_3/box_encoding_predictor');
var class_predictor_3 = extractConvParams(256, 18, 1, 'prediction_layer/box_predictor_3/class_predictor');
var box_encoding_4_predictor = extractConvParams(256, 24, 1, 'prediction_layer/box_predictor_4/box_encoding_predictor');
var class_predictor_4 = extractConvParams(256, 18, 1, 'prediction_layer/box_predictor_4/class_predictor');
var box_encoding_5_predictor = extractConvParams(128, 24, 1, 'prediction_layer/box_predictor_5/box_encoding_predictor');
var class_predictor_5 = extractConvParams(128, 18, 1, 'prediction_layer/box_predictor_5/class_predictor');
var box_predictor_0 = {
box_encoding_predictor: box_encoding_0_predictor,
class_predictor: class_predictor_0
};
var box_predictor_1 = {
box_encoding_predictor: box_encoding_1_predictor,
class_predictor: class_predictor_1
};
var box_predictor_2 = {
box_encoding_predictor: box_encoding_2_predictor,
class_predictor: class_predictor_2
};
var box_predictor_3 = {
box_encoding_predictor: box_encoding_3_predictor,
class_predictor: class_predictor_3
};
var box_predictor_4 = {
box_encoding_predictor: box_encoding_4_predictor,
class_predictor: class_predictor_4
};
var box_predictor_5 = {
box_encoding_predictor: box_encoding_5_predictor,
class_predictor: class_predictor_5
};
return {
conv_0: conv_0,
conv_1: conv_1,
conv_2: conv_2,
conv_3: conv_3,
conv_4: conv_4,
conv_5: conv_5,
conv_6: conv_6,
conv_7: conv_7,
box_predictor_0: box_predictor_0,
box_predictor_1: box_predictor_1,
box_predictor_2: box_predictor_2,
box_predictor_3: box_predictor_3,
box_predictor_4: box_predictor_4,
box_predictor_5: box_predictor_5
};
}
return {
extractMobilenetV1Params: extractMobilenetV1Params,
extractPredictionLayerParams: extractPredictionLayerParams
};
}
export function extractParams(weights) {
var paramMappings = [];
var _a = extractWeightsFactory(weights), extractWeights = _a.extractWeights, getRemainingWeights = _a.getRemainingWeights;
var _b = extractorsFactory(extractWeights, paramMappings), extractMobilenetV1Params = _b.extractMobilenetV1Params, extractPredictionLayerParams = _b.extractPredictionLayerParams;
var mobilenetv1 = extractMobilenetV1Params();
var prediction_layer = extractPredictionLayerParams();
var extra_dim = tf.tensor3d(extractWeights(5118 * 4), [1, 5118, 4]);
var output_layer = {
extra_dim: extra_dim
};
paramMappings.push({ paramPath: 'output_layer/extra_dim' });
if (getRemainingWeights().length !== 0) {
throw new Error("weights remaing after extract: " + getRemainingWeights().length);
}
return {
params: {
mobilenetv1: mobilenetv1,
prediction_layer: prediction_layer,
output_layer: output_layer
},
paramMappings: paramMappings
};
}
//# sourceMappingURL=extractParams.js.map
\ No newline at end of file
{"version":3,"file":"extractParams.js","sourceRoot":"","sources":["../../../src/faceDetectionNet/extractParams.ts"],"names":[],"mappings":"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"}
\ No newline at end of file
import { FaceDetectionNet } from './FaceDetectionNet';
export * from './FaceDetectionNet';
export declare function createFaceDetectionNet(weights: Float32Array): FaceDetectionNet;
export declare function faceDetectionNet(weights: Float32Array): FaceDetectionNet;
import { FaceDetectionNet } from './FaceDetectionNet';
export * from './FaceDetectionNet';
export function createFaceDetectionNet(weights) {
var net = new FaceDetectionNet();
net.extractWeights(weights);
return net;
}
export function faceDetectionNet(weights) {
console.warn('faceDetectionNet(weights: Float32Array) will be deprecated in future, use createFaceDetectionNet instead');
return createFaceDetectionNet(weights);
}
//# sourceMappingURL=index.js.map
\ No newline at end of file
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/faceDetectionNet/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAEtD,cAAc,oBAAoB,CAAC;AAEnC,MAAM,iCAAiC,OAAqB;IAC1D,IAAM,GAAG,GAAG,IAAI,gBAAgB,EAAE,CAAA;IAClC,GAAG,CAAC,cAAc,CAAC,OAAO,CAAC,CAAA;IAC3B,OAAO,GAAG,CAAA;AACZ,CAAC;AAED,MAAM,2BAA2B,OAAqB;IACpD,OAAO,CAAC,IAAI,CAAC,0GAA0G,CAAC,CAAA;IACxH,OAAO,sBAAsB,CAAC,OAAO,CAAC,CAAA;AACxC,CAAC"}
\ No newline at end of file
import { ParamMapping } from 'tfjs-image-recognition-base';
import { NetParams } from './types';
export declare function loadQuantizedParams(uri: string | undefined): Promise<{
params: NetParams;
paramMappings: ParamMapping[];
}>;
import * as tslib_1 from "tslib";
import { disposeUnusedWeightTensors, extractWeightEntryFactory, isTensor3D, loadWeightMap, } from 'tfjs-image-recognition-base';
var DEFAULT_MODEL_NAME = 'ssd_mobilenetv1_model';
function extractorsFactory(weightMap, paramMappings) {
var extractWeightEntry = extractWeightEntryFactory(weightMap, paramMappings);
function extractPointwiseConvParams(prefix, idx, mappedPrefix) {
var filters = extractWeightEntry(prefix + "/Conv2d_" + idx + "_pointwise/weights", 4, mappedPrefix + "/filters");
var batch_norm_offset = extractWeightEntry(prefix + "/Conv2d_" + idx + "_pointwise/convolution_bn_offset", 1, mappedPrefix + "/batch_norm_offset");
return { filters: filters, batch_norm_offset: batch_norm_offset };
}
function extractConvPairParams(idx) {
var mappedPrefix = "mobilenetv1/conv_" + idx;
var prefixDepthwiseConv = "MobilenetV1/Conv2d_" + idx + "_depthwise";
var mappedPrefixDepthwiseConv = mappedPrefix + "/depthwise_conv";
var mappedPrefixPointwiseConv = mappedPrefix + "/pointwise_conv";
var filters = extractWeightEntry(prefixDepthwiseConv + "/depthwise_weights", 4, mappedPrefixDepthwiseConv + "/filters");
var batch_norm_scale = extractWeightEntry(prefixDepthwiseConv + "/BatchNorm/gamma", 1, mappedPrefixDepthwiseConv + "/batch_norm_scale");
var batch_norm_offset = extractWeightEntry(prefixDepthwiseConv + "/BatchNorm/beta", 1, mappedPrefixDepthwiseConv + "/batch_norm_offset");
var batch_norm_mean = extractWeightEntry(prefixDepthwiseConv + "/BatchNorm/moving_mean", 1, mappedPrefixDepthwiseConv + "/batch_norm_mean");
var batch_norm_variance = extractWeightEntry(prefixDepthwiseConv + "/BatchNorm/moving_variance", 1, mappedPrefixDepthwiseConv + "/batch_norm_variance");
return {
depthwise_conv: {
filters: filters,
batch_norm_scale: batch_norm_scale,
batch_norm_offset: batch_norm_offset,
batch_norm_mean: batch_norm_mean,
batch_norm_variance: batch_norm_variance
},
pointwise_conv: extractPointwiseConvParams('MobilenetV1', idx, mappedPrefixPointwiseConv)
};
}
function extractMobilenetV1Params() {
return {
conv_0: extractPointwiseConvParams('MobilenetV1', 0, 'mobilenetv1/conv_0'),
conv_1: extractConvPairParams(1),
conv_2: extractConvPairParams(2),
conv_3: extractConvPairParams(3),
conv_4: extractConvPairParams(4),
conv_5: extractConvPairParams(5),
conv_6: extractConvPairParams(6),
conv_7: extractConvPairParams(7),
conv_8: extractConvPairParams(8),
conv_9: extractConvPairParams(9),
conv_10: extractConvPairParams(10),
conv_11: extractConvPairParams(11),
conv_12: extractConvPairParams(12),
conv_13: extractConvPairParams(13)
};
}
function extractConvParams(prefix, mappedPrefix) {
var filters = extractWeightEntry(prefix + "/weights", 4, mappedPrefix + "/filters");
var bias = extractWeightEntry(prefix + "/biases", 1, mappedPrefix + "/bias");
return { filters: filters, bias: bias };
}
function extractBoxPredictorParams(idx) {
var box_encoding_predictor = extractConvParams("Prediction/BoxPredictor_" + idx + "/BoxEncodingPredictor", "prediction_layer/box_predictor_" + idx + "/box_encoding_predictor");
var class_predictor = extractConvParams("Prediction/BoxPredictor_" + idx + "/ClassPredictor", "prediction_layer/box_predictor_" + idx + "/class_predictor");
return { box_encoding_predictor: box_encoding_predictor, class_predictor: class_predictor };
}
function extractPredictionLayerParams() {
return {
conv_0: extractPointwiseConvParams('Prediction', 0, 'prediction_layer/conv_0'),
conv_1: extractPointwiseConvParams('Prediction', 1, 'prediction_layer/conv_1'),
conv_2: extractPointwiseConvParams('Prediction', 2, 'prediction_layer/conv_2'),
conv_3: extractPointwiseConvParams('Prediction', 3, 'prediction_layer/conv_3'),
conv_4: extractPointwiseConvParams('Prediction', 4, 'prediction_layer/conv_4'),
conv_5: extractPointwiseConvParams('Prediction', 5, 'prediction_layer/conv_5'),
conv_6: extractPointwiseConvParams('Prediction', 6, 'prediction_layer/conv_6'),
conv_7: extractPointwiseConvParams('Prediction', 7, 'prediction_layer/conv_7'),
box_predictor_0: extractBoxPredictorParams(0),
box_predictor_1: extractBoxPredictorParams(1),
box_predictor_2: extractBoxPredictorParams(2),
box_predictor_3: extractBoxPredictorParams(3),
box_predictor_4: extractBoxPredictorParams(4),
box_predictor_5: extractBoxPredictorParams(5)
};
}
return {
extractMobilenetV1Params: extractMobilenetV1Params,
extractPredictionLayerParams: extractPredictionLayerParams
};
}
export function loadQuantizedParams(uri) {
return tslib_1.__awaiter(this, void 0, void 0, function () {
var weightMap, paramMappings, _a, extractMobilenetV1Params, extractPredictionLayerParams, extra_dim, params;
return tslib_1.__generator(this, function (_b) {
switch (_b.label) {
case 0: return [4 /*yield*/, loadWeightMap(uri, DEFAULT_MODEL_NAME)];
case 1:
weightMap = _b.sent();
paramMappings = [];
_a = extractorsFactory(weightMap, paramMappings), extractMobilenetV1Params = _a.extractMobilenetV1Params, extractPredictionLayerParams = _a.extractPredictionLayerParams;
extra_dim = weightMap['Output/extra_dim'];
paramMappings.push({ originalPath: 'Output/extra_dim', paramPath: 'output_layer/extra_dim' });
if (!isTensor3D(extra_dim)) {
throw new Error("expected weightMap['Output/extra_dim'] to be a Tensor3D, instead have " + extra_dim);
}
params = {
mobilenetv1: extractMobilenetV1Params(),
prediction_layer: extractPredictionLayerParams(),
output_layer: {
extra_dim: extra_dim
}
};
disposeUnusedWeightTensors(weightMap, paramMappings);
return [2 /*return*/, { params: params, paramMappings: paramMappings }];
}
});
});
}
//# sourceMappingURL=loadQuantizedParams.js.map
\ No newline at end of file
{"version":3,"file":"loadQuantizedParams.js","sourceRoot":"","sources":["../../../src/faceDetectionNet/loadQuantizedParams.ts"],"names":[],"mappings":"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"}
\ No newline at end of file
import * as tf from '@tensorflow/tfjs-core';
import { MobileNetV1 } from './types';
export declare function mobileNetV1(x: tf.Tensor4D, params: MobileNetV1.Params): {
out: tf.Tensor<tf.Rank.R4>;
conv11: any;
};
import * as tf from '@tensorflow/tfjs-core';
import { pointwiseConvLayer } from './pointwiseConvLayer';
var epsilon = 0.0010000000474974513;
function depthwiseConvLayer(x, params, strides) {
return tf.tidy(function () {
var out = tf.depthwiseConv2d(x, params.filters, strides, 'same');
out = tf.batchNormalization(out, params.batch_norm_mean, params.batch_norm_variance, epsilon, params.batch_norm_scale, params.batch_norm_offset);
return tf.clipByValue(out, 0, 6);
});
}
function getStridesForLayerIdx(layerIdx) {
return [2, 4, 6, 12].some(function (idx) { return idx === layerIdx; }) ? [2, 2] : [1, 1];
}
export function mobileNetV1(x, params) {
return tf.tidy(function () {
var conv11 = null;
var out = pointwiseConvLayer(x, params.conv_0, [2, 2]);
var convPairParams = [
params.conv_1,
params.conv_2,
params.conv_3,
params.conv_4,
params.conv_5,
params.conv_6,
params.conv_7,
params.conv_8,
params.conv_9,
params.conv_10,
params.conv_11,
params.conv_12,
params.conv_13
];
convPairParams.forEach(function (param, i) {
var layerIdx = i + 1;
var depthwiseConvStrides = getStridesForLayerIdx(layerIdx);
out = depthwiseConvLayer(out, param.depthwise_conv, depthwiseConvStrides);
out = pointwiseConvLayer(out, param.pointwise_conv, [1, 1]);
if (layerIdx === 11) {
conv11 = out;
}
});
if (conv11 === null) {
throw new Error('mobileNetV1 - output of conv layer 11 is null');
}
return {
out: out,
conv11: conv11
};
});
}
//# sourceMappingURL=mobileNetV1.js.map
\ No newline at end of file
{"version":3,"file":"mobileNetV1.js","sourceRoot":"","sources":["../../../src/faceDetectionNet/mobileNetV1.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,uBAAuB,CAAC;AAE5C,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAG1D,IAAM,OAAO,GAAG,qBAAqB,CAAA;AAErC,4BACE,CAAc,EACd,MAAuC,EACvC,OAAyB;IAEzB,OAAO,EAAE,CAAC,IAAI,CAAC;QAEb,IAAI,GAAG,GAAG,EAAE,CAAC,eAAe,CAAC,CAAC,EAAE,MAAM,CAAC,OAAO,EAAE,OAAO,EAAE,MAAM,CAAC,CAAA;QAChE,GAAG,GAAG,EAAE,CAAC,kBAAkB,CACzB,GAAG,EACH,MAAM,CAAC,eAAe,EACtB,MAAM,CAAC,mBAAmB,EAC1B,OAAO,EACP,MAAM,CAAC,gBAAgB,EACvB,MAAM,CAAC,iBAAiB,CACzB,CAAA;QACD,OAAO,EAAE,CAAC,WAAW,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC,CAAA;IAElC,CAAC,CAAC,CAAA;AACJ,CAAC;AAED,+BAA+B,QAAgB;IAC7C,OAAO,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,UAAA,GAAG,IAAI,OAAA,GAAG,KAAK,QAAQ,EAAhB,CAAgB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA;AACtE,CAAC;AAED,MAAM,sBAAsB,CAAc,EAAE,MAA0B;IACpE,OAAO,EAAE,CAAC,IAAI,CAAC;QAEb,IAAI,MAAM,GAAG,IAAI,CAAA;QACjB,IAAI,GAAG,GAAG,kBAAkB,CAAC,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAA;QAEtD,IAAM,cAAc,GAAG;YACrB,MAAM,CAAC,MAAM;YACb,MAAM,CAAC,MAAM;YACb,MAAM,CAAC,MAAM;YACb,MAAM,CAAC,MAAM;YACb,MAAM,CAAC,MAAM;YACb,MAAM,CAAC,MAAM;YACb,MAAM,CAAC,MAAM;YACb,MAAM,CAAC,MAAM;YACb,MAAM,CAAC,MAAM;YACb,MAAM,CAAC,OAAO;YACd,MAAM,CAAC,OAAO;YACd,MAAM,CAAC,OAAO;YACd,MAAM,CAAC,OAAO;SACf,CAAA;QAED,cAAc,CAAC,OAAO,CAAC,UAAC,KAAK,EAAE,CAAC;YAC9B,IAAM,QAAQ,GAAG,CAAC,GAAG,CAAC,CAAA;YACtB,IAAM,oBAAoB,GAAG,qBAAqB,CAAC,QAAQ,CAAC,CAAA;YAC5D,GAAG,GAAG,kBAAkB,CAAC,GAAG,EAAE,KAAK,CAAC,cAAc,EAAE,oBAAoB,CAAC,CAAA;YACzE,GAAG,GAAG,kBAAkB,CAAC,GAAG,EAAE,KAAK,CAAC,cAAc,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAA;YAC3D,IAAI,QAAQ,KAAK,EAAE,EAAE;gBACnB,MAAM,GAAG,GAAG,CAAA;aACb;QACH,CAAC,CAAC,CAAA;QAEF,IAAI,MAAM,KAAK,IAAI,EAAE;YACnB,MAAM,IAAI,KAAK,CAAC,+CAA+C,CAAC,CAAA;SACjE;QAED,OAAO;YACL,GAAG,KAAA;YACH,MAAM,EAAE,MAAa;SACtB,CAAA;IAEH,CAAC,CAAC,CAAA;AACJ,CAAC"}
\ No newline at end of file
import * as tf from '@tensorflow/tfjs-core';
export declare function nonMaxSuppression(boxes: tf.Tensor2D, scores: number[], maxOutputSize: number, iouThreshold: number, scoreThreshold: number): number[];
export function nonMaxSuppression(boxes, scores, maxOutputSize, iouThreshold, scoreThreshold) {
var numBoxes = boxes.shape[0];
var outputSize = Math.min(maxOutputSize, numBoxes);
var candidates = scores
.map(function (score, boxIndex) { return ({ score: score, boxIndex: boxIndex }); })
.filter(function (c) { return c.score > scoreThreshold; })
.sort(function (c1, c2) { return c2.score - c1.score; });
var suppressFunc = function (x) { return x <= iouThreshold ? 1 : 0; };
var selected = [];
candidates.forEach(function (c) {
if (selected.length >= outputSize) {
return;
}
var originalScore = c.score;
for (var j = selected.length - 1; j >= 0; --j) {
var iou = IOU(boxes, c.boxIndex, selected[j]);
if (iou === 0.0) {
continue;
}
c.score *= suppressFunc(iou);
if (c.score <= scoreThreshold) {
break;
}
}
if (originalScore === c.score) {
selected.push(c.boxIndex);
}
});
return selected;
}
function IOU(boxes, i, j) {
var yminI = Math.min(boxes.get(i, 0), boxes.get(i, 2));
var xminI = Math.min(boxes.get(i, 1), boxes.get(i, 3));
var ymaxI = Math.max(boxes.get(i, 0), boxes.get(i, 2));
var xmaxI = Math.max(boxes.get(i, 1), boxes.get(i, 3));
var yminJ = Math.min(boxes.get(j, 0), boxes.get(j, 2));
var xminJ = Math.min(boxes.get(j, 1), boxes.get(j, 3));
var ymaxJ = Math.max(boxes.get(j, 0), boxes.get(j, 2));
var xmaxJ = Math.max(boxes.get(j, 1), boxes.get(j, 3));
var areaI = (ymaxI - yminI) * (xmaxI - xminI);
var areaJ = (ymaxJ - yminJ) * (xmaxJ - xminJ);
if (areaI <= 0 || areaJ <= 0) {
return 0.0;
}
var intersectionYmin = Math.max(yminI, yminJ);
var intersectionXmin = Math.max(xminI, xminJ);
var intersectionYmax = Math.min(ymaxI, ymaxJ);
var intersectionXmax = Math.min(xmaxI, xmaxJ);
var intersectionArea = Math.max(intersectionYmax - intersectionYmin, 0.0) *
Math.max(intersectionXmax - intersectionXmin, 0.0);
return intersectionArea / (areaI + areaJ - intersectionArea);
}
//# sourceMappingURL=nonMaxSuppression.js.map
\ No newline at end of file
{"version":3,"file":"nonMaxSuppression.js","sourceRoot":"","sources":["../../../src/faceDetectionNet/nonMaxSuppression.ts"],"names":[],"mappings":"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"}
\ No newline at end of file
import * as tf from '@tensorflow/tfjs-core';
import { OutputLayerParams } from './types';
export declare function outputLayer(boxPredictions: tf.Tensor4D, classPredictions: tf.Tensor4D, params: OutputLayerParams): {
boxes: tf.Tensor<tf.Rank.R2>[];
scores: tf.Tensor<tf.Rank.R1>[];
};
import * as tf from '@tensorflow/tfjs-core';
function getCenterCoordinatesAndSizesLayer(x) {
var vec = tf.unstack(tf.transpose(x, [1, 0]));
var sizes = [
tf.sub(vec[2], vec[0]),
tf.sub(vec[3], vec[1])
];
var centers = [
tf.add(vec[0], tf.div(sizes[0], tf.scalar(2))),
tf.add(vec[1], tf.div(sizes[1], tf.scalar(2)))
];
return {
sizes: sizes,
centers: centers
};
}
function decodeBoxesLayer(x0, x1) {
var _a = getCenterCoordinatesAndSizesLayer(x0), sizes = _a.sizes, centers = _a.centers;
var vec = tf.unstack(tf.transpose(x1, [1, 0]));
var div0_out = tf.div(tf.mul(tf.exp(tf.div(vec[2], tf.scalar(5))), sizes[0]), tf.scalar(2));
var add0_out = tf.add(tf.mul(tf.div(vec[0], tf.scalar(10)), sizes[0]), centers[0]);
var div1_out = tf.div(tf.mul(tf.exp(tf.div(vec[3], tf.scalar(5))), sizes[1]), tf.scalar(2));
var add1_out = tf.add(tf.mul(tf.div(vec[1], tf.scalar(10)), sizes[1]), centers[1]);
return tf.transpose(tf.stack([
tf.sub(add0_out, div0_out),
tf.sub(add1_out, div1_out),
tf.add(add0_out, div0_out),
tf.add(add1_out, div1_out)
]), [1, 0]);
}
export function outputLayer(boxPredictions, classPredictions, params) {
return tf.tidy(function () {
var batchSize = boxPredictions.shape[0];
var boxes = decodeBoxesLayer(tf.reshape(tf.tile(params.extra_dim, [batchSize, 1, 1]), [-1, 4]), tf.reshape(boxPredictions, [-1, 4]));
boxes = tf.reshape(boxes, [batchSize, (boxes.shape[0] / batchSize), 4]);
var scoresAndClasses = tf.sigmoid(tf.slice(classPredictions, [0, 0, 1], [-1, -1, -1]));
var scores = tf.slice(scoresAndClasses, [0, 0, 0], [-1, -1, 1]);
scores = tf.reshape(scores, [batchSize, scores.shape[1]]);
var boxesByBatch = tf.unstack(boxes);
var scoresByBatch = tf.unstack(scores);
return {
boxes: boxesByBatch,
scores: scoresByBatch
};
});
}
//# sourceMappingURL=outputLayer.js.map
\ No newline at end of file
{"version":3,"file":"outputLayer.js","sourceRoot":"","sources":["../../../src/faceDetectionNet/outputLayer.ts"],"names":[],"mappings":"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"}
\ No newline at end of file
import * as tf from '@tensorflow/tfjs-core';
import { PointwiseConvParams } from './types';
export declare function pointwiseConvLayer(x: tf.Tensor4D, params: PointwiseConvParams, strides: [number, number]): tf.Tensor<tf.Rank.R4>;
import * as tf from '@tensorflow/tfjs-core';
export function pointwiseConvLayer(x, params, strides) {
return tf.tidy(function () {
var out = tf.conv2d(x, params.filters, strides, 'same');
out = tf.add(out, params.batch_norm_offset);
return tf.clipByValue(out, 0, 6);
});
}
//# sourceMappingURL=pointwiseConvLayer.js.map
\ No newline at end of file
{"version":3,"file":"pointwiseConvLayer.js","sourceRoot":"","sources":["../../../src/faceDetectionNet/pointwiseConvLayer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,uBAAuB,CAAC;AAI5C,MAAM,6BACJ,CAAc,EACd,MAA2B,EAC3B,OAAyB;IAEzB,OAAO,EAAE,CAAC,IAAI,CAAC;QAEb,IAAI,GAAG,GAAG,EAAE,CAAC,MAAM,CAAC,CAAC,EAAE,MAAM,CAAC,OAAO,EAAE,OAAO,EAAE,MAAM,CAAC,CAAA;QACvD,GAAG,GAAG,EAAE,CAAC,GAAG,CAAC,GAAG,EAAE,MAAM,CAAC,iBAAiB,CAAC,CAAA;QAC3C,OAAO,EAAE,CAAC,WAAW,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC,CAAA;IAElC,CAAC,CAAC,CAAA;AACJ,CAAC"}
\ No newline at end of file
import * as tf from '@tensorflow/tfjs-core';
import { PredictionLayerParams } from './types';
export declare function predictionLayer(x: tf.Tensor4D, conv11: tf.Tensor4D, params: PredictionLayerParams): {
boxPredictions: tf.Tensor<tf.Rank.R4>;
classPredictions: tf.Tensor<tf.Rank.R4>;
};
import * as tf from '@tensorflow/tfjs-core';
import { boxPredictionLayer } from './boxPredictionLayer';
import { pointwiseConvLayer } from './pointwiseConvLayer';
export function predictionLayer(x, conv11, params) {
return tf.tidy(function () {
var conv0 = pointwiseConvLayer(x, params.conv_0, [1, 1]);
var conv1 = pointwiseConvLayer(conv0, params.conv_1, [2, 2]);
var conv2 = pointwiseConvLayer(conv1, params.conv_2, [1, 1]);
var conv3 = pointwiseConvLayer(conv2, params.conv_3, [2, 2]);
var conv4 = pointwiseConvLayer(conv3, params.conv_4, [1, 1]);
var conv5 = pointwiseConvLayer(conv4, params.conv_5, [2, 2]);
var conv6 = pointwiseConvLayer(conv5, params.conv_6, [1, 1]);
var conv7 = pointwiseConvLayer(conv6, params.conv_7, [2, 2]);
var boxPrediction0 = boxPredictionLayer(conv11, params.box_predictor_0);
var boxPrediction1 = boxPredictionLayer(x, params.box_predictor_1);
var boxPrediction2 = boxPredictionLayer(conv1, params.box_predictor_2);
var boxPrediction3 = boxPredictionLayer(conv3, params.box_predictor_3);
var boxPrediction4 = boxPredictionLayer(conv5, params.box_predictor_4);
var boxPrediction5 = boxPredictionLayer(conv7, params.box_predictor_5);
var boxPredictions = tf.concat([
boxPrediction0.boxPredictionEncoding,
boxPrediction1.boxPredictionEncoding,
boxPrediction2.boxPredictionEncoding,
boxPrediction3.boxPredictionEncoding,
boxPrediction4.boxPredictionEncoding,
boxPrediction5.boxPredictionEncoding
], 1);
var classPredictions = tf.concat([
boxPrediction0.classPrediction,
boxPrediction1.classPrediction,
boxPrediction2.classPrediction,
boxPrediction3.classPrediction,
boxPrediction4.classPrediction,
boxPrediction5.classPrediction
], 1);
return {
boxPredictions: boxPredictions,
classPredictions: classPredictions
};
});
}
//# sourceMappingURL=predictionLayer.js.map
\ No newline at end of file
{"version":3,"file":"predictionLayer.js","sourceRoot":"","sources":["../../../src/faceDetectionNet/predictionLayer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,uBAAuB,CAAC;AAE5C,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAG1D,MAAM,0BACJ,CAAc,EACd,MAAmB,EACnB,MAA6B;IAE7B,OAAO,EAAE,CAAC,IAAI,CAAC;QAEb,IAAM,KAAK,GAAG,kBAAkB,CAAC,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAA;QAC1D,IAAM,KAAK,GAAG,kBAAkB,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAA;QAC9D,IAAM,KAAK,GAAG,kBAAkB,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAA;QAC9D,IAAM,KAAK,GAAG,kBAAkB,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAA;QAC9D,IAAM,KAAK,GAAG,kBAAkB,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAA;QAC9D,IAAM,KAAK,GAAG,kBAAkB,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAA;QAC9D,IAAM,KAAK,GAAG,kBAAkB,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAA;QAC9D,IAAM,KAAK,GAAG,kBAAkB,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAA;QAE9D,IAAM,cAAc,GAAG,kBAAkB,CAAC,MAAM,EAAE,MAAM,CAAC,eAAe,CAAC,CAAA;QACzE,IAAM,cAAc,GAAG,kBAAkB,CAAC,CAAC,EAAE,MAAM,CAAC,eAAe,CAAC,CAAA;QACpE,IAAM,cAAc,GAAG,kBAAkB,CAAC,KAAK,EAAE,MAAM,CAAC,eAAe,CAAC,CAAA;QACxE,IAAM,cAAc,GAAG,kBAAkB,CAAC,KAAK,EAAE,MAAM,CAAC,eAAe,CAAC,CAAA;QACxE,IAAM,cAAc,GAAG,kBAAkB,CAAC,KAAK,EAAE,MAAM,CAAC,eAAe,CAAC,CAAA;QACxE,IAAM,cAAc,GAAG,kBAAkB,CAAC,KAAK,EAAE,MAAM,CAAC,eAAe,CAAC,CAAA;QAExE,IAAM,cAAc,GAAG,EAAE,CAAC,MAAM,CAAC;YAC/B,cAAc,CAAC,qBAAqB;YACpC,cAAc,CAAC,qBAAqB;YACpC,cAAc,CAAC,qBAAqB;YACpC,cAAc,CAAC,qBAAqB;YACpC,cAAc,CAAC,qBAAqB;YACpC,cAAc,CAAC,qBAAqB;SACrC,EAAE,CAAC,CAAgB,CAAA;QAEpB,IAAM,gBAAgB,GAAG,EAAE,CAAC,MAAM,CAAC;YACjC,cAAc,CAAC,eAAe;YAC9B,cAAc,CAAC,eAAe;YAC9B,cAAc,CAAC,eAAe;YAC9B,cAAc,CAAC,eAAe;YAC9B,cAAc,CAAC,eAAe;YAC9B,cAAc,CAAC,eAAe;SAC/B,EAAE,CAAC,CAAgB,CAAA;QAEpB,OAAO;YACL,cAAc,gBAAA;YACd,gBAAgB,kBAAA;SACjB,CAAA;IACH,CAAC,CAAC,CAAA;AACJ,CAAC"}
\ No newline at end of file
import * as tf from '@tensorflow/tfjs-core';
import { ConvParams } from 'tfjs-tiny-yolov2';
export declare type PointwiseConvParams = {
filters: tf.Tensor4D;
batch_norm_offset: tf.Tensor1D;
};
export declare namespace MobileNetV1 {
type DepthwiseConvParams = {
filters: tf.Tensor4D;
batch_norm_scale: tf.Tensor1D;
batch_norm_offset: tf.Tensor1D;
batch_norm_mean: tf.Tensor1D;
batch_norm_variance: tf.Tensor1D;
};
type ConvPairParams = {
depthwise_conv: DepthwiseConvParams;
pointwise_conv: PointwiseConvParams;
};
type Params = {
conv_0: PointwiseConvParams;
conv_1: ConvPairParams;
conv_2: ConvPairParams;
conv_3: ConvPairParams;
conv_4: ConvPairParams;
conv_5: ConvPairParams;
conv_6: ConvPairParams;
conv_7: ConvPairParams;
conv_8: ConvPairParams;
conv_9: ConvPairParams;
conv_10: ConvPairParams;
conv_11: ConvPairParams;
conv_12: ConvPairParams;
conv_13: ConvPairParams;
};
}
export declare type BoxPredictionParams = {
box_encoding_predictor: ConvParams;
class_predictor: ConvParams;
};
export declare type PredictionLayerParams = {
conv_0: PointwiseConvParams;
conv_1: PointwiseConvParams;
conv_2: PointwiseConvParams;
conv_3: PointwiseConvParams;
conv_4: PointwiseConvParams;
conv_5: PointwiseConvParams;
conv_6: PointwiseConvParams;
conv_7: PointwiseConvParams;
box_predictor_0: BoxPredictionParams;
box_predictor_1: BoxPredictionParams;
box_predictor_2: BoxPredictionParams;
box_predictor_3: BoxPredictionParams;
box_predictor_4: BoxPredictionParams;
box_predictor_5: BoxPredictionParams;
};
export declare type OutputLayerParams = {
extra_dim: tf.Tensor3D;
};
export declare type NetParams = {
mobilenetv1: MobileNetV1.Params;
prediction_layer: PredictionLayerParams;
output_layer: OutputLayerParams;
};
//# sourceMappingURL=types.js.map
\ No newline at end of file
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/faceDetectionNet/types.ts"],"names":[],"mappings":""}
\ No newline at end of file
import * as tf from '@tensorflow/tfjs-core';
import { NetInput, TNetInput } from 'tfjs-image-recognition-base';
import { TinyYolov2Types } from 'tfjs-tiny-yolov2';
import { FaceDetection } from './classes/FaceDetection';
import { FaceLandmarks68 } from './classes/FaceLandmarks68';
import { FullFaceDescription } from './classes/FullFaceDescription';
import { FaceDetectionNet } from './faceDetectionNet/FaceDetectionNet';
import { FaceLandmark68Net } from './faceLandmarkNet/FaceLandmark68Net';
import { FaceLandmark68TinyNet } from './faceLandmarkNet/FaceLandmark68TinyNet';
import { FaceRecognitionNet } from './faceRecognitionNet/FaceRecognitionNet';
import { Mtcnn } from './mtcnn/Mtcnn';
import { MtcnnForwardParams, MtcnnResult } from './mtcnn/types';
import { TinyYolov2 } from './tinyYolov2/TinyYolov2';
export declare const detectionNet: FaceDetectionNet;
export declare const landmarkNet: FaceLandmark68Net;
export declare const recognitionNet: FaceRecognitionNet;
export declare const nets: {
ssdMobilenetv1: FaceDetectionNet;
faceLandmark68Net: FaceLandmark68Net;
faceLandmark68TinyNet: FaceLandmark68TinyNet;
faceRecognitionNet: FaceRecognitionNet;
mtcnn: Mtcnn;
tinyYolov2: TinyYolov2;
};
export declare function loadSsdMobilenetv1Model(url: string): Promise<void>;
export declare function loadFaceLandmarkModel(url: string): Promise<void>;
export declare function loadFaceLandmarkTinyModel(url: string): Promise<void>;
export declare function loadFaceRecognitionModel(url: string): Promise<void>;
export declare function loadMtcnnModel(url: string): Promise<void>;
export declare function loadTinyYolov2Model(url: string): Promise<void>;
export declare function loadFaceDetectionModel(url: string): Promise<void>;
export declare function loadModels(url: string): Promise<[void, void, void, void, void]>;
export declare function locateFaces(input: TNetInput, minConfidence?: number, maxResults?: number): Promise<FaceDetection[]>;
export declare const ssdMobilenetv1: typeof locateFaces;
export declare function detectLandmarks(input: TNetInput): Promise<FaceLandmarks68 | FaceLandmarks68[]>;
export declare function detectLandmarksTiny(input: TNetInput): Promise<FaceLandmarks68 | FaceLandmarks68[]>;
export declare function computeFaceDescriptor(input: TNetInput): Promise<Float32Array | Float32Array[]>;
export declare function mtcnn(input: TNetInput, forwardParams: MtcnnForwardParams): Promise<MtcnnResult[]>;
export declare function tinyYolov2(input: TNetInput, forwardParams: TinyYolov2Types.TinyYolov2ForwardParams): Promise<FaceDetection[]>;
export declare type allFacesSsdMobilenetv1Function = (input: tf.Tensor | NetInput | TNetInput, minConfidence?: number, useBatchProcessing?: boolean) => Promise<FullFaceDescription[]>;
export declare const allFacesSsdMobilenetv1: allFacesSsdMobilenetv1Function;
export declare type allFacesTinyYolov2Function = (input: tf.Tensor | NetInput | TNetInput, forwardParams?: TinyYolov2Types.TinyYolov2ForwardParams, useBatchProcessing?: boolean) => Promise<FullFaceDescription[]>;
export declare const allFacesTinyYolov2: allFacesTinyYolov2Function;
export declare type allFacesMtcnnFunction = (input: tf.Tensor | NetInput | TNetInput, mtcnnForwardParams?: MtcnnForwardParams, useBatchProcessing?: boolean) => Promise<FullFaceDescription[]>;
export declare const allFacesMtcnn: allFacesMtcnnFunction;
export declare const allFaces: allFacesSsdMobilenetv1Function;
import { allFacesMtcnnFactory, allFacesSsdMobilenetv1Factory, allFacesTinyYolov2Factory } from './allFacesFactory';
import { FaceDetectionNet } from './faceDetectionNet/FaceDetectionNet';
import { FaceLandmark68Net } from './faceLandmarkNet/FaceLandmark68Net';
import { FaceLandmark68TinyNet } from './faceLandmarkNet/FaceLandmark68TinyNet';
import { FaceRecognitionNet } from './faceRecognitionNet/FaceRecognitionNet';
import { Mtcnn } from './mtcnn/Mtcnn';
import { TinyYolov2 } from './tinyYolov2/TinyYolov2';
export var detectionNet = new FaceDetectionNet();
export var landmarkNet = new FaceLandmark68Net();
export var recognitionNet = new FaceRecognitionNet();
// nets need more specific names, to avoid ambiguity in future
// when alternative net implementations are provided
export var nets = {
ssdMobilenetv1: detectionNet,
faceLandmark68Net: landmarkNet,
faceLandmark68TinyNet: new FaceLandmark68TinyNet(),
faceRecognitionNet: recognitionNet,
mtcnn: new Mtcnn(),
tinyYolov2: new TinyYolov2()
};
export function loadSsdMobilenetv1Model(url) {
return nets.ssdMobilenetv1.load(url);
}
export function loadFaceLandmarkModel(url) {
return nets.faceLandmark68Net.load(url);
}
export function loadFaceLandmarkTinyModel(url) {
return nets.faceLandmark68TinyNet.load(url);
}
export function loadFaceRecognitionModel(url) {
return nets.faceRecognitionNet.load(url);
}
export function loadMtcnnModel(url) {
return nets.mtcnn.load(url);
}
export function loadTinyYolov2Model(url) {
return nets.tinyYolov2.load(url);
}
export function loadFaceDetectionModel(url) {
return loadSsdMobilenetv1Model(url);
}
export function loadModels(url) {
console.warn('loadModels will be deprecated in future');
return Promise.all([
loadSsdMobilenetv1Model(url),
loadFaceLandmarkModel(url),
loadFaceRecognitionModel(url),
loadMtcnnModel(url),
loadTinyYolov2Model(url)
]);
}
export function locateFaces(input, minConfidence, maxResults) {
return nets.ssdMobilenetv1.locateFaces(input, minConfidence, maxResults);
}
export var ssdMobilenetv1 = locateFaces;
export function detectLandmarks(input) {
return nets.faceLandmark68Net.detectLandmarks(input);
}
export function detectLandmarksTiny(input) {
return nets.faceLandmark68TinyNet.detectLandmarks(input);
}
export function computeFaceDescriptor(input) {
return nets.faceRecognitionNet.computeFaceDescriptor(input);
}
export function mtcnn(input, forwardParams) {
return nets.mtcnn.forward(input, forwardParams);
}
export function tinyYolov2(input, forwardParams) {
return nets.tinyYolov2.locateFaces(input, forwardParams);
}
export var allFacesSsdMobilenetv1 = allFacesSsdMobilenetv1Factory(nets.ssdMobilenetv1, nets.faceLandmark68Net, nets.faceRecognitionNet);
export var allFacesTinyYolov2 = allFacesTinyYolov2Factory(nets.tinyYolov2, nets.faceLandmark68Net, nets.faceRecognitionNet);
export var allFacesMtcnn = allFacesMtcnnFactory(nets.mtcnn, nets.faceRecognitionNet);
export var allFaces = allFacesSsdMobilenetv1;
//# sourceMappingURL=globalApi.js.map
\ No newline at end of file
{"version":3,"file":"globalApi.js","sourceRoot":"","sources":["../../src/globalApi.ts"],"names":[],"mappings":"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"}
\ No newline at end of file
......@@ -3,8 +3,6 @@ import { FaceDetection } from '../classes/FaceDetection';
import { ComposableTask } from './ComposableTask';
import { DetectAllFaceLandmarksTask, DetectSingleFaceLandmarksTask } from './DetectFaceLandmarksTasks';
import { FaceDetectionOptions } from './types';
export declare function detectSingleFace(input: TNetInput, options?: FaceDetectionOptions): DetectSingleFaceTask;
export declare function detectAllFaces(input: TNetInput, options?: FaceDetectionOptions): DetectAllFacesTask;
export declare class DetectFacesTaskBase<TReturn> extends ComposableTask<TReturn> {
protected input: TNetInput;
protected options: FaceDetectionOptions;
......
......@@ -6,14 +6,6 @@ import { TinyFaceDetectorOptions } from '../tinyFaceDetector/TinyFaceDetectorOpt
import { ComposableTask } from './ComposableTask';
import { DetectAllFaceLandmarksTask, DetectSingleFaceLandmarksTask } from './DetectFaceLandmarksTasks';
import { nets } from './nets';
export function detectSingleFace(input, options) {
if (options === void 0) { options = new SsdMobilenetv1Options(); }
return new DetectSingleFaceTask(input, options);
}
export function detectAllFaces(input, options) {
if (options === void 0) { options = new SsdMobilenetv1Options(); }
return new DetectAllFacesTask(input, options);
}
var DetectFacesTaskBase = /** @class */ (function (_super) {
tslib_1.__extends(DetectFacesTaskBase, _super);
function DetectFacesTaskBase(input, options) {
......
{"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
This source diff could not be displayed because it is too large. You can view the blob instead.
This source diff could not be displayed because it is too large. You can view the blob instead.
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment