FaceRecognitionNet.js 4.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091
  1. import { __awaiter, __extends, __generator } from "tslib";
  2. import * as tf from '@tensorflow/tfjs-core';
  3. import { toNetInput } from '../dom';
  4. import { NeuralNetwork } from '../NeuralNetwork';
  5. import { normalize } from '../ops';
  6. import { convDown } from './convLayer';
  7. import { extractParams } from './extractParams';
  8. import { extractParamsFromWeigthMap } from './extractParamsFromWeigthMap';
  9. import { residual, residualDown } from './residualLayer';
  10. var FaceRecognitionNet = /** @class */ (function (_super) {
  11. __extends(FaceRecognitionNet, _super);
  12. function FaceRecognitionNet() {
  13. return _super.call(this, 'FaceRecognitionNet') || this;
  14. }
  15. FaceRecognitionNet.prototype.forwardInput = function (input) {
  16. var params = this.params;
  17. if (!params) {
  18. throw new Error('FaceRecognitionNet - load model before inference');
  19. }
  20. return tf.tidy(function () {
  21. var batchTensor = input.toBatchTensor(150, true).toFloat();
  22. var meanRgb = [122.782, 117.001, 104.298];
  23. var normalized = normalize(batchTensor, meanRgb).div(tf.scalar(256));
  24. var out = convDown(normalized, params.conv32_down);
  25. out = tf.maxPool(out, 3, 2, 'valid');
  26. out = residual(out, params.conv32_1);
  27. out = residual(out, params.conv32_2);
  28. out = residual(out, params.conv32_3);
  29. out = residualDown(out, params.conv64_down);
  30. out = residual(out, params.conv64_1);
  31. out = residual(out, params.conv64_2);
  32. out = residual(out, params.conv64_3);
  33. out = residualDown(out, params.conv128_down);
  34. out = residual(out, params.conv128_1);
  35. out = residual(out, params.conv128_2);
  36. out = residualDown(out, params.conv256_down);
  37. out = residual(out, params.conv256_1);
  38. out = residual(out, params.conv256_2);
  39. out = residualDown(out, params.conv256_down_out);
  40. var globalAvg = out.mean([1, 2]);
  41. var fullyConnected = tf.matMul(globalAvg, params.fc);
  42. return fullyConnected;
  43. });
  44. };
  45. FaceRecognitionNet.prototype.forward = function (input) {
  46. return __awaiter(this, void 0, void 0, function () {
  47. var _a;
  48. return __generator(this, function (_b) {
  49. switch (_b.label) {
  50. case 0:
  51. _a = this.forwardInput;
  52. return [4 /*yield*/, toNetInput(input)];
  53. case 1: return [2 /*return*/, _a.apply(this, [_b.sent()])];
  54. }
  55. });
  56. });
  57. };
  58. FaceRecognitionNet.prototype.computeFaceDescriptor = function (input) {
  59. return __awaiter(this, void 0, void 0, function () {
  60. var netInput, faceDescriptorTensors, faceDescriptorsForBatch;
  61. var _this = this;
  62. return __generator(this, function (_a) {
  63. switch (_a.label) {
  64. case 0: return [4 /*yield*/, toNetInput(input)];
  65. case 1:
  66. netInput = _a.sent();
  67. faceDescriptorTensors = tf.tidy(function () { return tf.unstack(_this.forwardInput(netInput)); });
  68. return [4 /*yield*/, Promise.all(faceDescriptorTensors.map(function (t) { return t.data(); }))];
  69. case 2:
  70. faceDescriptorsForBatch = _a.sent();
  71. faceDescriptorTensors.forEach(function (t) { return t.dispose(); });
  72. return [2 /*return*/, netInput.isBatchInput
  73. ? faceDescriptorsForBatch
  74. : faceDescriptorsForBatch[0]];
  75. }
  76. });
  77. });
  78. };
  79. FaceRecognitionNet.prototype.getDefaultModelName = function () {
  80. return 'face_recognition_model';
  81. };
  82. FaceRecognitionNet.prototype.extractParamsFromWeigthMap = function (weightMap) {
  83. return extractParamsFromWeigthMap(weightMap);
  84. };
  85. FaceRecognitionNet.prototype.extractParams = function (weights) {
  86. return extractParams(weights);
  87. };
  88. return FaceRecognitionNet;
  89. }(NeuralNetwork));
  90. export { FaceRecognitionNet };
  91. //# sourceMappingURL=FaceRecognitionNet.js.map