12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758 |
- import { __awaiter, __generator } from "tslib";
- import { FaceDetection } from '../classes/FaceDetection';
- import { env } from '../env';
- import { createCanvas } from './createCanvas';
- import { getContext2dOrThrow } from './getContext2dOrThrow';
- import { imageTensorToCanvas } from './imageTensorToCanvas';
- import { toNetInput } from './toNetInput';
- /**
- * Extracts the image regions containing the detected faces.
- *
- * @param input The image that face detection has been performed on.
- * @param detections The face detection results or face bounding boxes for that image.
- * @returns The Canvases of the corresponding image region for each detected face.
- */
- export function extractFaces(input, detections) {
- return __awaiter(this, void 0, void 0, function () {
- var Canvas, canvas, netInput, tensorOrCanvas, _a, ctx, boxes;
- return __generator(this, function (_b) {
- switch (_b.label) {
- case 0:
- Canvas = env.getEnv().Canvas;
- canvas = input;
- if (!!(input instanceof Canvas)) return [3 /*break*/, 5];
- return [4 /*yield*/, toNetInput(input)];
- case 1:
- netInput = _b.sent();
- if (netInput.batchSize > 1) {
- throw new Error('extractFaces - batchSize > 1 not supported');
- }
- tensorOrCanvas = netInput.getInput(0);
- if (!(tensorOrCanvas instanceof Canvas)) return [3 /*break*/, 2];
- _a = tensorOrCanvas;
- return [3 /*break*/, 4];
- case 2: return [4 /*yield*/, imageTensorToCanvas(tensorOrCanvas)];
- case 3:
- _a = _b.sent();
- _b.label = 4;
- case 4:
- canvas = _a;
- _b.label = 5;
- case 5:
- ctx = getContext2dOrThrow(canvas);
- boxes = detections.map(function (det) { return det instanceof FaceDetection
- ? det.forSize(canvas.width, canvas.height).box.floor()
- : det; })
- .map(function (box) { return box.clipAtImageBorders(canvas.width, canvas.height); });
- return [2 /*return*/, boxes.map(function (_a) {
- var x = _a.x, y = _a.y, width = _a.width, height = _a.height;
- var faceImg = createCanvas({ width: width, height: height });
- getContext2dOrThrow(faceImg)
- .putImageData(ctx.getImageData(x, y, width, height), 0, 0);
- return faceImg;
- })];
- }
- });
- });
- }
- //# sourceMappingURL=extractFaces.js.map
|