DetectFaceLandmarksTasks.js 6.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131
  1. "use strict";
  2. Object.defineProperty(exports, "__esModule", { value: true });
  3. var tslib_1 = require("tslib");
  4. var tf = require("@tensorflow/tfjs-core");
  5. var dom_1 = require("../dom");
  6. var WithFaceLandmarks_1 = require("../factories/WithFaceLandmarks");
  7. var ComposableTask_1 = require("./ComposableTask");
  8. var ComputeFaceDescriptorsTasks_1 = require("./ComputeFaceDescriptorsTasks");
  9. var nets_1 = require("./nets");
  10. var PredictAgeAndGenderTask_1 = require("./PredictAgeAndGenderTask");
  11. var PredictFaceExpressionsTask_1 = require("./PredictFaceExpressionsTask");
  12. var DetectFaceLandmarksTaskBase = /** @class */ (function (_super) {
  13. tslib_1.__extends(DetectFaceLandmarksTaskBase, _super);
  14. function DetectFaceLandmarksTaskBase(parentTask, input, useTinyLandmarkNet) {
  15. var _this = _super.call(this) || this;
  16. _this.parentTask = parentTask;
  17. _this.input = input;
  18. _this.useTinyLandmarkNet = useTinyLandmarkNet;
  19. return _this;
  20. }
  21. Object.defineProperty(DetectFaceLandmarksTaskBase.prototype, "landmarkNet", {
  22. get: function () {
  23. return this.useTinyLandmarkNet
  24. ? nets_1.nets.faceLandmark68TinyNet
  25. : nets_1.nets.faceLandmark68Net;
  26. },
  27. enumerable: true,
  28. configurable: true
  29. });
  30. return DetectFaceLandmarksTaskBase;
  31. }(ComposableTask_1.ComposableTask));
  32. exports.DetectFaceLandmarksTaskBase = DetectFaceLandmarksTaskBase;
  33. var DetectAllFaceLandmarksTask = /** @class */ (function (_super) {
  34. tslib_1.__extends(DetectAllFaceLandmarksTask, _super);
  35. function DetectAllFaceLandmarksTask() {
  36. return _super !== null && _super.apply(this, arguments) || this;
  37. }
  38. DetectAllFaceLandmarksTask.prototype.run = function () {
  39. return tslib_1.__awaiter(this, void 0, void 0, function () {
  40. var parentResults, detections, faces, _a, faceLandmarksByFace;
  41. var _this = this;
  42. return tslib_1.__generator(this, function (_b) {
  43. switch (_b.label) {
  44. case 0: return [4 /*yield*/, this.parentTask];
  45. case 1:
  46. parentResults = _b.sent();
  47. detections = parentResults.map(function (res) { return res.detection; });
  48. if (!(this.input instanceof tf.Tensor)) return [3 /*break*/, 3];
  49. return [4 /*yield*/, dom_1.extractFaceTensors(this.input, detections)];
  50. case 2:
  51. _a = _b.sent();
  52. return [3 /*break*/, 5];
  53. case 3: return [4 /*yield*/, dom_1.extractFaces(this.input, detections)];
  54. case 4:
  55. _a = _b.sent();
  56. _b.label = 5;
  57. case 5:
  58. faces = _a;
  59. return [4 /*yield*/, Promise.all(faces.map(function (face) { return _this.landmarkNet.detectLandmarks(face); }))];
  60. case 6:
  61. faceLandmarksByFace = _b.sent();
  62. faces.forEach(function (f) { return f instanceof tf.Tensor && f.dispose(); });
  63. return [2 /*return*/, parentResults.map(function (parentResult, i) {
  64. return WithFaceLandmarks_1.extendWithFaceLandmarks(parentResult, faceLandmarksByFace[i]);
  65. })];
  66. }
  67. });
  68. });
  69. };
  70. DetectAllFaceLandmarksTask.prototype.withFaceExpressions = function () {
  71. return new PredictFaceExpressionsTask_1.PredictAllFaceExpressionsWithFaceAlignmentTask(this, this.input);
  72. };
  73. DetectAllFaceLandmarksTask.prototype.withAgeAndGender = function () {
  74. return new PredictAgeAndGenderTask_1.PredictAllAgeAndGenderWithFaceAlignmentTask(this, this.input);
  75. };
  76. DetectAllFaceLandmarksTask.prototype.withFaceDescriptors = function () {
  77. return new ComputeFaceDescriptorsTasks_1.ComputeAllFaceDescriptorsTask(this, this.input);
  78. };
  79. return DetectAllFaceLandmarksTask;
  80. }(DetectFaceLandmarksTaskBase));
  81. exports.DetectAllFaceLandmarksTask = DetectAllFaceLandmarksTask;
  82. var DetectSingleFaceLandmarksTask = /** @class */ (function (_super) {
  83. tslib_1.__extends(DetectSingleFaceLandmarksTask, _super);
  84. function DetectSingleFaceLandmarksTask() {
  85. return _super !== null && _super.apply(this, arguments) || this;
  86. }
  87. DetectSingleFaceLandmarksTask.prototype.run = function () {
  88. return tslib_1.__awaiter(this, void 0, void 0, function () {
  89. var parentResult, detection, faces, _a, landmarks;
  90. return tslib_1.__generator(this, function (_b) {
  91. switch (_b.label) {
  92. case 0: return [4 /*yield*/, this.parentTask];
  93. case 1:
  94. parentResult = _b.sent();
  95. if (!parentResult) {
  96. return [2 /*return*/];
  97. }
  98. detection = parentResult.detection;
  99. if (!(this.input instanceof tf.Tensor)) return [3 /*break*/, 3];
  100. return [4 /*yield*/, dom_1.extractFaceTensors(this.input, [detection])];
  101. case 2:
  102. _a = _b.sent();
  103. return [3 /*break*/, 5];
  104. case 3: return [4 /*yield*/, dom_1.extractFaces(this.input, [detection])];
  105. case 4:
  106. _a = _b.sent();
  107. _b.label = 5;
  108. case 5:
  109. faces = _a;
  110. return [4 /*yield*/, this.landmarkNet.detectLandmarks(faces[0])];
  111. case 6:
  112. landmarks = _b.sent();
  113. faces.forEach(function (f) { return f instanceof tf.Tensor && f.dispose(); });
  114. return [2 /*return*/, WithFaceLandmarks_1.extendWithFaceLandmarks(parentResult, landmarks)];
  115. }
  116. });
  117. });
  118. };
  119. DetectSingleFaceLandmarksTask.prototype.withFaceExpressions = function () {
  120. return new PredictFaceExpressionsTask_1.PredictSingleFaceExpressionsWithFaceAlignmentTask(this, this.input);
  121. };
  122. DetectSingleFaceLandmarksTask.prototype.withAgeAndGender = function () {
  123. return new PredictAgeAndGenderTask_1.PredictSingleAgeAndGenderWithFaceAlignmentTask(this, this.input);
  124. };
  125. DetectSingleFaceLandmarksTask.prototype.withFaceDescriptor = function () {
  126. return new ComputeFaceDescriptorsTasks_1.ComputeSingleFaceDescriptorTask(this, this.input);
  127. };
  128. return DetectSingleFaceLandmarksTask;
  129. }(DetectFaceLandmarksTaskBase));
  130. exports.DetectSingleFaceLandmarksTask = DetectSingleFaceLandmarksTask;
  131. //# sourceMappingURL=DetectFaceLandmarksTasks.js.map