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.
83 lines • 6.79 kB
JavaScript
/**
* @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';
export class FaceDetectorService {
/**
* @param {?} modelLoader
* @param {?=} option
*/
constructor(modelLoader, option) {
this.modelLoader = modelLoader;
this.option = option;
}
/**
* @param {?} task
* @return {?}
*/
detect(task) {
if (task.realtime === true) {
return of(task).pipe(switchMap((/**
* @param {?} t
* @return {?}
*/
(t) => tslib_1.__awaiter(this, void 0, void 0, function* () { return yield t.target; }))), switchMap((/**
* @param {?} video
* @return {?}
*/
video => fromEvent(video, 'loadeddata'))), switchMap((/**
* @return {?}
*/
() => this.modelLoader.loadForFeature(task.tokens))), switchMap((/**
* @return {?}
*/
() => interval(300))), switchMap((/**
* @return {?}
*/
() => task.detect(this.option))), shareReplay(1));
}
return of(task).pipe(switchMap((/**
* @param {?} t
* @return {?}
*/
(t) => tslib_1.__awaiter(this, void 0, void 0, function* () { return yield t.target; }))), switchMap((/**
* @param {?} image
* @return {?}
*/
image => fromEvent(image, 'load'))), switchMap((/**
* @return {?}
*/
() => tslib_1.__awaiter(this, void 0, void 0, function* () { return yield this.modelLoader.loadForFeature(task.tokens); }))), switchMap((/**
* @return {?}
*/
() => task.detect(this.option))), shareReplay(1));
}
}
FaceDetectorService.decorators = [
{ type: Injectable }
];
/** @nocollapse */
FaceDetectorService.ctorParameters = () => [
{ type: ModelLoaderService },
{ type: undefined, decorators: [{ type: Optional }, { type: Inject, args: [FaceDetectionOptions,] }] }
];
if (false) {
/**
* @type {?}
* @private
*/
FaceDetectorService.prototype.modelLoader;
/**
* @type {?}
* @private
*/
FaceDetectorService.prototype.option;
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmFjZS1kZXRlY3Rvci5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6Im5nOi8vbmd4LWZhY2UtYXBpLWpzLyIsInNvdXJjZXMiOlsibGliL3NlcnZpY2VzL2ZhY2UtZGV0ZWN0b3Iuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUM3RCxPQUFPLEtBQUssT0FBTyxNQUFNLGFBQWEsQ0FBQztBQUN2QyxPQUFPLEVBQWMsRUFBRSxFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDM0QsT0FBTyxFQUFFLFNBQVMsRUFBRSxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUV4RCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUU1RCxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUd0RSxNQUFNLE9BQU8sbUJBQW1COzs7OztJQUM5QixZQUNVLFdBQStCLEVBRy9CLE1BQXFDO1FBSHJDLGdCQUFXLEdBQVgsV0FBVyxDQUFvQjtRQUcvQixXQUFNLEdBQU4sTUFBTSxDQUErQjtJQUM1QyxDQUFDOzs7OztJQUVHLE1BQU0sQ0FBQyxJQUFnQjtRQUM1QixJQUFJLElBQUksQ0FBQyxRQUFRLEtBQUssSUFBSSxFQUFFO1lBQzFCLE9BQU8sRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FDbEIsU0FBUzs7OztZQUFDLENBQU0sQ0FBQyxFQUFDLEVBQUUsd0RBQUMsT0FBQSxNQUFNLENBQUMsQ0FBQyxNQUFNLENBQUEsR0FBQSxFQUFDLEVBQ3BDLFNBQVM7Ozs7WUFBQyxLQUFLLENBQUMsRUFBRSxDQUFDLFNBQVMsQ0FBQyxLQUFLLEVBQUUsWUFBWSxDQUFDLEVBQUMsRUFDbEQsU0FBUzs7O1lBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxFQUFDLEVBQzdELFNBQVM7OztZQUFDLEdBQUcsRUFBRSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsRUFBQyxFQUM5QixTQUFTOzs7WUFBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsRUFBQyxFQUN6QyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQ2YsQ0FBQztTQUNIO1FBQ0QsT0FBTyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUNsQixTQUFTOzs7O1FBQUMsQ0FBTSxDQUFDLEVBQUMsRUFBRSx3REFBQyxPQUFBLE1BQU0sQ0FBQyxDQUFDLE1BQU0sQ0FBQSxHQUFBLEVBQUMsRUFDcEMsU0FBUzs7OztRQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsU0FBUyxDQUFDLEtBQUssRUFBRSxNQUFNLENBQUMsRUFBQyxFQUM1QyxTQUFTOzs7UUFBQyxHQUFTLEVBQUUsd0RBQUMsT0FBQSxNQUFNLElBQUksQ0FBQyxXQUFXLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQSxHQUFBLEVBQUMsRUFDekUsU0FBUzs7O1FBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEVBQUMsRUFDekMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUNmLENBQUM7SUFDSixDQUFDOzs7WUEzQkYsVUFBVTs7OztZQUpGLGtCQUFrQjs0Q0FRdEIsUUFBUSxZQUNSLE1BQU0sU0FBQyxvQkFBb0I7Ozs7Ozs7SUFGNUIsMENBQXVDOzs7OztJQUN2QyxxQ0FFNkMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlLCBPcHRpb25hbCwgSW5qZWN0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgKiBhcyBmYWNlYXBpIGZyb20gJ2ZhY2UtYXBpLmpzJztcbmltcG9ydCB7IE9ic2VydmFibGUsIG9mLCBmcm9tRXZlbnQsIGludGVydmFsIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBzd2l0Y2hNYXAsIHNoYXJlUmVwbGF5IH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG5pbXBvcnQgeyBNb2RlbExvYWRlclNlcnZpY2UgfSBmcm9tICcuL21vZGVsLWxvYWRlci5zZXJ2aWNlJztcbmltcG9ydCB7IERldGVjdFRhc2sgfSBmcm9tICcuLi9jbGFzc2VzL0RldGVjdFRhc2snO1xuaW1wb3J0IHsgRmFjZURldGVjdGlvbk9wdGlvbnMgfSBmcm9tICcuLi90b2tlbnMvRmFjZURldGVjdGlvbk9wdGlvbnMnO1xuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgRmFjZURldGVjdG9yU2VydmljZSB7XG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgbW9kZWxMb2FkZXI6IE1vZGVsTG9hZGVyU2VydmljZSxcbiAgICBAT3B0aW9uYWwoKVxuICAgIEBJbmplY3QoRmFjZURldGVjdGlvbk9wdGlvbnMpXG4gICAgcHJpdmF0ZSBvcHRpb24/OiBmYWNlYXBpLkZhY2VEZXRlY3Rpb25PcHRpb25zLFxuICApIHt9XG5cbiAgcHVibGljIGRldGVjdCh0YXNrOiBEZXRlY3RUYXNrKTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICBpZiAodGFzay5yZWFsdGltZSA9PT0gdHJ1ZSkge1xuICAgICAgcmV0dXJuIG9mKHRhc2spLnBpcGUoXG4gICAgICAgIHN3aXRjaE1hcChhc3luYyB0ID0+IGF3YWl0IHQudGFyZ2V0KSxcbiAgICAgICAgc3dpdGNoTWFwKHZpZGVvID0+IGZyb21FdmVudCh2aWRlbywgJ2xvYWRlZGRhdGEnKSksXG4gICAgICAgIHN3aXRjaE1hcCgoKSA9PiB0aGlzLm1vZGVsTG9hZGVyLmxvYWRGb3JGZWF0dXJlKHRhc2sudG9rZW5zKSksXG4gICAgICAgIHN3aXRjaE1hcCgoKSA9PiBpbnRlcnZhbCgzMDApKSxcbiAgICAgICAgc3dpdGNoTWFwKCgpID0+IHRhc2suZGV0ZWN0KHRoaXMub3B0aW9uKSksXG4gICAgICAgIHNoYXJlUmVwbGF5KDEpLFxuICAgICAgKTtcbiAgICB9XG4gICAgcmV0dXJuIG9mKHRhc2spLnBpcGUoXG4gICAgICBzd2l0Y2hNYXAoYXN5bmMgdCA9PiBhd2FpdCB0LnRhcmdldCksXG4gICAgICBzd2l0Y2hNYXAoaW1hZ2UgPT4gZnJvbUV2ZW50KGltYWdlLCAnbG9hZCcpKSxcbiAgICAgIHN3aXRjaE1hcChhc3luYyAoKSA9PiBhd2FpdCB0aGlzLm1vZGVsTG9hZGVyLmxvYWRGb3JGZWF0dXJlKHRhc2sudG9rZW5zKSksXG4gICAgICBzd2l0Y2hNYXAoKCkgPT4gdGFzay5kZXRlY3QodGhpcy5vcHRpb24pKSxcbiAgICAgIHNoYXJlUmVwbGF5KDEpLFxuICAgICk7XG4gIH1cbn1cbiJdfQ==