extractFaces.js 3.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  1. "use strict";
  2. Object.defineProperty(exports, "__esModule", { value: true });
  3. var tslib_1 = require("tslib");
  4. var FaceDetection_1 = require("../classes/FaceDetection");
  5. var env_1 = require("../env");
  6. var createCanvas_1 = require("./createCanvas");
  7. var getContext2dOrThrow_1 = require("./getContext2dOrThrow");
  8. var imageTensorToCanvas_1 = require("./imageTensorToCanvas");
  9. var toNetInput_1 = require("./toNetInput");
  10. /**
  11. * Extracts the image regions containing the detected faces.
  12. *
  13. * @param input The image that face detection has been performed on.
  14. * @param detections The face detection results or face bounding boxes for that image.
  15. * @returns The Canvases of the corresponding image region for each detected face.
  16. */
  17. function extractFaces(input, detections) {
  18. return tslib_1.__awaiter(this, void 0, void 0, function () {
  19. var Canvas, canvas, netInput, tensorOrCanvas, _a, ctx, boxes;
  20. return tslib_1.__generator(this, function (_b) {
  21. switch (_b.label) {
  22. case 0:
  23. Canvas = env_1.env.getEnv().Canvas;
  24. canvas = input;
  25. if (!!(input instanceof Canvas)) return [3 /*break*/, 5];
  26. return [4 /*yield*/, toNetInput_1.toNetInput(input)];
  27. case 1:
  28. netInput = _b.sent();
  29. if (netInput.batchSize > 1) {
  30. throw new Error('extractFaces - batchSize > 1 not supported');
  31. }
  32. tensorOrCanvas = netInput.getInput(0);
  33. if (!(tensorOrCanvas instanceof Canvas)) return [3 /*break*/, 2];
  34. _a = tensorOrCanvas;
  35. return [3 /*break*/, 4];
  36. case 2: return [4 /*yield*/, imageTensorToCanvas_1.imageTensorToCanvas(tensorOrCanvas)];
  37. case 3:
  38. _a = _b.sent();
  39. _b.label = 4;
  40. case 4:
  41. canvas = _a;
  42. _b.label = 5;
  43. case 5:
  44. ctx = getContext2dOrThrow_1.getContext2dOrThrow(canvas);
  45. boxes = detections.map(function (det) { return det instanceof FaceDetection_1.FaceDetection
  46. ? det.forSize(canvas.width, canvas.height).box.floor()
  47. : det; })
  48. .map(function (box) { return box.clipAtImageBorders(canvas.width, canvas.height); });
  49. return [2 /*return*/, boxes.map(function (_a) {
  50. var x = _a.x, y = _a.y, width = _a.width, height = _a.height;
  51. var faceImg = createCanvas_1.createCanvas({ width: width, height: height });
  52. getContext2dOrThrow_1.getContext2dOrThrow(faceImg)
  53. .putImageData(ctx.getImageData(x, y, width, height), 0, 0);
  54. return faceImg;
  55. })];
  56. }
  57. });
  58. });
  59. }
  60. exports.extractFaces = extractFaces;
  61. //# sourceMappingURL=extractFaces.js.map