UNPKG

ngx-face-api-js

Version:

Angular directives for face detection and face recognition in the browser. It is a wrapper for face-api.js, so it is not dependent on the browser implementation.

101 lines 7.95 kB
/** * @fileoverview added by tsickle * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc */ import * as tslib_1 from "tslib"; import { Injectable, Optional, Inject } from '@angular/core'; import * as faceapi from 'face-api.js'; import { of, fromEvent, interval } from 'rxjs'; import { switchMap, shareReplay } from 'rxjs/operators'; import { ModelLoaderService } from './model-loader.service'; import { FaceDetectionOptions } from '../tokens/FaceDetectionOptions'; var FaceDetectorService = /** @class */ (function () { function FaceDetectorService(modelLoader, option) { this.modelLoader = modelLoader; this.option = option; } /** * @param {?} task * @return {?} */ FaceDetectorService.prototype.detect = /** * @param {?} task * @return {?} */ function (task) { var _this = this; if (task.realtime === true) { return of(task).pipe(switchMap((/** * @param {?} t * @return {?} */ function (t) { 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*/, t.target]; case 1: return [2 /*return*/, _a.sent()]; } }); }); })), switchMap((/** * @param {?} video * @return {?} */ function (video) { return fromEvent(video, 'loadeddata'); })), switchMap((/** * @return {?} */ function () { return _this.modelLoader.loadForFeature(task.tokens); })), switchMap((/** * @return {?} */ function () { return interval(300); })), switchMap((/** * @return {?} */ function () { return task.detect(_this.option); })), shareReplay(1)); } return of(task).pipe(switchMap((/** * @param {?} t * @return {?} */ function (t) { 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*/, t.target]; case 1: return [2 /*return*/, _a.sent()]; } }); }); })), switchMap((/** * @param {?} image * @return {?} */ function (image) { return fromEvent(image, 'load'); })), switchMap((/** * @return {?} */ function () { 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*/, this.modelLoader.loadForFeature(task.tokens)]; case 1: return [2 /*return*/, _a.sent()]; } }); }); })), switchMap((/** * @return {?} */ function () { return task.detect(_this.option); })), shareReplay(1)); }; FaceDetectorService.decorators = [ { type: Injectable } ]; /** @nocollapse */ FaceDetectorService.ctorParameters = function () { return [ { type: ModelLoaderService }, { type: undefined, decorators: [{ type: Optional }, { type: Inject, args: [FaceDetectionOptions,] }] } ]; }; return FaceDetectorService; }()); export { FaceDetectorService }; if (false) { /** * @type {?} * @private */ FaceDetectorService.prototype.modelLoader; /** * @type {?} * @private */ FaceDetectorService.prototype.option; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmFjZS1kZXRlY3Rvci5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6Im5nOi8vbmd4LWZhY2UtYXBpLWpzLyIsInNvdXJjZXMiOlsibGliL3NlcnZpY2VzL2ZhY2UtZGV0ZWN0b3Iuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUM3RCxPQUFPLEtBQUssT0FBTyxNQUFNLGFBQWEsQ0FBQztBQUN2QyxPQUFPLEVBQWMsRUFBRSxFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDM0QsT0FBTyxFQUFFLFNBQVMsRUFBRSxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUV4RCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUU1RCxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUV0RTtJQUVFLDZCQUNVLFdBQStCLEVBRy9CLE1BQXFDO1FBSHJDLGdCQUFXLEdBQVgsV0FBVyxDQUFvQjtRQUcvQixXQUFNLEdBQU4sTUFBTSxDQUErQjtJQUM1QyxDQUFDOzs7OztJQUVHLG9DQUFNOzs7O0lBQWIsVUFBYyxJQUFnQjtRQUE5QixpQkFrQkM7UUFqQkMsSUFBSSxJQUFJLENBQUMsUUFBUSxLQUFLLElBQUksRUFBRTtZQUMxQixPQUFPLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQ2xCLFNBQVM7Ozs7WUFBQyxVQUFNLENBQUM7OzRCQUFJLHFCQUFNLENBQUMsQ0FBQyxNQUFNLEVBQUE7NEJBQWQsc0JBQUEsU0FBYyxFQUFBOztxQkFBQSxFQUFDLEVBQ3BDLFNBQVM7Ozs7WUFBQyxVQUFBLEtBQUssSUFBSSxPQUFBLFNBQVMsQ0FBQyxLQUFLLEVBQUUsWUFBWSxDQUFDLEVBQTlCLENBQThCLEVBQUMsRUFDbEQsU0FBUzs7O1lBQUMsY0FBTSxPQUFBLEtBQUksQ0FBQyxXQUFXLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsRUFBNUMsQ0FBNEMsRUFBQyxFQUM3RCxTQUFTOzs7WUFBQyxjQUFNLE9BQUEsUUFBUSxDQUFDLEdBQUcsQ0FBQyxFQUFiLENBQWEsRUFBQyxFQUM5QixTQUFTOzs7WUFBQyxjQUFNLE9BQUEsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFJLENBQUMsTUFBTSxDQUFDLEVBQXhCLENBQXdCLEVBQUMsRUFDekMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUNmLENBQUM7U0FDSDtRQUNELE9BQU8sRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FDbEIsU0FBUzs7OztRQUFDLFVBQU0sQ0FBQzs7d0JBQUkscUJBQU0sQ0FBQyxDQUFDLE1BQU0sRUFBQTt3QkFBZCxzQkFBQSxTQUFjLEVBQUE7O2lCQUFBLEVBQUMsRUFDcEMsU0FBUzs7OztRQUFDLFVBQUEsS0FBSyxJQUFJLE9BQUEsU0FBUyxDQUFDLEtBQUssRUFBRSxNQUFNLENBQUMsRUFBeEIsQ0FBd0IsRUFBQyxFQUM1QyxTQUFTOzs7UUFBQzs7d0JBQVkscUJBQU0sSUFBSSxDQUFDLFdBQVcsQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxFQUFBO3dCQUFsRCxzQkFBQSxTQUFrRCxFQUFBOztpQkFBQSxFQUFDLEVBQ3pFLFNBQVM7OztRQUFDLGNBQU0sT0FBQSxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUksQ0FBQyxNQUFNLENBQUMsRUFBeEIsQ0FBd0IsRUFBQyxFQUN6QyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQ2YsQ0FBQztJQUNKLENBQUM7O2dCQTNCRixVQUFVOzs7O2dCQUpGLGtCQUFrQjtnREFRdEIsUUFBUSxZQUNSLE1BQU0sU0FBQyxvQkFBb0I7O0lBdUJoQywwQkFBQztDQUFBLEFBNUJELElBNEJDO1NBM0JZLG1CQUFtQjs7Ozs7O0lBRTVCLDBDQUF1Qzs7Ozs7SUFDdkMscUNBRTZDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSwgT3B0aW9uYWwsIEluamVjdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0ICogYXMgZmFjZWFwaSBmcm9tICdmYWNlLWFwaS5qcyc7XG5pbXBvcnQgeyBPYnNlcnZhYmxlLCBvZiwgZnJvbUV2ZW50LCBpbnRlcnZhbCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgc3dpdGNoTWFwLCBzaGFyZVJlcGxheSB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcblxuaW1wb3J0IHsgTW9kZWxMb2FkZXJTZXJ2aWNlIH0gZnJvbSAnLi9tb2RlbC1sb2FkZXIuc2VydmljZSc7XG5pbXBvcnQgeyBEZXRlY3RUYXNrIH0gZnJvbSAnLi4vY2xhc3Nlcy9EZXRlY3RUYXNrJztcbmltcG9ydCB7IEZhY2VEZXRlY3Rpb25PcHRpb25zIH0gZnJvbSAnLi4vdG9rZW5zL0ZhY2VEZXRlY3Rpb25PcHRpb25zJztcblxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIEZhY2VEZXRlY3RvclNlcnZpY2Uge1xuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIG1vZGVsTG9hZGVyOiBNb2RlbExvYWRlclNlcnZpY2UsXG4gICAgQE9wdGlvbmFsKClcbiAgICBASW5qZWN0KEZhY2VEZXRlY3Rpb25PcHRpb25zKVxuICAgIHByaXZhdGUgb3B0aW9uPzogZmFjZWFwaS5GYWNlRGV0ZWN0aW9uT3B0aW9ucyxcbiAgKSB7fVxuXG4gIHB1YmxpYyBkZXRlY3QodGFzazogRGV0ZWN0VGFzayk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgaWYgKHRhc2sucmVhbHRpbWUgPT09IHRydWUpIHtcbiAgICAgIHJldHVybiBvZih0YXNrKS5waXBlKFxuICAgICAgICBzd2l0Y2hNYXAoYXN5bmMgdCA9PiBhd2FpdCB0LnRhcmdldCksXG4gICAgICAgIHN3aXRjaE1hcCh2aWRlbyA9PiBmcm9tRXZlbnQodmlkZW8sICdsb2FkZWRkYXRhJykpLFxuICAgICAgICBzd2l0Y2hNYXAoKCkgPT4gdGhpcy5tb2RlbExvYWRlci5sb2FkRm9yRmVhdHVyZSh0YXNrLnRva2VucykpLFxuICAgICAgICBzd2l0Y2hNYXAoKCkgPT4gaW50ZXJ2YWwoMzAwKSksXG4gICAgICAgIHN3aXRjaE1hcCgoKSA9PiB0YXNrLmRldGVjdCh0aGlzLm9wdGlvbikpLFxuICAgICAgICBzaGFyZVJlcGxheSgxKSxcbiAgICAgICk7XG4gICAgfVxuICAgIHJldHVybiBvZih0YXNrKS5waXBlKFxuICAgICAgc3dpdGNoTWFwKGFzeW5jIHQgPT4gYXdhaXQgdC50YXJnZXQpLFxuICAgICAgc3dpdGNoTWFwKGltYWdlID0+IGZyb21FdmVudChpbWFnZSwgJ2xvYWQnKSksXG4gICAgICBzd2l0Y2hNYXAoYXN5bmMgKCkgPT4gYXdhaXQgdGhpcy5tb2RlbExvYWRlci5sb2FkRm9yRmVhdHVyZSh0YXNrLnRva2VucykpLFxuICAgICAgc3dpdGNoTWFwKCgpID0+IHRhc2suZGV0ZWN0KHRoaXMub3B0aW9uKSksXG4gICAgICBzaGFyZVJlcGxheSgxKSxcbiAgICApO1xuICB9XG59XG4iXX0=