{"version":3,"sources":["node_modules/@lightsailed/ngx-open-cv/fesm2022/lightsailed-ngx-open-cv.mjs"],"sourcesContent":["import * as i0 from '@angular/core';\nimport { InjectionToken, Injectable, Inject, NgModule } from '@angular/core';\nimport { BehaviorSubject, Observable } from 'rxjs';\nconst OPEN_CV_CONFIGURATION = new InjectionToken('Angular OpenCV Configuration Object');\nclass NgOpenCVService {\n errorOutput;\n src = null;\n dstC1 = null;\n dstC3 = null;\n dstC4 = null;\n stream;\n video;\n isReady = new BehaviorSubject({\n ready: false,\n error: false,\n loading: true\n });\n isReady$ = this.isReady.asObservable();\n onCameraStartedCallback;\n OPENCV_URL = 'opencv.js';\n DEFAULT_OPTIONS = {\n scriptUrl: 'assets/opencv/asm/3.4/opencv.js',\n wasmBinaryFile: 'wasm/3.4/opencv_js.wasm',\n usingWasm: false,\n locateFile: this.locateFile.bind(this),\n onRuntimeInitialized: () => {}\n };\n constructor(options) {\n this.setScriptUrl(options.scriptUrl);\n const opts = {\n ...this.DEFAULT_OPTIONS,\n options\n };\n this.loadOpenCv(opts);\n }\n locateFile(path, scriptDirectory) {\n if (path === 'opencv_js.wasm') {\n return scriptDirectory + '/wasm/' + path;\n } else {\n return scriptDirectory + path;\n }\n }\n setScriptUrl(url) {\n this.OPENCV_URL = url;\n }\n loadOpenCv(options) {\n this.isReady.next({\n ready: false,\n error: false,\n loading: true\n });\n window['Module'] = {\n ...options\n };\n const script = document.createElement('script');\n script.setAttribute('async', '');\n script.setAttribute('type', 'text/javascript');\n script.addEventListener('load', () => {\n const onRuntimeInitializedCallback = () => {\n if (options.onRuntimeInitialized) {\n options.onRuntimeInitialized();\n }\n this.isReady.next({\n ready: true,\n error: false,\n loading: false\n });\n };\n cv.onRuntimeInitialized = onRuntimeInitializedCallback;\n });\n script.addEventListener('error', () => {\n const err = this.printError('Failed to load ' + this.OPENCV_URL);\n this.isReady.next({\n ready: false,\n error: true,\n loading: false\n });\n this.isReady.error(err);\n });\n script.src = this.OPENCV_URL;\n const node = document.getElementsByTagName('script')[0];\n if (node) {\n node.parentNode.insertBefore(script, node);\n } else {\n document.head.appendChild(script);\n }\n }\n createFileFromUrl(path, url) {\n const request = new XMLHttpRequest();\n request.open('GET', url, true);\n request.responseType = 'arraybuffer';\n return new Observable(observer => {\n const {\n next,\n error: catchError,\n complete\n } = observer;\n request.onload = ev => {\n if (request.readyState === 4) {\n if (request.status === 200) {\n const data = new Uint8Array(request.response);\n cv.FS_createDataFile('/', path, data, true, false, false);\n observer.next();\n observer.complete();\n } else {\n this.printError('Failed to load ' + url + ' status: ' + request.status);\n observer.error();\n }\n }\n };\n request.send();\n });\n }\n loadImageToCanvas(imageUrl, canvasId) {\n return Observable.create(observer => {\n const canvas = document.getElementById(canvasId);\n const ctx = canvas.getContext('2d');\n const img = new Image();\n img.crossOrigin = 'anonymous';\n img.onload = () => {\n canvas.width = img.width;\n canvas.height = img.height;\n ctx.drawImage(img, 0, 0, img.width, img.height);\n observer.next();\n observer.complete();\n };\n img.src = imageUrl;\n });\n }\n loadImageToHTMLCanvas(imageUrl, canvas) {\n return Observable.create(observer => {\n const ctx = canvas.getContext('2d');\n const img = new Image();\n img.crossOrigin = 'anonymous';\n img.onload = () => {\n canvas.width = img.width;\n canvas.height = img.height;\n ctx.drawImage(img, 0, 0, img.width, img.height);\n observer.next();\n observer.complete();\n };\n img.src = imageUrl;\n });\n }\n clearError() {\n this.errorOutput.innerHTML = '';\n }\n printError(err) {\n if (typeof err === 'undefined') {\n err = '';\n } else if (typeof err === 'number') {\n if (!isNaN(err)) {\n if (typeof cv !== 'undefined') {\n err = 'Exception: ' + cv.exceptionFromPtr(err).msg;\n }\n }\n } else if (typeof err === 'string') {\n const ptr = Number(err.split(' ')[0]);\n if (!isNaN(ptr)) {\n if (typeof cv !== 'undefined') {\n err = 'Exception: ' + cv.exceptionFromPtr(ptr).msg;\n }\n }\n } else if (err instanceof Error) {\n err = err.stack.replace(/\\n/g, '
');\n }\n throw new Error(err);\n }\n loadCode(scriptId, textAreaId) {\n const scriptNode = document.getElementById(scriptId);\n const textArea = document.getElementById(textAreaId);\n if (scriptNode.type !== 'text/code-snippet') {\n throw Error('Unknown code snippet type');\n }\n textArea.value = scriptNode.text.replace(/^\\n/, '');\n }\n addFileInputHandler(fileInputId, canvasId) {\n const inputElement = document.getElementById(fileInputId);\n inputElement.addEventListener('change', e => {\n const files = e.target['files'];\n if (files.length > 0) {\n const imgUrl = URL.createObjectURL(files[0]);\n this.loadImageToCanvas(imgUrl, canvasId);\n }\n }, false);\n }\n onVideoCanPlay() {\n if (this.onCameraStartedCallback) {\n this.onCameraStartedCallback(this.stream, this.video);\n }\n }\n startCamera(resolution, callback, videoId) {\n const constraints = {\n qvga: {\n width: {\n exact: 320\n },\n height: {\n exact: 240\n }\n },\n vga: {\n width: {\n exact: 640\n },\n height: {\n exact: 480\n }\n }\n };\n let video = document.getElementById(videoId);\n if (!video) {\n video = document.createElement('video');\n }\n let videoConstraint = constraints[resolution];\n if (!videoConstraint) {\n videoConstraint = true;\n }\n navigator.mediaDevices.getUserMedia({\n video: videoConstraint,\n audio: false\n }).then(stream => {\n video.srcObject = stream;\n video.play();\n this.video = video;\n this.stream = stream;\n this.onCameraStartedCallback = callback;\n video.addEventListener('canplay', this.onVideoCanPlay.bind(this), false);\n }).catch(err => {\n this.printError('Camera Error: ' + err.name + ' ' + err.message);\n });\n }\n stopCamera() {\n if (this.video) {\n this.video.pause();\n this.video.srcObject = null;\n this.video.removeEventListener('canplay', this.onVideoCanPlay.bind(this));\n }\n if (this.stream) {\n this.stream.getVideoTracks()[0].stop();\n }\n }\n getContours(src, width, height) {\n cv.cvtColor(src, this.dstC1, cv.COLOR_RGBA2GRAY);\n cv.threshold(this.dstC1, this.dstC4, 120, 200, cv.THRESH_BINARY);\n const contours = new cv.MatVector();\n const hierarchy = new cv.Mat();\n cv.findContours(this.dstC4, contours, hierarchy, cv.RETR_CCOMP, cv.CHAIN_APPROX_SIMPLE, {\n x: 0,\n y: 0\n });\n this.dstC3.delete();\n this.dstC3 = cv.Mat.ones(height, width, cv.CV_8UC3);\n for (let i = 0; i < contours.size(); ++i) {\n const color = new cv.Scalar(0, 255, 0);\n cv.drawContours(this.dstC3, contours, i, color, 1, cv.LINE_8, hierarchy);\n }\n contours.delete();\n hierarchy.delete();\n return this.dstC3;\n }\n static ɵfac = function NgOpenCVService_Factory(t) {\n return new (t || NgOpenCVService)(i0.ɵɵinject(OPEN_CV_CONFIGURATION));\n };\n static ɵprov = /* @__PURE__ */i0.ɵɵdefineInjectable({\n token: NgOpenCVService,\n factory: NgOpenCVService.ɵfac,\n providedIn: 'root'\n });\n}\n(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && i0.ɵsetClassMetadata(NgOpenCVService, [{\n type: Injectable,\n args: [{\n providedIn: 'root'\n }]\n }], () => [{\n type: undefined,\n decorators: [{\n type: Inject,\n args: [OPEN_CV_CONFIGURATION]\n }]\n }], null);\n})();\nclass NgOpenCVModule {\n /**\n *\n * Setup the module in your application's root bootstrap.\n *\n *\n * @memberOf NgOpenCvModule\n */\n static forRoot(config) {\n return {\n ngModule: NgOpenCVModule,\n providers: [{\n provide: OPEN_CV_CONFIGURATION,\n useValue: config\n }]\n };\n }\n static ɵfac = function NgOpenCVModule_Factory(t) {\n return new (t || NgOpenCVModule)();\n };\n static ɵmod = /* @__PURE__ */i0.ɵɵdefineNgModule({\n type: NgOpenCVModule\n });\n static ɵinj = /* @__PURE__ */i0.ɵɵdefineInjector({\n providers: [NgOpenCVService]\n });\n}\n(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && i0.ɵsetClassMetadata(NgOpenCVModule, [{\n type: NgModule,\n args: [{\n imports: [],\n declarations: [],\n exports: [],\n providers: [NgOpenCVService]\n }]\n }], null, null);\n})();\n\n/*\n * Public API Surface of ngx-open-cv\n */\n\n/**\n * Generated bundle index. Do not edit.\n */\n\nexport { NgOpenCVModule, NgOpenCVService, OPEN_CV_CONFIGURATION };\n"],"mappings":"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","names":[],"x_google_ignoreList":[0]}