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.

148 lines 14 kB
/** * @fileoverview added by tsickle * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc */ import * as tslib_1 from "tslib"; import * as faceapi from 'face-api.js'; export class DetectTask { /** * @return {?} */ get resolveTarget() { return this.targetResolver; } /** * @param {?} option */ constructor(option) { this.type = option.type; this.tokens = option.tokens; this.realtime = option.realtime || false; this.target = new Promise((/** * @param {?} resolver * @return {?} */ resolver => (this.targetResolver = resolver))); } /** * @private * @param {?} patten * @param {?} target * @return {?} */ isMatchPattern(patten, target) { return patten.every((/** * @param {?} item * @return {?} */ item => target.includes(item))); } /** * @template THIS * @this {THIS} * @param {...?} tokens * @return {THIS} */ with(...tokens) { (/** @type {?} */ (this)).tokens.push(...tokens); return (/** @type {?} */ (this)); } /** * @param {?=} option * @return {?} */ detect(option) { return tslib_1.__awaiter(this, void 0, void 0, function* () { /** @type {?} */ let t; if (this.type === 'all') { t = faceapi.detectAllFaces(yield this.target, option || undefined); } else { t = faceapi.detectSingleFace(yield this.target, option || undefined); } if (this.isMatchPattern(['expressions', 'landmarks', 'ageAndGender', 'descriptors'], this.tokens)) { if (t instanceof faceapi.DetectSingleFaceTask) { return t .withFaceLandmarks() .withFaceExpressions() .withAgeAndGender() .withFaceDescriptor() .run(); } else if (t instanceof faceapi.DetectAllFacesTask) { return t .withFaceLandmarks() .withFaceExpressions() .withAgeAndGender() .withFaceDescriptors() .run(); } } else if (this.isMatchPattern(['expressions', 'landmarks', 'descriptors'], this.tokens)) { if (t instanceof faceapi.DetectSingleFaceTask) { return t .withFaceLandmarks() .withFaceExpressions() .withFaceDescriptor() .run(); } else if (t instanceof faceapi.DetectAllFacesTask) { return t .withFaceLandmarks() .withFaceExpressions() .withFaceDescriptors() .run(); } } else if (this.isMatchPattern(['expressions', 'landmarks', 'ageAndGender'], this.tokens)) { return t .withFaceLandmarks() .withFaceExpressions() .withAgeAndGender() .run(); } else if (this.isMatchPattern(['expressions', 'landmarks'], this.tokens)) { return t .withFaceLandmarks() .withFaceExpressions() .run(); } else if (this.isMatchPattern(['expressions', 'ageAndGender'], this.tokens)) { return t .withFaceExpressions() .withAgeAndGender() .run(); } else if (this.isMatchPattern(['expressions'], this.tokens)) { return t.withFaceExpressions().run(); } else if (this.isMatchPattern(['landmarks', 'ageAndGender'], this.tokens)) { return t .withFaceLandmarks() .withAgeAndGender() .run(); } else if (this.isMatchPattern(['landmarks'], this.tokens)) { return t.withFaceLandmarks().run(); } return t.run(); }); } } if (false) { /** @type {?} */ DetectTask.prototype.type; /** @type {?} */ DetectTask.prototype.tokens; /** @type {?} */ DetectTask.prototype.realtime; /** @type {?} */ DetectTask.prototype.target; /** * @type {?} * @private */ DetectTask.prototype.targetResolver; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRGV0ZWN0VGFzay5qcyIsInNvdXJjZVJvb3QiOiJuZzovL25neC1mYWNlLWFwaS1qcy8iLCJzb3VyY2VzIjpbImxpYi9jbGFzc2VzL0RldGVjdFRhc2sudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSxPQUFPLEtBQUssT0FBTyxNQUFNLGFBQWEsQ0FBQztBQUl2QyxNQUFNLE9BQU8sVUFBVTs7OztJQUNyQixJQUFXLGFBQWE7UUFHdEIsT0FBTyxJQUFJLENBQUMsY0FBYyxDQUFDO0lBQzdCLENBQUM7Ozs7SUFNRCxZQUFZLE1BSVg7UUFDQyxJQUFJLENBQUMsSUFBSSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUM7UUFDeEIsSUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDO1FBQzVCLElBQUksQ0FBQyxRQUFRLEdBQUcsTUFBTSxDQUFDLFFBQVEsSUFBSSxLQUFLLENBQUM7UUFDekMsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLE9BQU87Ozs7UUFDdkIsUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxjQUFjLEdBQUcsUUFBUSxDQUFDLEVBQzdDLENBQUM7SUFDSixDQUFDOzs7Ozs7O0lBTU8sY0FBYyxDQUFDLE1BQWdCLEVBQUUsTUFBZ0I7UUFDdkQsT0FBTyxNQUFNLENBQUMsS0FBSzs7OztRQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsRUFBQyxDQUFDO0lBQ3JELENBQUM7Ozs7Ozs7SUFFTSxJQUFJLENBQUMsR0FBRyxNQUFzQjtRQUNuQyxtQkFBQSxJQUFJLEVBQUEsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUM7UUFDNUIsT0FBTyxtQkFBQSxJQUFJLEVBQUEsQ0FBQztJQUNkLENBQUM7Ozs7O0lBRVksTUFBTSxDQUFDLE1BQXFDOzs7Z0JBQ25ELENBQTREO1lBQ2hFLElBQUksSUFBSSxDQUFDLElBQUksS0FBSyxLQUFLLEVBQUU7Z0JBQ3ZCLENBQUMsR0FBRyxPQUFPLENBQUMsY0FBYyxDQUFDLE1BQU0sSUFBSSxDQUFDLE1BQU0sRUFBRSxNQUFNLElBQUksU0FBUyxDQUFDLENBQUM7YUFDcEU7aUJBQU07Z0JBQ0wsQ0FBQyxHQUFHLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFNLElBQUksQ0FBQyxNQUFNLEVBQUUsTUFBTSxJQUFJLFNBQVMsQ0FBQyxDQUFDO2FBQ3RFO1lBRUQsSUFDRSxJQUFJLENBQUMsY0FBYyxDQUNqQixDQUFDLGFBQWEsRUFBRSxXQUFXLEVBQUUsY0FBYyxFQUFFLGFBQWEsQ0FBQyxFQUMzRCxJQUFJLENBQUMsTUFBTSxDQUNaLEVBQ0Q7Z0JBQ0EsSUFBSSxDQUFDLFlBQVksT0FBTyxDQUFDLG9CQUFvQixFQUFFO29CQUM3QyxPQUFPLENBQUM7eUJBQ0wsaUJBQWlCLEVBQUU7eUJBQ25CLG1CQUFtQixFQUFFO3lCQUNyQixnQkFBZ0IsRUFBRTt5QkFDbEIsa0JBQWtCLEVBQUU7eUJBQ3BCLEdBQUcsRUFBRSxDQUFDO2lCQUNWO3FCQUFNLElBQUksQ0FBQyxZQUFZLE9BQU8sQ0FBQyxrQkFBa0IsRUFBRTtvQkFDbEQsT0FBTyxDQUFDO3lCQUNMLGlCQUFpQixFQUFFO3lCQUNuQixtQkFBbUIsRUFBRTt5QkFDckIsZ0JBQWdCLEVBQUU7eUJBQ2xCLG1CQUFtQixFQUFFO3lCQUNyQixHQUFHLEVBQUUsQ0FBQztpQkFDVjthQUNGO2lCQUFNLElBQ0wsSUFBSSxDQUFDLGNBQWMsQ0FDakIsQ0FBQyxhQUFhLEVBQUUsV0FBVyxFQUFFLGFBQWEsQ0FBQyxFQUMzQyxJQUFJLENBQUMsTUFBTSxDQUNaLEVBQ0Q7Z0JBQ0EsSUFBSSxDQUFDLFlBQVksT0FBTyxDQUFDLG9CQUFvQixFQUFFO29CQUM3QyxPQUFPLENBQUM7eUJBQ0wsaUJBQWlCLEVBQUU7eUJBQ25CLG1CQUFtQixFQUFFO3lCQUNyQixrQkFBa0IsRUFBRTt5QkFDcEIsR0FBRyxFQUFFLENBQUM7aUJBQ1Y7cUJBQU0sSUFBSSxDQUFDLFlBQVksT0FBTyxDQUFDLGtCQUFrQixFQUFFO29CQUNsRCxPQUFPLENBQUM7eUJBQ0wsaUJBQWlCLEVBQUU7eUJBQ25CLG1CQUFtQixFQUFFO3lCQUNyQixtQkFBbUIsRUFBRTt5QkFDckIsR0FBRyxFQUFFLENBQUM7aUJBQ1Y7YUFDRjtpQkFBTSxJQUNMLElBQUksQ0FBQyxjQUFjLENBQ2pCLENBQUMsYUFBYSxFQUFFLFdBQVcsRUFBRSxjQUFjLENBQUMsRUFDNUMsSUFBSSxDQUFDLE1BQU0sQ0FDWixFQUNEO2dCQUNBLE9BQU8sQ0FBQztxQkFDTCxpQkFBaUIsRUFBRTtxQkFDbkIsbUJBQW1CLEVBQUU7cUJBQ3JCLGdCQUFnQixFQUFFO3FCQUNsQixHQUFHLEVBQUUsQ0FBQzthQUNWO2lCQUFNLElBQUksSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDLGFBQWEsRUFBRSxXQUFXLENBQUMsRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLEVBQUU7Z0JBQ3pFLE9BQU8sQ0FBQztxQkFDTCxpQkFBaUIsRUFBRTtxQkFDbkIsbUJBQW1CLEVBQUU7cUJBQ3JCLEdBQUcsRUFBRSxDQUFDO2FBQ1Y7aUJBQU0sSUFDTCxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUMsYUFBYSxFQUFFLGNBQWMsQ0FBQyxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsRUFDakU7Z0JBQ0EsT0FBTyxDQUFDO3FCQUNMLG1CQUFtQixFQUFFO3FCQUNyQixnQkFBZ0IsRUFBRTtxQkFDbEIsR0FBRyxFQUFFLENBQUM7YUFDVjtpQkFBTSxJQUFJLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQyxhQUFhLENBQUMsRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLEVBQUU7Z0JBQzVELE9BQU8sQ0FBQyxDQUFDLG1CQUFtQixFQUFFLENBQUMsR0FBRyxFQUFFLENBQUM7YUFDdEM7aUJBQU0sSUFDTCxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUMsV0FBVyxFQUFFLGNBQWMsQ0FBQyxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsRUFDL0Q7Z0JBQ0EsT0FBTyxDQUFDO3FCQUNMLGlCQUFpQixFQUFFO3FCQUNuQixnQkFBZ0IsRUFBRTtxQkFDbEIsR0FBRyxFQUFFLENBQUM7YUFDVjtpQkFBTSxJQUFJLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQyxXQUFXLENBQUMsRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLEVBQUU7Z0JBQzFELE9BQU8sQ0FBQyxDQUFDLGlCQUFpQixFQUFFLENBQUMsR0FBRyxFQUFFLENBQUM7YUFDcEM7WUFDRCxPQUFPLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztRQUNqQixDQUFDO0tBQUE7Q0FDRjs7O0lBbkhDLDBCQUFvQzs7SUFDcEMsNEJBQXVDOztJQUN2Qyw4QkFBa0M7O0lBZWxDLDRCQUE0RDs7Ozs7SUFFNUQsb0NBQTBFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgZmFjZWFwaSBmcm9tICdmYWNlLWFwaS5qcyc7XG5pbXBvcnQgeyBUYXNrVHlwZVRva2VuIH0gZnJvbSAnLi4vdG9rZW5zL1Rhc2tUeXBlVG9rZW4nO1xuaW1wb3J0IHsgRmVhdHVyZVRva2VuIH0gZnJvbSAnLi4vdG9rZW5zL0ZlYXR1cmVUb2tlbic7XG5cbmV4cG9ydCBjbGFzcyBEZXRlY3RUYXNrIHtcbiAgcHVibGljIGdldCByZXNvbHZlVGFyZ2V0KCk6IChcbiAgICBlbDogSFRNTEltYWdlRWxlbWVudCB8IEhUTUxWaWRlb0VsZW1lbnQsXG4gICkgPT4gdm9pZCB7XG4gICAgcmV0dXJuIHRoaXMudGFyZ2V0UmVzb2x2ZXI7XG4gIH1cblxuICBwdWJsaWMgcmVhZG9ubHkgdHlwZTogVGFza1R5cGVUb2tlbjtcbiAgcHVibGljIHJlYWRvbmx5IHRva2VuczogRmVhdHVyZVRva2VuW107XG4gIHB1YmxpYyByZWFkb25seSByZWFsdGltZTogYm9vbGVhbjtcblxuICBjb25zdHJ1Y3RvcihvcHRpb246IHtcbiAgICB0eXBlOiBUYXNrVHlwZVRva2VuO1xuICAgIHRva2VuczogRmVhdHVyZVRva2VuW107XG4gICAgcmVhbHRpbWU/OiBib29sZWFuO1xuICB9KSB7XG4gICAgdGhpcy50eXBlID0gb3B0aW9uLnR5cGU7XG4gICAgdGhpcy50b2tlbnMgPSBvcHRpb24udG9rZW5zO1xuICAgIHRoaXMucmVhbHRpbWUgPSBvcHRpb24ucmVhbHRpbWUgfHwgZmFsc2U7XG4gICAgdGhpcy50YXJnZXQgPSBuZXcgUHJvbWlzZTxIVE1MSW1hZ2VFbGVtZW50IHwgSFRNTFZpZGVvRWxlbWVudD4oXG4gICAgICByZXNvbHZlciA9PiAodGhpcy50YXJnZXRSZXNvbHZlciA9IHJlc29sdmVyKSxcbiAgICApO1xuICB9XG5cbiAgcHVibGljIHRhcmdldDogUHJvbWlzZTxIVE1MSW1hZ2VFbGVtZW50IHwgSFRNTFZpZGVvRWxlbWVudD47XG5cbiAgcHJpdmF0ZSB0YXJnZXRSZXNvbHZlcjogKGVsOiBIVE1MSW1hZ2VFbGVtZW50IHwgSFRNTFZpZGVvRWxlbWVudCkgPT4gdm9pZDtcblxuICBwcml2YXRlIGlzTWF0Y2hQYXR0ZXJuKHBhdHRlbjogc3RyaW5nW10sIHRhcmdldDogc3RyaW5nW10pOiBib29sZWFuIHtcbiAgICByZXR1cm4gcGF0dGVuLmV2ZXJ5KGl0ZW0gPT4gdGFyZ2V0LmluY2x1ZGVzKGl0ZW0pKTtcbiAgfVxuXG4gIHB1YmxpYyB3aXRoKC4uLnRva2VuczogRmVhdHVyZVRva2VuW10pOiB0aGlzIHtcbiAgICB0aGlzLnRva2Vucy5wdXNoKC4uLnRva2Vucyk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgZGV0ZWN0KG9wdGlvbj86IGZhY2VhcGkuRmFjZURldGVjdGlvbk9wdGlvbnMpOiBQcm9taXNlPGFueT4ge1xuICAgIGxldCB0OiBmYWNlYXBpLkRldGVjdEFsbEZhY2VzVGFzayB8IGZhY2VhcGkuRGV0ZWN0U2luZ2xlRmFjZVRhc2s7XG4gICAgaWYgKHRoaXMudHlwZSA9PT0gJ2FsbCcpIHtcbiAgICAgIHQgPSBmYWNlYXBpLmRldGVjdEFsbEZhY2VzKGF3YWl0IHRoaXMudGFyZ2V0LCBvcHRpb24gfHwgdW5kZWZpbmVkKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdCA9IGZhY2VhcGkuZGV0ZWN0U2luZ2xlRmFjZShhd2FpdCB0aGlzLnRhcmdldCwgb3B0aW9uIHx8IHVuZGVmaW5lZCk7XG4gICAgfVxuXG4gICAgaWYgKFxuICAgICAgdGhpcy5pc01hdGNoUGF0dGVybihcbiAgICAgICAgWydleHByZXNzaW9ucycsICdsYW5kbWFya3MnLCAnYWdlQW5kR2VuZGVyJywgJ2Rlc2NyaXB0b3JzJ10sXG4gICAgICAgIHRoaXMudG9rZW5zLFxuICAgICAgKVxuICAgICkge1xuICAgICAgaWYgKHQgaW5zdGFuY2VvZiBmYWNlYXBpLkRldGVjdFNpbmdsZUZhY2VUYXNrKSB7XG4gICAgICAgIHJldHVybiB0XG4gICAgICAgICAgLndpdGhGYWNlTGFuZG1hcmtzKClcbiAgICAgICAgICAud2l0aEZhY2VFeHByZXNzaW9ucygpXG4gICAgICAgICAgLndpdGhBZ2VBbmRHZW5kZXIoKVxuICAgICAgICAgIC53aXRoRmFjZURlc2NyaXB0b3IoKVxuICAgICAgICAgIC5ydW4oKTtcbiAgICAgIH0gZWxzZSBpZiAodCBpbnN0YW5jZW9mIGZhY2VhcGkuRGV0ZWN0QWxsRmFjZXNUYXNrKSB7XG4gICAgICAgIHJldHVybiB0XG4gICAgICAgICAgLndpdGhGYWNlTGFuZG1hcmtzKClcbiAgICAgICAgICAud2l0aEZhY2VFeHByZXNzaW9ucygpXG4gICAgICAgICAgLndpdGhBZ2VBbmRHZW5kZXIoKVxuICAgICAgICAgIC53aXRoRmFjZURlc2NyaXB0b3JzKClcbiAgICAgICAgICAucnVuKCk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChcbiAgICAgIHRoaXMuaXNNYXRjaFBhdHRlcm4oXG4gICAgICAgIFsnZXhwcmVzc2lvbnMnLCAnbGFuZG1hcmtzJywgJ2Rlc2NyaXB0b3JzJ10sXG4gICAgICAgIHRoaXMudG9rZW5zLFxuICAgICAgKVxuICAgICkge1xuICAgICAgaWYgKHQgaW5zdGFuY2VvZiBmYWNlYXBpLkRldGVjdFNpbmdsZUZhY2VUYXNrKSB7XG4gICAgICAgIHJldHVybiB0XG4gICAgICAgICAgLndpdGhGYWNlTGFuZG1hcmtzKClcbiAgICAgICAgICAud2l0aEZhY2VFeHByZXNzaW9ucygpXG4gICAgICAgICAgLndpdGhGYWNlRGVzY3JpcHRvcigpXG4gICAgICAgICAgLnJ1bigpO1xuICAgICAgfSBlbHNlIGlmICh0IGluc3RhbmNlb2YgZmFjZWFwaS5EZXRlY3RBbGxGYWNlc1Rhc2spIHtcbiAgICAgICAgcmV0dXJuIHRcbiAgICAgICAgICAud2l0aEZhY2VMYW5kbWFya3MoKVxuICAgICAgICAgIC53aXRoRmFjZUV4cHJlc3Npb25zKClcbiAgICAgICAgICAud2l0aEZhY2VEZXNjcmlwdG9ycygpXG4gICAgICAgICAgLnJ1bigpO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoXG4gICAgICB0aGlzLmlzTWF0Y2hQYXR0ZXJuKFxuICAgICAgICBbJ2V4cHJlc3Npb25zJywgJ2xhbmRtYXJrcycsICdhZ2VBbmRHZW5kZXInXSxcbiAgICAgICAgdGhpcy50b2tlbnMsXG4gICAgICApXG4gICAgKSB7XG4gICAgICByZXR1cm4gdFxuICAgICAgICAud2l0aEZhY2VMYW5kbWFya3MoKVxuICAgICAgICAud2l0aEZhY2VFeHByZXNzaW9ucygpXG4gICAgICAgIC53aXRoQWdlQW5kR2VuZGVyKClcbiAgICAgICAgLnJ1bigpO1xuICAgIH0gZWxzZSBpZiAodGhpcy5pc01hdGNoUGF0dGVybihbJ2V4cHJlc3Npb25zJywgJ2xhbmRtYXJrcyddLCB0aGlzLnRva2VucykpIHtcbiAgICAgIHJldHVybiB0XG4gICAgICAgIC53aXRoRmFjZUxhbmRtYXJrcygpXG4gICAgICAgIC53aXRoRmFjZUV4cHJlc3Npb25zKClcbiAgICAgICAgLnJ1bigpO1xuICAgIH0gZWxzZSBpZiAoXG4gICAgICB0aGlzLmlzTWF0Y2hQYXR0ZXJuKFsnZXhwcmVzc2lvbnMnLCAnYWdlQW5kR2VuZGVyJ10sIHRoaXMudG9rZW5zKVxuICAgICkge1xuICAgICAgcmV0dXJuIHRcbiAgICAgICAgLndpdGhGYWNlRXhwcmVzc2lvbnMoKVxuICAgICAgICAud2l0aEFnZUFuZEdlbmRlcigpXG4gICAgICAgIC5ydW4oKTtcbiAgICB9IGVsc2UgaWYgKHRoaXMuaXNNYXRjaFBhdHRlcm4oWydleHByZXNzaW9ucyddLCB0aGlzLnRva2VucykpIHtcbiAgICAgIHJldHVybiB0LndpdGhGYWNlRXhwcmVzc2lvbnMoKS5ydW4oKTtcbiAgICB9IGVsc2UgaWYgKFxuICAgICAgdGhpcy5pc01hdGNoUGF0dGVybihbJ2xhbmRtYXJrcycsICdhZ2VBbmRHZW5kZXInXSwgdGhpcy50b2tlbnMpXG4gICAgKSB7XG4gICAgICByZXR1cm4gdFxuICAgICAgICAud2l0aEZhY2VMYW5kbWFya3MoKVxuICAgICAgICAud2l0aEFnZUFuZEdlbmRlcigpXG4gICAgICAgIC5ydW4oKTtcbiAgICB9IGVsc2UgaWYgKHRoaXMuaXNNYXRjaFBhdHRlcm4oWydsYW5kbWFya3MnXSwgdGhpcy50b2tlbnMpKSB7XG4gICAgICByZXR1cm4gdC53aXRoRmFjZUxhbmRtYXJrcygpLnJ1bigpO1xuICAgIH1cbiAgICByZXR1cm4gdC5ydW4oKTtcbiAgfVxufVxuIl19