{"version":3,"file":"lightsailed-ngx-open-cv.mjs","sources":["../../../projects/ngx-open-cv/src/lib/ng-open-cv.service.ts","../../../projects/ngx-open-cv/src/lib/ng-open-cv.module.ts","../../../projects/ngx-open-cv/src/public_api.ts","../../../projects/ngx-open-cv/src/lightsailed-ngx-open-cv.ts"],"sourcesContent":["import { Inject, Injectable, InjectionToken } from '@angular/core';\nimport { BehaviorSubject, Observable } from 'rxjs';\n\nimport { OpenCVLoadResult, OpenCVOptions } from './ng-open-cv.models';\n\n/*\nAngular modifification of the OpenCV utils script found at https://docs.opencv.org/master/utils.js\n*/\ndeclare var cv: any;\n\nexport const OPEN_CV_CONFIGURATION = new InjectionToken<OpenCVOptions>('Angular OpenCV Configuration Object');\n\n@Injectable({\n  providedIn: 'root'\n})\nexport class NgOpenCVService {\n  errorOutput: HTMLElement;\n  src = null;\n  dstC1 = null;\n  dstC3 = null;\n  dstC4 = null;\n\n  stream: any;\n  video: any;\n  private isReady = new BehaviorSubject<OpenCVLoadResult>({\n    ready: false,\n    error: false,\n    loading: true\n  });\n  isReady$: Observable<OpenCVLoadResult> = this.isReady.asObservable();\n  onCameraStartedCallback: (a, b) => void;\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\n  constructor(@Inject(OPEN_CV_CONFIGURATION) options: OpenCVOptions) {\n    this.setScriptUrl(options.scriptUrl);\n    const opts = { ...this.DEFAULT_OPTIONS, options };\n    this.loadOpenCv(opts);\n  }\n\n  private locateFile(path, scriptDirectory): string {\n    if (path === 'opencv_js.wasm') {\n      return scriptDirectory + '/wasm/' + path;\n    } else {\n      return scriptDirectory + path;\n    }\n  }\n\n  setScriptUrl(url: string) {\n    this.OPENCV_URL = url;\n  }\n\n  loadOpenCv(options: OpenCVOptions) {\n    this.isReady.next({\n      ready: false,\n      error: false,\n      loading: true\n    });\n    window['Module'] = { ...options };\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\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 { next, error: catchError, complete } = 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\n  loadImageToCanvas(imageUrl, canvasId: string): Observable<any> {\n    return Observable.create(observer => {\n      const canvas: HTMLCanvasElement = <HTMLCanvasElement>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\n  loadImageToHTMLCanvas(imageUrl: string, canvas: HTMLCanvasElement): Observable<any> {\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\n  clearError() {\n    this.errorOutput.innerHTML = '';\n  }\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, '<br>');\n    }\n    throw new Error(err);\n  }\n\n  loadCode(scriptId, textAreaId) {\n    const scriptNode = <HTMLScriptElement>document.getElementById(scriptId);\n    const textArea = <HTMLTextAreaElement>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\n  addFileInputHandler(fileInputId, canvasId) {\n    const inputElement = document.getElementById(fileInputId);\n    inputElement.addEventListener(\n      'change',\n      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      },\n      false\n    );\n  }\n\n  onVideoCanPlay() {\n    if (this.onCameraStartedCallback) {\n      this.onCameraStartedCallback(this.stream, this.video);\n    }\n  }\n\n  startCamera(resolution, callback, videoId) {\n    const constraints = {\n      qvga: { width: { exact: 320 }, height: { exact: 240 } },\n      vga: { width: { exact: 640 }, height: { exact: 480 } }\n    };\n    let video = <HTMLVideoElement>document.getElementById(videoId);\n    if (!video) {\n      video = document.createElement('video');\n    }\n\n    let videoConstraint = constraints[resolution];\n    if (!videoConstraint) {\n      videoConstraint = true;\n    }\n\n    navigator.mediaDevices\n      .getUserMedia({ video: videoConstraint, 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      })\n      .catch(err => {\n        this.printError('Camera Error: ' + err.name + ' ' + err.message);\n      });\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\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}\n","import { NgModule, ModuleWithProviders } from '@angular/core';\nimport { NgOpenCVService, OPEN_CV_CONFIGURATION } from './ng-open-cv.service';\nimport { OpenCVOptions } from './ng-open-cv.models';\n\n@NgModule({\n  imports: [],\n  declarations: [],\n  exports: [],\n  providers: [NgOpenCVService]\n})\nexport class NgOpenCVModule {\n  /**\n   *\n   * Setup the module in your application's root bootstrap.\n   *\n   *\n   * @memberOf NgOpenCvModule\n   */\n  static forRoot(config: OpenCVOptions): ModuleWithProviders<NgOpenCVModule> {\n    return {\n      ngModule: NgOpenCVModule,\n      providers: [{ provide: OPEN_CV_CONFIGURATION, useValue: config }]\n    };\n  }\n}\n","/*\n * Public API Surface of ngx-open-cv\n */\n\nexport * from './lib/ng-open-cv.models';\nexport * from './lib/ng-open-cv.service';\nexport * from './lib/ng-open-cv.module';\n\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":[],"mappings":"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"}