UNPKG

ngx-opencv-16

Version:

Angular service for implementing the OpenCV library in angular based applications

189 lines 14.2 kB
/** * @fileoverview added by tsickle * Generated from: lib/ngx-open-cv.service.ts * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc */ import { Inject, Injectable, InjectionToken, NgZone } from '@angular/core'; import { BehaviorSubject } from 'rxjs'; import * as i0 from "@angular/core"; /** @type {?} */ export var OpenCvConfigToken = new InjectionToken('OpenCV config object token'); var NgxOpenCVService = /** @class */ (function () { function NgxOpenCVService(options, _ngZone) { this._ngZone = _ngZone; this.cvState = new BehaviorSubject({ ready: false, error: false, loading: true, state: 'loading' }); if (!options) { options = {}; } this.configModule = this.generateConfigModule(options); this.loadOpenCv(); } /** * load the OpenCV script */ /** * load the OpenCV script * @return {?} */ NgxOpenCVService.prototype.loadOpenCv = /** * load the OpenCV script * @return {?} */ function () { var _this = this; this.cvState.next(this.newState('loading')); // create global module variable window['Module'] = this.configModule; // create script element and set attributes /** @type {?} */ var script = (/** @type {?} */ (document.createElement('script'))); script.setAttribute('async', ''); script.setAttribute('type', 'text/javascript'); // listen for errors script.addEventListener('error', (/** * @return {?} */ function () { /** @type {?} */ var err = new Error('Failed to load ' + _this.configModule.scriptUrl); _this.cvState.next(_this.newState('error')); _this.cvState.error(err); }), { passive: true }); // set script url script.src = this.configModule.scriptUrl; // insert script as first script tag /** @type {?} */ var node = document.getElementsByTagName('script')[0]; if (node) { node.parentNode.insertBefore(script, node); } else { document.head.appendChild(script); } }; /** * generates a new state object * @param change - the new state of the module */ /** * generates a new state object * @private * @param {?} change - the new state of the module * @return {?} */ NgxOpenCVService.prototype.newState = /** * generates a new state object * @private * @param {?} change - the new state of the module * @return {?} */ function (change) { /** @type {?} */ var newStateObj = { ready: false, loading: false, error: false, state: '' }; Object.keys(newStateObj).forEach((/** * @param {?} key * @return {?} */ function (key) { if (key !== 'state') { if (key === change) { newStateObj[key] = true; newStateObj.state = key; } else { newStateObj[key] = false; } } })); return newStateObj; }; /** * generates a config module for the global Module object * @param options - configuration options */ /** * generates a config module for the global Module object * @private * @param {?} options - configuration options * @return {?} */ NgxOpenCVService.prototype.generateConfigModule = /** * generates a config module for the global Module object * @private * @param {?} options - configuration options * @return {?} */ function (options) { var _this = this; return { scriptUrl: options.openCVDirPath ? options.openCVDirPath + "/opencv.js" : "/assets/opencv/opencv.js", wasmBinaryFile: 'opencv_js.wasm', usingWasm: true, onRuntimeInitialized: (/** * @return {?} */ function () { _this._ngZone.run((/** * @return {?} */ function () { console.log('openCV Ready'); _this.cvState.next(_this.newState('ready')); if (options.runOnOpenCVInit) { options.runOnOpenCVInit(); } })); }) }; }; NgxOpenCVService.decorators = [ { type: Injectable, args: [{ providedIn: 'root' },] } ]; /** @nocollapse */ NgxOpenCVService.ctorParameters = function () { return [ { type: undefined, decorators: [{ type: Inject, args: [OpenCvConfigToken,] }] }, { type: NgZone } ]; }; /** @nocollapse */ NgxOpenCVService.ɵprov = i0.ɵɵdefineInjectable({ factory: function NgxOpenCVService_Factory() { return new NgxOpenCVService(i0.ɵɵinject(OpenCvConfigToken), i0.ɵɵinject(i0.NgZone)); }, token: NgxOpenCVService, providedIn: "root" }); return NgxOpenCVService; }()); export { NgxOpenCVService }; if (false) { /** @type {?} */ NgxOpenCVService.prototype.cvState; /** @type {?} */ NgxOpenCVService.prototype.configModule; /** * @type {?} * @private */ NgxOpenCVService.prototype._ngZone; } /** * describes the global Module object that is used to initiate OpenCV.js * @record */ function OpenCvConfigModule() { } if (false) { /** @type {?} */ OpenCvConfigModule.prototype.scriptUrl; /** @type {?} */ OpenCvConfigModule.prototype.wasmBinaryFile; /** @type {?} */ OpenCvConfigModule.prototype.usingWasm; /** @type {?} */ OpenCvConfigModule.prototype.onRuntimeInitialized; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmd4LW9wZW4tY3Yuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiJuZzovL25neC1vcGVuY3YvIiwic291cmNlcyI6WyJsaWIvbmd4LW9wZW4tY3Yuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLE9BQU8sRUFBQyxNQUFNLEVBQUUsVUFBVSxFQUFFLGNBQWMsRUFBRSxNQUFNLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFDekUsT0FBTyxFQUFDLGVBQWUsRUFBQyxNQUFNLE1BQU0sQ0FBQzs7O0FBR3JDLE1BQU0sS0FBTyxpQkFBaUIsR0FBRyxJQUFJLGNBQWMsQ0FBZSw0QkFBNEIsQ0FBQztBQUUvRjtJQWFFLDBCQUF1QyxPQUFxQixFQUFVLE9BQWU7UUFBZixZQUFPLEdBQVAsT0FBTyxDQUFRO1FBUnJGLFlBQU8sR0FBRyxJQUFJLGVBQWUsQ0FBYztZQUN6QyxLQUFLLEVBQUUsS0FBSztZQUNaLEtBQUssRUFBRSxLQUFLO1lBQ1osT0FBTyxFQUFFLElBQUk7WUFDYixLQUFLLEVBQUUsU0FBUztTQUNqQixDQUFDLENBQUM7UUFJRCxJQUFJLENBQUMsT0FBTyxFQUFFO1lBQ1osT0FBTyxHQUFHLEVBQUUsQ0FBQztTQUNkO1FBQ0QsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsb0JBQW9CLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDdkQsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO0lBQ3BCLENBQUM7SUFFRDs7T0FFRzs7Ozs7SUFDSCxxQ0FBVTs7OztJQUFWO1FBQUEsaUJBMEJDO1FBekJDLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQztRQUM3QyxnQ0FBZ0M7UUFDaEMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUM7OztZQUcvQixNQUFNLEdBQUcsbUJBQW9CLFFBQVEsQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUFD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LElBZ0dDO1NBN0ZZLGdCQUFnQjs7O0lBRTNCLG1DQUtHOztJQUNILHdDQUFpQzs7Ozs7SUFFNkIsbUNBQXVCOzs7Ozs7QUF3RnZGLGlDQUtDOzs7SUFKQyx1Q0FBa0I7O0lBQ2xCLDRDQUF1Qjs7SUFDdkIsdUNBQW1COztJQUNuQixrREFBK0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0luamVjdCwgSW5qZWN0YWJsZSwgSW5qZWN0aW9uVG9rZW4sIE5nWm9uZX0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge0JlaGF2aW9yU3ViamVjdH0gZnJvbSAncnhqcyc7XG5pbXBvcnQge09wZW5DVkNvbmZpZywgT3BlbkNWU3RhdGV9IGZyb20gJy4vbW9kZWxzJztcblxuZXhwb3J0IGNvbnN0IE9wZW5DdkNvbmZpZ1Rva2VuID0gbmV3IEluamVjdGlvblRva2VuPE9wZW5DVkNvbmZpZz4oJ09wZW5DViBjb25maWcgb2JqZWN0IHRva2VuJyk7XG5cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnXG59KVxuZXhwb3J0IGNsYXNzIE5neE9wZW5DVlNlcnZpY2Uge1xuXG4gIGN2U3RhdGUgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PE9wZW5DVlN0YXRlPih7XG4gICAgcmVhZHk6IGZhbHNlLFxuICAgIGVycm9yOiBmYWxzZSxcbiAgICBsb2FkaW5nOiB0cnVlLFxuICAgIHN0YXRlOiAnbG9hZGluZydcbiAgfSk7XG4gIGNvbmZpZ01vZHVsZTogT3BlbkN2Q29uZmlnTW9kdWxlO1xuXG4gIGNvbnN0cnVjdG9yKEBJbmplY3QoT3BlbkN2Q29uZmlnVG9rZW4pIG9wdGlvbnM6IE9wZW5DVkNvbmZpZywgcHJpdmF0ZSBfbmdab25lOiBOZ1pvbmUpIHtcbiAgICBpZiAoIW9wdGlvbnMpIHtcbiAgICAgIG9wdGlvbnMgPSB7fTtcbiAgICB9XG4gICAgdGhpcy5jb25maWdNb2R1bGUgPSB0aGlzLmdlbmVyYXRlQ29uZmlnTW9kdWxlKG9wdGlvbnMpO1xuICAgIHRoaXMubG9hZE9wZW5DdigpO1xuICB9XG5cbiAgLyoqXG4gICAqIGxvYWQgdGhlIE9wZW5DViBzY3JpcHRcbiAgICovXG4gIGxvYWRPcGVuQ3YoKSB7XG4gICAgdGhpcy5jdlN0YXRlLm5leHQoIHRoaXMubmV3U3RhdGUoJ2xvYWRpbmcnKSk7XG4gICAgLy8gY3JlYXRlIGdsb2JhbCBtb2R1bGUgdmFyaWFibGVcbiAgICB3aW5kb3dbJ01vZHVsZSddID0gdGhpcy5jb25maWdNb2R1bGU7XG5cbiAgICAvLyBjcmVhdGUgc2NyaXB0IGVsZW1lbnQgYW5kIHNldCBhdHRyaWJ1dGVzXG4gICAgY29uc3Qgc2NyaXB0ID0gPEhUTUxTY3JpcHRFbGVtZW50PiBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzY3JpcHQnKTtcbiAgICBzY3JpcHQuc2V0QXR0cmlidXRlKCdhc3luYycsICcnKTtcbiAgICBzY3JpcHQuc2V0QXR0cmlidXRlKCd0eXBlJywgJ3RleHQvamF2YXNjcmlwdCcpO1xuXG4gICAgLy8gbGlzdGVuIGZvciBlcnJvcnNcbiAgICBzY3JpcHQuYWRkRXZlbnRMaXN0ZW5lcignZXJyb3InLCAoKSA9PiB7XG4gICAgICBjb25zdCBlcnIgPSBuZXcgRXJyb3IoJ0ZhaWxlZCB0byBsb2FkICcgKyB0aGlzLmNvbmZpZ01vZHVsZS5zY3JpcHRVcmwpO1xuICAgICAgdGhpcy5jdlN0YXRlLm5leHQodGhpcy5uZXdTdGF0ZSgnZXJyb3InKSk7XG4gICAgICB0aGlzLmN2U3RhdGUuZXJyb3IoZXJyKTtcbiAgICB9LCB7cGFzc2l2ZTogdHJ1ZX0pO1xuXG4gICAgLy8gc2V0IHNjcmlwdCB1cmxcbiAgICBzY3JpcHQuc3JjID0gdGhpcy5jb25maWdNb2R1bGUuc2NyaXB0VXJsO1xuICAgIC8vIGluc2VydCBzY3JpcHQgYXMgZmlyc3Qgc2NyaXB0IHRhZ1xuICAgIGNvbnN0IG5vZGUgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgnc2NyaXB0JylbMF07XG4gICAgaWYgKG5vZGUpIHtcbiAgICAgIG5vZGUucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUoc2NyaXB0LCBub2RlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZChzY3JpcHQpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBnZW5lcmF0ZXMgYSBuZXcgc3RhdGUgb2JqZWN0XG4gICAqIEBwYXJhbSBjaGFuZ2UgLSB0aGUgbmV3IHN0YXRlIG9mIHRoZSBtb2R1bGVcbiAgICovXG4gIHByaXZhdGUgbmV3U3RhdGUoY2hhbmdlOiAnbG9hZGluZyd8J3JlYWR5J3wnZXJyb3InKTogT3BlbkNWU3RhdGUge1xuICAgIGNvbnN0IG5ld1N0YXRlT2JqOiBPcGVuQ1ZTdGF0ZSA9IHtcbiAgICAgIHJlYWR5OiBmYWxzZSxcbiAgICAgIGxvYWRpbmc6IGZhbHNlLFxuICAgICAgZXJyb3I6IGZhbHNlLFxuICAgICAgc3RhdGU6ICcnXG4gICAgfTtcbiAgICBPYmplY3Qua2V5cyhuZXdTdGF0ZU9iaikuZm9yRWFjaChrZXkgPT4ge1xuICAgICAgaWYgKGtleSAhPT0gJ3N0YXRlJykge1xuICAgICAgICBpZiAoa2V5ID09PSBjaGFuZ2UpIHtcbiAgICAgICAgICBuZXdTdGF0ZU9ialtrZXldID0gdHJ1ZTtcbiAgICAgICAgICBuZXdTdGF0ZU9iai5zdGF0ZSA9IGtleTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBuZXdTdGF0ZU9ialtrZXldID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gbmV3U3RhdGVPYmo7XG4gIH1cblxuICAvKipcbiAgICogZ2VuZXJhdGVzIGEgY29uZmlnIG1vZHVsZSBmb3IgdGhlIGdsb2JhbCBNb2R1bGUgb2JqZWN0XG4gICAqIEBwYXJhbSBvcHRpb25zIC0gY29uZmlndXJhdGlvbiBvcHRpb25zXG4gICAqL1xuICBwcml2YXRlIGdlbmVyYXRlQ29uZmlnTW9kdWxlKG9wdGlvbnM6IE9wZW5DVkNvbmZpZyk6IE9wZW5DdkNvbmZpZ01vZHVsZSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHNjcmlwdFVybDogb3B0aW9ucy5vcGVuQ1ZEaXJQYXRoID8gYCR7b3B0aW9ucy5vcGVuQ1ZEaXJQYXRofS9vcGVuY3YuanNgIDogYC9hc3NldHMvb3BlbmN2L29wZW5jdi5qc2AsXG4gICAgICB3YXNtQmluYXJ5RmlsZTogJ29wZW5jdl9qcy53YXNtJyxcbiAgICAgIHVzaW5nV2FzbTogdHJ1ZSxcbiAgICAgIG9uUnVudGltZUluaXRpYWxpemVkOiAoKSA9PiB7XG4gICAgICAgIHRoaXMuX25nWm9uZS5ydW4oKCkgPT4ge1xuICAgICAgICAgIGNvbnNvbGUubG9nKCdvcGVuQ1YgUmVhZHknKTtcbiAgICAgICAgICB0aGlzLmN2U3RhdGUubmV4dCh0aGlzLm5ld1N0YXRlKCdyZWFkeScpKTtcbiAgICAgICAgICBpZiAob3B0aW9ucy5ydW5Pbk9wZW5DVkluaXQpIHtcbiAgICAgICAgICAgIG9wdGlvbnMucnVuT25PcGVuQ1ZJbml0KCk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9O1xuICB9XG59XG5cbi8qKlxuICogZGVzY3JpYmVzIHRoZSBnbG9iYWwgTW9kdWxlIG9iamVjdCB0aGF0IGlzIHVzZWQgdG8gaW5pdGlhdGUgT3BlbkNWLmpzXG4gKi9cbmludGVyZmFjZSBPcGVuQ3ZDb25maWdNb2R1bGUge1xuICBzY3JpcHRVcmw6IHN0cmluZztcbiAgd2FzbUJpbmFyeUZpbGU6IHN0cmluZztcbiAgdXNpbmdXYXNtOiBib29sZWFuO1xuICBvblJ1bnRpbWVJbml0aWFsaXplZDogRnVuY3Rpb247XG59XG5cbiJdfQ==