{"version":3,"file":"ngx-scanner-face.mjs","sources":["../../../projects/ngx-scanner-face/src/lib/ngx-scanner-face.default.ts","../../../projects/ngx-scanner-face/src/lib/ngx-scanner-face.helper.ts","../../../projects/ngx-scanner-face/src/lib/ngx-scanner-face.service.ts","../../../projects/ngx-scanner-face/src/lib/ngx-scanner-face.component.ts","../../../projects/ngx-scanner-face/src/lib/ngx-scanner-face.options.ts","../../../projects/ngx-scanner-face/src/lib/ngx-scanner-face.module.ts","../../../projects/ngx-scanner-face/src/public-api.ts","../../../projects/ngx-scanner-face/src/ngx-scanner-face.ts"],"sourcesContent":["import {\r\n  Env,\r\n  Config,\r\n  DrawOptions,\r\n} from './ngx-scanner-face.options';\r\n\r\n/**\r\n * Frame speed ms/fps.\r\n */\r\nexport const FPS = 30;\r\n\r\n/**\r\n * setTimeout 1000ms.\r\n */\r\nexport const TIMEOUT_DETECT = 1000;\r\n\r\n/**\r\n * user configuration for human, used to fine-tune behavior\r\n */\r\nexport const CONFIG: Partial<Config> = {\r\n  async: false,\r\n  modelBasePath: './models',\r\n  filter: {\r\n    flip: false\r\n  },\r\n  face: {\r\n    enabled: true,\r\n    detector: {\r\n      rotation: false,\r\n    },\r\n    mesh: {\r\n      enabled: true,\r\n    },\r\n    attention: {\r\n      enabled: false,\r\n    },\r\n    iris: {\r\n      enabled: true,\r\n    },\r\n    description: {\r\n      enabled: true,\r\n    },\r\n    emotion: {\r\n      enabled: true,\r\n    },\r\n  },\r\n  body: { enabled: true },\r\n  hand: { enabled: true },\r\n  object: { enabled: false },\r\n  gesture: { enabled: true },\r\n};\r\n\r\n/**\r\n * Env class that holds detected capabilities\r\n */\r\nexport const ENV: Partial<Env> = {\r\n  perfadd: false, // is performance data showing instant or total values\r\n};\r\n\r\n/**\r\n * Draw Options\r\n */\r\nexport const DRAW_OPTIONS: Partial<DrawOptions> = {\r\n  font: 'monospace', // set font used to draw labels when using draw methods\r\n  lineHeight: 20,\r\n};\r\n\r\n/**\r\n * MediaStream\r\ns * https://developer.mozilla.org/en-US/docs/Web/API/MediaDevices/getUserMedia\r\n */\r\nexport const MEDIASTREAM: MediaStreamConstraints = {\r\n  audio: false,\r\n  video: true\r\n};","import { AsyncSubject } from \"rxjs\";\r\n\r\n/**\r\n * Override Config\r\n */\r\nexport const OVERRIDES = (defaultConfig: any, switchConfig: any) => {\r\n  if (switchConfig && Object.keys(switchConfig)?.length) {\r\n    for (const key in defaultConfig) {\r\n      switchConfig = switchConfig?.hasOwnProperty(key)\r\n        ? switchConfig\r\n        : JSON.parse(\r\n          JSON.stringify({\r\n            ...switchConfig,\r\n            ...{ [key]: (defaultConfig as any)[key] },\r\n          })\r\n        );\r\n    }\r\n    return switchConfig;\r\n  } else {\r\n    return defaultConfig;\r\n  }\r\n};\r\n\r\n/**\r\n * AS_COMPLETE\r\n * @param as \r\n * @param data \r\n * @param error \r\n */\r\nexport const AS_COMPLETE = (as: AsyncSubject<any>, data: any, error?: any) => {\r\n  error ? as.error(error) : as.next(data);\r\n  as.complete();\r\n};\r\n\r\n/**\r\n * Download from url\r\n * @param url \r\n */\r\nexport const DOWNLOAD = (url: string, fileName: string) => {\r\n  const link = document.createElement('a');\r\n  link.download = fileName;\r\n  link.href = url;\r\n  link.click();\r\n}\r\n\r\n/**\r\n * Clean and reset canvas\r\n * @param canvas \r\n */\r\nexport const RESET_CANVAS = (canvas: HTMLCanvasElement) => {\r\n  // reset canvas\r\n  const context = canvas.getContext('2d', { willReadFrequently: true }) as CanvasRenderingContext2D;\r\n  // clear frame when reloop\r\n  context.clearRect(0, 0, canvas.width, canvas.height);\r\n}\r\n\r\n/**\r\n * COMPRESS_IMAGE_FILE\r\n * @param files \r\n * @param percentage \r\n * @param quality \r\n * @returns \r\n */\r\nexport const COMPRESS_IMAGE_FILE = (files: File[] = [], percentage = 100, quality = 100) => {\r\n  if (files.length && (percentage < 100 || quality < 100)) {\r\n    // Have files\r\n    const resizedFiles: File[] = [];\r\n    return new Promise<File[]>((resolve, reject) => {\r\n      for (const file of files) {\r\n        const image = new Image() as HTMLImageElement;\r\n        const reader = new FileReader();\r\n        reader.onload = function (event: any) {\r\n          image.onload = function () {\r\n            const canvas = document.createElement('canvas');\r\n            const ctx = canvas.getContext('2d') as CanvasRenderingContext2D;\r\n            const newWidth = Math.round(image.width * (percentage / 100));\r\n            const newHeight = Math.round(image.height * (percentage / 100));\r\n            canvas.width = newWidth;\r\n            canvas.height = newHeight;\r\n            ctx.drawImage(image, 0, 0, newWidth, newHeight);\r\n            canvas.toBlob((blob: any) => {\r\n              const resizedFile = new File([blob], file.name, { type: file.type });\r\n              resizedFiles.push(resizedFile);\r\n              if (files.length === resizedFiles.length) {\r\n                resolve(resizedFiles);\r\n              }\r\n            }, file.type, quality / 100);\r\n          };\r\n          image.src = event.target.result;\r\n        };\r\n        reader.onerror = (error: any) => reject(error);\r\n        reader.readAsDataURL(file);\r\n      }\r\n    });\r\n  } else {\r\n    // No files selected\r\n    return Promise.resolve<File[]>(files);\r\n  }\r\n}\r\n\r\n/**\r\n * DRAW_IMAGE\r\n * @param canvas \r\n * @param image \r\n */\r\nexport const DRAW_IMAGE = (canvas: HTMLCanvasElement, image: ImageBitmap | any) => {\r\n  canvas.width = image.width;\r\n  canvas.height = image.height;\r\n  const ctx = canvas.getContext('2d') as CanvasRenderingContext2D;\r\n  ctx.drawImage(image, 0, 0, canvas.width, canvas.height);\r\n}\r\n\r\n/**\r\n * UPDATE_WIDTH_HEIGHT_VIDEO\r\n * @param video \r\n * @param canvas \r\n */\r\nexport const UPDATE_WIDTH_HEIGHT_VIDEO = (video: HTMLVideoElement, canvas: HTMLCanvasElement): void => {\r\n  canvas.setAttribute('width', video.videoWidth + '');\r\n  canvas.setAttribute('height', video.videoHeight + '');\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { AsyncSubject, of, delay } from 'rxjs';\r\nimport { Human } from 'ngx-scanner-face-human';\r\nimport {\r\n  Result,\r\n  ScannerFaceConfig,\r\n  ScannerFaceResult,\r\n} from './ngx-scanner-face.options';\r\nimport {\r\n  FPS,\r\n  ENV,\r\n  CONFIG,\r\n  DRAW_OPTIONS,\r\n  MEDIASTREAM,\r\n  TIMEOUT_DETECT,\r\n} from './ngx-scanner-face.default';\r\nimport { AS_COMPLETE, COMPRESS_IMAGE_FILE, DRAW_IMAGE } from './ngx-scanner-face.helper';\r\n\r\n@Injectable({\r\n  providedIn: 'root',\r\n})\r\nexport class NgxScannerFaceService {\r\n\r\n  /**\r\n   * Files to base64: ScannerFaceResult[]\r\n   * @param files\r\n   * @param ScannerFaceResult\r\n   * @returns ScannerFaceResult\r\n   */\r\n  public toBase64(files: File[]): AsyncSubject<ScannerFaceResult[]> {\r\n    const result = new AsyncSubject<ScannerFaceResult[]>();\r\n    const data: ScannerFaceResult[] = [];\r\n    if (files?.length) {\r\n      Object.keys(files)?.forEach((file, i) => {\r\n        const url = URL.createObjectURL(files[i]);\r\n        const reader = new FileReader();\r\n        reader.readAsDataURL(files[i]);\r\n        reader.onload = (e) => {\r\n          data.push({\r\n            name: files[i]?.name,\r\n            file: files[i],\r\n            base64: reader?.result as string,\r\n            url: url,\r\n          });\r\n          if (files?.length === i + 1) {\r\n            result.next(data);\r\n            result.complete();\r\n          }\r\n        };\r\n      });\r\n      return result;\r\n    } else {\r\n      result.next([]);\r\n      result.complete();\r\n      return result;\r\n    }\r\n  }\r\n\r\n  /**\r\n   * loadFiles\r\n   * @param files \r\n   * @param baseConfig \r\n   * @param quality \r\n   * @param type \r\n   * @returns \r\n   */\r\n  public loadFiles(files: File[] = [], baseConfig: ScannerFaceConfig, percentage?: number, quality?: number): AsyncSubject<ScannerFaceResult[]> {\r\n    const as = new AsyncSubject<ScannerFaceResult[]>();\r\n    this.overrideConfig(baseConfig);\r\n    COMPRESS_IMAGE_FILE(files, percentage, quality).then((_files: File[]) => {\r\n      Promise.all([..._files].map((m: File) => this.readAsDataURL(m, baseConfig))).then((img: ScannerFaceResult[]) => AS_COMPLETE(as, img)).catch((error: any) => AS_COMPLETE(as, null, error));\r\n    });\r\n    return as;\r\n  }\r\n\r\n  /**\r\n   * readAsDataURL\r\n   * @param file \r\n   * @param baseConfig \r\n   * @returns \r\n   */\r\n  private readAsDataURL(file: File, baseConfig: ScannerFaceConfig): Promise<ScannerFaceResult> {\r\n    /** drawImage **/\r\n    return new Promise((resolve, reject) => {\r\n      let fileReader = new FileReader();\r\n      fileReader.onload = () => {\r\n        // Set the src of this Image object.\r\n        const image = new Image();\r\n        // Setting cross origin value to anonymous\r\n        image.setAttribute('crossOrigin', 'anonymous');\r\n        // Set src\r\n        image.src = URL.createObjectURL(file);\r\n        // When our image has loaded.\r\n        image.onload = async () => {\r\n          // Get the canvas element by using the getElementById method.\r\n          const canvas = document.createElement('canvas');\r\n          // new Human\r\n          let human = new Human(baseConfig.human); // create instance of human with overrides from user configuration\r\n          // draw\r\n          const draw = async () => {\r\n            // main screen refresh loop\r\n            let interpolated = await human.next(human.result); // smoothen result using last-known results\r\n            // Update width heigth folow result human\r\n            image.height = interpolated.height;\r\n            image.width = interpolated.width;\r\n            // Add image into canvas\r\n            DRAW_IMAGE(canvas, image);\r\n            await human.draw.all(canvas, interpolated); // draw labels, boxes, lines, etc.\r\n            canvas.toBlob((blob: any) => {\r\n              resolve({\r\n                ...interpolated,\r\n                name: file?.name,\r\n                file: file,\r\n                url: URL.createObjectURL(blob),\r\n                blob: blob,\r\n              });\r\n            });\r\n          };\r\n          // Detect width and height\r\n          await human.detect(image);\r\n          // Draw all\r\n          of(true).pipe(delay(baseConfig.timeoutDetect || 0)).subscribe(async () => await draw());\r\n        };\r\n      };\r\n      fileReader.onerror = (error: any) => reject(error);\r\n      fileReader.readAsDataURL(file);\r\n    });\r\n  }\r\n\r\n  /**\r\n   * Override Config\r\n   */\r\n  private overrideConfig(baseConfig: ScannerFaceConfig): void {\r\n    const isNull = (field: string) => (baseConfig as any)?.[field] == null || (baseConfig as any)?.[field] == undefined;\r\n    if (isNull('fps')) baseConfig.fps = FPS;\r\n    if (isNull('timeoutDetect')) baseConfig.timeoutDetect = TIMEOUT_DETECT;\r\n    if (isNull('isAuto')) baseConfig.isAuto = false;\r\n    if (isNull('env')) baseConfig.env = ENV;\r\n    if (isNull('draw')) baseConfig.draw = DRAW_OPTIONS;\r\n    if (isNull('human')) baseConfig.human = CONFIG;\r\n    if (isNull('constraints')) baseConfig.constraints = MEDIASTREAM;\r\n  }\r\n\r\n  /**\r\n   * StreamToBase64\r\n   * @param result \r\n   * @returns \r\n   */\r\n  public streamToBase64(result: Result): AsyncSubject<Result> {\r\n    const as = new AsyncSubject<Result>();\r\n    if (result) {\r\n      let canvas = document.createElement('canvas') as HTMLCanvasElement;\r\n      canvas.width = result?.canvas?.width ?? 0;\r\n      canvas.height = result?.canvas?.height ?? 0;\r\n      const H = new Human();\r\n      H.draw.canvas(result.canvas as HTMLCanvasElement, canvas); // draw processed image to screen canvas\r\n      H.draw.all(canvas, result); // draw labels, boxes, lines, etc.\r\n      as.next({ ...result, base64: canvas.toDataURL() });\r\n      as.complete();\r\n    }\r\n    return as;\r\n  }\r\n\r\n  /**\r\n   * StreamToBlobURL\r\n   * @param result \r\n   * @returns \r\n   */\r\n  public streamToBlobURL(result: Result): AsyncSubject<Result> {\r\n    const as = new AsyncSubject<Result>();\r\n    if (result) {\r\n      let canvas = document.createElement('canvas') as HTMLCanvasElement;\r\n      canvas.width = result?.canvas?.width ?? 0;\r\n      canvas.height = result?.canvas?.height ?? 0;\r\n      const H = new Human();\r\n      H.draw.canvas(result.canvas as HTMLCanvasElement, canvas); // draw processed image to screen canvas\r\n      H.draw.all(canvas, result); // draw labels, boxes, lines, etc.\r\n      canvas.toBlob((blob: any) => {\r\n        as.next({ ...result, blobUrl: URL.createObjectURL(blob) });\r\n        as.complete();\r\n      });\r\n    }\r\n    return as;\r\n  }\r\n}\r\n","/**\r\n * @default ngx-scanner-face\r\n * @author <DaiDH>\r\n * @package https://www.npmjs.com/package/ngx-scanner-face\r\n * @license MIT https://github.com/id1945/ngx-scanner-face/blob/master/LICENSE\r\n * @copyright <https://github.com/id1945>\r\n*/\r\n\r\nimport { Component, ElementRef, EventEmitter, OnDestroy, OnInit, ViewChild } from '@angular/core';\r\nimport { Human } from 'ngx-scanner-face-human';\r\nimport { AsyncSubject, BehaviorSubject, delay, of } from 'rxjs';\r\nimport { CONFIG, DRAW_OPTIONS, ENV, FPS, MEDIASTREAM, TIMEOUT_DETECT } from './ngx-scanner-face.default';\r\nimport { AS_COMPLETE, DOWNLOAD, DRAW_IMAGE, OVERRIDES, RESET_CANVAS, UPDATE_WIDTH_HEIGHT_VIDEO } from './ngx-scanner-face.helper';\r\nimport { Config, Device, DrawOptions, Env, Result, ScannerFaceConfig } from './ngx-scanner-face.options';\r\n\r\n@Component({\r\n  selector: 'ngx-scanner-face',\r\n  template: `<canvas #canvas [style]=\"canvasStyle || style\" style=\"position: absolute; width: 100%\"></canvas><video #video playsinline [style]=\"videoStyle || style\" style=\"background-color: #262626; width: 100%\"></video><ng-content></ng-content>`,\r\n  styles: [`:host { position: relative }`],\r\n  inputs: ['src', 'isAuto', 'fps', 'timeoutDetect', 'constraints', 'env', 'draw', 'human', 'config', 'style', 'videoStyle', 'canvasStyle'],\r\n  outputs: ['event'],\r\n  exportAs: 'scanner',\r\n  queries: {\r\n    video: new ViewChild('video', { static: true }),\r\n    canvas: new ViewChild('canvas', { static: true })\r\n  }\r\n})\r\nexport class NgxScannerFaceComponent implements OnInit, OnDestroy {\r\n\r\n  /**\r\n   * Element\r\n   * playsinline required to tell iOS safari we don't want fullscreen\r\n   */\r\n  public video!: ElementRef<HTMLVideoElement>;\r\n  public canvas!: ElementRef<HTMLCanvasElement>;\r\n\r\n  /**\r\n   * EventEmitter\r\n   */\r\n  public event = new EventEmitter<Result>();\r\n\r\n  /**\r\n   * Input\r\n   */\r\n  public src: string = '';\r\n  public isAuto: boolean = false; // Auto start camera.\r\n  public fps: number = FPS; // Frame speed ms/fps.\r\n  public timeoutDetect: number = TIMEOUT_DETECT; // setTimeout 1000ms.\r\n  public constraints: MediaStreamConstraints | any = MEDIASTREAM;\r\n  public env: Partial<Env> = {};\r\n  public draw: Partial<DrawOptions> = {};\r\n  public human: Partial<Config> = {};\r\n  public config: ScannerFaceConfig = {};\r\n  public style: any = null;\r\n  public videoStyle: any = null;\r\n  public canvasStyle: any = null;\r\n\r\n  /**\r\n   * Export\r\n  */\r\n  public isStart: boolean = false;\r\n  public isPause: boolean = false;\r\n  public isLoading: boolean = false;\r\n  public isTorch: boolean = false;\r\n  public data = new BehaviorSubject<Partial<Result>>({});\r\n  public devices = new BehaviorSubject<Device[]>([]);\r\n  public deviceIndexActive: number = 0;\r\n\r\n  private H_OBJ!: Human;\r\n  private detectionLoop: any;\r\n  private drawLoop: any;\r\n  private interpolated!: Result;\r\n\r\n  private STATUS = {\r\n    startON: () => this.isStart = true,\r\n    pauseON: () => this.isPause = true,\r\n    loadingON: () => this.isLoading = true,\r\n    startOFF: () => this.isStart = false,\r\n    pauseOFF: () => this.isPause = false,\r\n    loadingOFF: () => this.isLoading = false,\r\n    torchOFF: () => this.isTorch = false,\r\n  }\r\n\r\n  ngOnInit(): void {\r\n    this.overrideConfig();\r\n    if (this.src) {\r\n      this.loadImage(this.src);\r\n    } else if (this.isAuto) {\r\n      this.start();\r\n    }\r\n  }\r\n\r\n  /**\r\n   * start\r\n   * @param playDeviceCustom \r\n   * @returns \r\n   */\r\n  public start(playDeviceCustom?: Function): AsyncSubject<any> {\r\n    const as = new AsyncSubject<any>();\r\n    if (this.isStart) {\r\n      // Reject\r\n      AS_COMPLETE(as, false);\r\n    } else {\r\n      // fix safari\r\n      this.safariWebRTC(as, playDeviceCustom);\r\n    }\r\n    return as;\r\n  }\r\n\r\n  /**\r\n   * playDevice\r\n   * @param deviceId \r\n   * @param as \r\n   * @returns \r\n   */\r\n  public playDevice(deviceId: string, as: AsyncSubject<any> = new AsyncSubject<any>()): AsyncSubject<any> {\r\n    const existDeviceId = this.isStart ? this.getConstraints().deviceId !== deviceId : true;\r\n    switch (true) {\r\n      case deviceId === 'null' || deviceId === 'undefined' || !deviceId:\r\n        stop();\r\n        this.stop();\r\n        AS_COMPLETE(as, false);\r\n        break;\r\n      case deviceId && existDeviceId:\r\n        stop();\r\n        this.stop();\r\n        // Loading on\r\n        this.STATUS.loadingON();\r\n        this.deviceIndexActive = this.devices.value.findIndex((f: Device) => f.deviceId === deviceId);\r\n        const constraints = { ...this.constraints, audio: false, video: { deviceId: deviceId, ...this.constraints.video } };\r\n        // MediaStream\r\n        const run = async () => {\r\n          try {\r\n            // new Human\r\n            this.H_OBJ = new Human(this.human); // create instance of human with overrides from user configuration\r\n            this.overrideEnv(this.H_OBJ);\r\n            this.overrideDraw(this.H_OBJ);\r\n            // grab instances of dom objects so we dont have to look them up later\r\n            const dom = {\r\n              video: this.video.nativeElement as HTMLVideoElement,\r\n              canvas: this.canvas.nativeElement as HTMLCanvasElement\r\n            };\r\n\r\n            const webCam = async () => { // initialize webcam\r\n              const stream: MediaStream = await navigator.mediaDevices.getUserMedia(constraints);\r\n              const ready = new Promise((resolve) => { dom.video.onloadeddata = () => resolve(true); });\r\n              dom.video.srcObject = stream;\r\n              void dom.video.play();\r\n              await ready;\r\n              dom.canvas.width = dom.video.videoWidth;\r\n              dom.canvas.height = dom.video.videoHeight;\r\n            }\r\n\r\n            this.detectionLoop = async () => { // main detection loop\r\n              if (this.isStart && !this.isPause) {\r\n                await this.H_OBJ.detect(dom.video); // actual detection; were not capturing output in a local variable as it can also be reached via human.result\r\n                setTimeout(async () => await this.detectionLoop(), this.fps);\r\n              }\r\n            }\r\n\r\n            this.drawLoop = async () => { // main screen refresh loop\r\n              if (this.isStart && !this.isPause) {\r\n                this.interpolated = { ...this.H_OBJ.result, canvas2: dom.canvas, base64: '' }; // smoothen result using last-known results\r\n                RESET_CANVAS(dom.canvas);\r\n                // draw only frame\r\n                await this.H_OBJ.draw.all(dom.canvas, this.interpolated); // draw labels, boxes, lines, etc.\r\n                this.interpolated.base64 = dom.canvas.toDataURL();\r\n                this.eventEmit(this.interpolated);\r\n                setTimeout(async () => await this.drawLoop(), this.fps); // use to slow down refresh from max refresh rate to target of 30 fps\r\n              }\r\n            }\r\n\r\n            await this.H_OBJ.warmup(); // warmup function to initialize backend for future faster detection\r\n            await webCam(); // start webcam\r\n            this.STATUS.startON();\r\n            this.STATUS.loadingOFF();\r\n            await this.detectionLoop(); // start detection loop\r\n            await this.drawLoop(); // start draw loop\r\n            AS_COMPLETE(as, true);\r\n          } catch (error: any) {\r\n            this.STATUS.startOFF();\r\n            this.STATUS.loadingOFF();\r\n            this.eventEmit(null);\r\n            AS_COMPLETE(as, false, error);\r\n          }\r\n        }\r\n        run();\r\n        break;\r\n      default:\r\n        AS_COMPLETE(as, false);\r\n        this.STATUS.loadingOFF();\r\n        break;\r\n    }\r\n    return as;\r\n  }\r\n\r\n  /**\r\n   * stop\r\n   * @return AsyncSubject\r\n   */\r\n  public stop(): AsyncSubject<any> {\r\n    this.STATUS.pauseOFF();\r\n    this.STATUS.startOFF();\r\n    this.STATUS.torchOFF();\r\n    this.STATUS.loadingOFF();\r\n    const as = new AsyncSubject<any>();\r\n    try {\r\n      (this.video?.nativeElement?.srcObject as any)?.getTracks()?.forEach((track: any) => {\r\n        track?.stop();\r\n        AS_COMPLETE(as, true);\r\n        DRAW_IMAGE(this.canvas.nativeElement, createImageBitmap(this.video?.nativeElement));\r\n      });\r\n    } catch (error: any) {\r\n      AS_COMPLETE(as, false, error);\r\n    }\r\n    return as;\r\n  }\r\n\r\n  /**\r\n   * play\r\n   * @return AsyncSubject\r\n   */\r\n  public play(): AsyncSubject<any> {\r\n    const as = new AsyncSubject<any>();\r\n    if (this.isPause) {\r\n      this.video?.nativeElement?.play();\r\n      this.STATUS.pauseOFF();\r\n      this.detectionLoop();\r\n      this.drawLoop();\r\n      AS_COMPLETE(as, true);\r\n    } else {\r\n      AS_COMPLETE(as, false);\r\n    }\r\n    return as;\r\n  }\r\n\r\n  /**\r\n   * pause\r\n   * @return AsyncSubject \r\n   */\r\n  public pause(): AsyncSubject<any> {\r\n    const as = new AsyncSubject<any>();\r\n    if (this.isStart) {\r\n      this.video?.nativeElement?.pause();\r\n      this.STATUS.pauseON();\r\n      AS_COMPLETE(as, true);\r\n    } else {\r\n      AS_COMPLETE(as, false);\r\n    }\r\n    return as;\r\n  }\r\n\r\n  /**\r\n   * torcher\r\n   * @returns \r\n   */\r\n  public torcher(): AsyncSubject<any> {\r\n    const as = this.applyConstraints({ advanced: [{ torch: this.isTorch }] });\r\n    as.subscribe(() => false, () => this.isTorch = !this.isTorch);\r\n    return as;\r\n  }\r\n\r\n  /**\r\n   * loadImage\r\n   * @param src \r\n   */\r\n  public loadImage(src: string): AsyncSubject<any> {\r\n    let as = new AsyncSubject<any>();\r\n    // hidden video element\r\n    this.canvas.nativeElement.style.backgroundColor = '#262626';\r\n    this.canvas.nativeElement.style.width = '';\r\n    this.canvas.nativeElement.style.position = '';\r\n    this.canvas.nativeElement.style.maxWidth = '100%';\r\n    this.video.nativeElement.style.display = 'none';\r\n    // Set the src of this Image object.\r\n    const image = new Image();\r\n    // Setting cross origin value to anonymous\r\n    image.setAttribute('crossOrigin', 'anonymous');\r\n    // Set src\r\n    image.src = src;\r\n    // When our image has loaded.\r\n    image.onload = async () => {\r\n      // Loading on\r\n      this.STATUS.startOFF();\r\n      this.STATUS.loadingON();\r\n      // new Human\r\n      let human = new Human(this.human); // create instance of human with overrides from user configuration\r\n      this.overrideEnv(human);\r\n      this.overrideDraw(human);\r\n      // draw\r\n      const draw = async () => { // main screen refresh loop\r\n        // main screen refresh loop\r\n        let interpolated = await human.next(human.result) as Result; // smoothen result using last-known results\r\n        // Update width heigth folow result human\r\n        image.height = interpolated.height;\r\n        image.width = interpolated.width;\r\n        // draw frame on image\r\n        DRAW_IMAGE(this.canvas.nativeElement, image);\r\n        // draw all\r\n        await human.draw.all(this.canvas.nativeElement, interpolated); // draw labels, boxes, lines, etc.\r\n        interpolated.canvas2 = this.canvas.nativeElement;\r\n        interpolated.base64 = this.canvas.nativeElement.toDataURL();\r\n        this.eventEmit(interpolated);\r\n        this.STATUS.startOFF();\r\n        this.STATUS.loadingOFF();\r\n        AS_COMPLETE(as, true);\r\n      }\r\n      // Detect width and height\r\n      await human.detect(image);\r\n      // Draw all\r\n      of(true).pipe(delay(this.timeoutDetect)).subscribe(async () => await draw());\r\n    };\r\n\r\n    // error\r\n    image.onerror = (error: any) => AS_COMPLETE(as, false, error);\r\n\r\n    return as;\r\n  }\r\n\r\n  /**\r\n   * applyConstraints\r\n   * @param constraints \r\n   * @param deviceIndex \r\n   * @returns \r\n   */\r\n  public applyConstraints(constraints: MediaTrackConstraintSet | MediaTrackConstraints | any, deviceIndex = 0): AsyncSubject<any> {\r\n    const as = new AsyncSubject<any>();\r\n    if (this.isStart) {\r\n      const stream = this.video.nativeElement.srcObject as MediaStream;\r\n      if (deviceIndex !== null || deviceIndex !== undefined || !Number.isNaN(deviceIndex)) {\r\n        const videoTrack = stream.getVideoTracks()[deviceIndex] as MediaStreamTrack;\r\n        const imageCapture = new (window as any).ImageCapture(videoTrack);\r\n        imageCapture.getPhotoCapabilities().then(async () => {\r\n          await videoTrack.applyConstraints(constraints);\r\n          const SCALE = setInterval(() => UPDATE_WIDTH_HEIGHT_VIDEO(this.video.nativeElement, this.canvas.nativeElement), 1000);\r\n          setTimeout(() => clearInterval(SCALE), 3000);\r\n          AS_COMPLETE(as, true);\r\n        }).catch((error: any) => {\r\n          switch (error?.name) {\r\n            case 'NotFoundError':\r\n            case 'DevicesNotFoundError':\r\n              AS_COMPLETE(as, false, 'Required track is missing' as string);\r\n              break;\r\n            case 'NotReadableError':\r\n            case 'TrackStartError':\r\n              AS_COMPLETE(as, false, 'Webcam or mic are already in use' as string);\r\n              break;\r\n            case 'OverconstrainedError':\r\n            case 'ConstraintNotSatisfiedError':\r\n              AS_COMPLETE(as, false, 'Constraints can not be satisfied by avb. devices' as string);\r\n              break;\r\n            case 'NotAllowedError':\r\n            case 'PermissionDeniedError':\r\n              AS_COMPLETE(as, false, 'Permission denied in browser' as string);\r\n              break;\r\n            case 'TypeError':\r\n              AS_COMPLETE(as, false, 'Empty constraints object' as string);\r\n              break;\r\n            default:\r\n              AS_COMPLETE(as, false, error as any);\r\n              break;\r\n          }\r\n        });\r\n      } else {\r\n        AS_COMPLETE(as, false, 'Please check again deviceIndex' as string);\r\n      }\r\n    } else {\r\n      AS_COMPLETE(as, false, 'Please start the scanner' as string);\r\n    }\r\n    return as;\r\n  };\r\n\r\n  /**\r\n   * getConstraints\r\n   * @param deviceIndex \r\n   * @returns \r\n   */\r\n  public getConstraints(deviceIndex = 0): MediaTrackConstraintSet | MediaTrackConstraints {\r\n    const stream = this.video.nativeElement.srcObject as MediaStream;\r\n    const videoTrack = stream?.getVideoTracks()[deviceIndex] as MediaStreamTrack;\r\n    return videoTrack?.getConstraints() as MediaTrackConstraints;\r\n  }\r\n\r\n  /**\r\n   * download\r\n   * @param fileName \r\n   * @return AsyncSubject\r\n   */\r\n  public download(fileName: string = `ngx_scanner_face_${Date.now()}.png`): AsyncSubject<Result> {\r\n    const as = new AsyncSubject<Result>();\r\n    const canvas = document.createElement('canvas') as HTMLCanvasElement;\r\n    canvas.width = this.video.nativeElement.videoWidth;\r\n    canvas.height = this.video.nativeElement.videoHeight;\r\n    // draw labels, boxes, lines, etc.\r\n    (async () => {\r\n      // Draw frame on origin element canvas (this.interpolated.canvas is origin)\r\n      await this.H_OBJ.draw.canvas((this.interpolated as any).canvas as HTMLCanvasElement, canvas); // draw processed image to screen canvas\r\n      // draw human\r\n      await this.H_OBJ.draw.all(canvas, this.interpolated);\r\n      // toBlob and emit data\r\n      const dataURL = canvas.toDataURL(`image/${fileName?.split('.')?.slice(-1)?.toString()}`);\r\n      canvas.toBlob((blob: any) => {\r\n        DOWNLOAD(dataURL, fileName);\r\n        AS_COMPLETE(as, {\r\n          ...this.interpolated,\r\n          url: URL.createObjectURL(blob),\r\n          canvas2: canvas,\r\n          base64: dataURL\r\n        });\r\n      });\r\n    })();\r\n    return as;\r\n  }\r\n\r\n  /**\r\n   * Override Config\r\n   */\r\n  private overrideConfig(): void {\r\n    this.fps = this.config?.fps ?? this.fps ?? FPS;\r\n    this.timeoutDetect = this.config?.timeoutDetect ?? this.timeoutDetect ?? TIMEOUT_DETECT;\r\n    this.isAuto = this.config?.isAuto ?? this.isAuto ?? false;\r\n    this.env = OVERRIDES(ENV, this.config?.env ?? this.env) as Partial<Env>;\r\n    this.draw = OVERRIDES(DRAW_OPTIONS, this.config?.draw ?? this.draw) as Partial<DrawOptions>;\r\n    this.human = OVERRIDES(CONFIG, this.config?.human ?? this.human) as Partial<Config>;\r\n    this.constraints = OVERRIDES(MEDIASTREAM, this.config?.constraints ?? this.constraints) as MediaStreamConstraints;\r\n  }\r\n\r\n  /**\r\n   * Override Env\r\n   * @return void\r\n   */\r\n  private overrideEnv(human: Partial<Human>): void {\r\n    // Set env\r\n    for (const key in this.env) {\r\n      (human.env as any)[key] = (this.env as any)[key];\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Override drawOptions\r\n   * @return void\r\n   */\r\n  private overrideDraw(human: Partial<Human>): void {\r\n    // Set drawOptions\r\n    for (const key in this.draw) {\r\n      (human.draw as any).options[key] = (this.draw as any)[key];\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Fix issue on safari\r\n   * https://webrtchacks.com/guide-to-safari-webrtc\r\n   * @param as \r\n   * @param playDeviceCustom \r\n   */\r\n  private safariWebRTC(as: AsyncSubject<any>, playDeviceCustom?: Function): void {\r\n    // Loading on\r\n    this.STATUS.startOFF();\r\n    this.STATUS.loadingON();\r\n    navigator.mediaDevices.getUserMedia(this.constraints).then((stream: MediaStream) => {\r\n      stream.getTracks().forEach(track => track.stop());\r\n      this.loadAllDevices(as, playDeviceCustom);\r\n    }).catch(error => {\r\n      this.STATUS.startOFF();\r\n      this.STATUS.loadingOFF();\r\n      AS_COMPLETE(as, false, error);\r\n    });\r\n  }\r\n\r\n  /**\r\n   * loadAllDevices\r\n   * @param as \r\n   * @param playDeviceCustom \r\n   */\r\n  private loadAllDevices(as: AsyncSubject<any>, playDeviceCustom?: Function): void {\r\n    navigator.mediaDevices.enumerateDevices().then(devices => {\r\n      let cameraDevices: Device[] = devices.filter(f => f.kind == 'videoinput');\r\n      this.devices.next(cameraDevices);\r\n      if (cameraDevices.length > 0) {\r\n        AS_COMPLETE(as, cameraDevices);\r\n        playDeviceCustom ? playDeviceCustom(cameraDevices) : this.playDevice(cameraDevices[0].deviceId);\r\n      } else {\r\n        this.STATUS.startOFF();\r\n        this.STATUS.loadingOFF();\r\n        AS_COMPLETE(as, false, 'No camera detected.' as any);\r\n      }\r\n    }).catch(error => {\r\n      this.STATUS.startOFF();\r\n      this.STATUS.loadingOFF();\r\n      AS_COMPLETE(as, false, error);\r\n    });\r\n  }\r\n\r\n  /**\r\n   * eventEmit\r\n   * @param response \r\n   */\r\n  private eventEmit(response: any = false): void {\r\n    (response !== false) && this.data.next(response ?? null);\r\n    (response !== false) && this.event.emit(response ?? null);\r\n  }\r\n\r\n  ngOnDestroy(): void {\r\n    this.pause();\r\n  }\r\n}\r\n","import {\r\n  Env as H_Env,\r\n  Human as H_Human,\r\n  Config as H_Config,\r\n  Result as H_Result,\r\n  DrawOptions as H_DrawOptions,\r\n  // Config\r\n  FilterConfig as H_FilterConfig,\r\n  GestureConfig as H_GestureConfig,\r\n  FaceConfig as H_FaceConfig,\r\n  BodyConfig as H_BodyConfig,\r\n  HandConfig as H_HandConfig,\r\n  ObjectConfig as H_ObjectConfig,\r\n  SegmentationConfig as H_SegmentationConfig,\r\n  // Result\r\n  FaceResult as H_FaceResult,\r\n  BodyResult as H_BodyResult,\r\n  HandResult as H_HandResult,\r\n  GestureResult as H_GestureResult,\r\n  ObjectResult as H_ObjectResult,\r\n  PersonResult as H_PersonResult,\r\n  // FaceConfig\r\n  FaceDetectorConfig as H_FaceDetectorConfig,\r\n  FaceMeshConfig as H_FaceMeshConfig,\r\n  FaceDescriptionConfig as H_FaceDescriptionConfig,\r\n  FaceEmotionConfig as H_FaceEmotionConfig,\r\n  FaceGearConfig as H_FaceGearConfig,\r\n} from 'ngx-scanner-face-human';\r\n\r\n// Models\r\nexport class Env extends H_Env { }\r\n\r\nexport class Human extends H_Human { }\r\n\r\nexport interface Config extends H_Config { }\r\n\r\nexport interface DrawOptions extends H_DrawOptions { }\r\n\r\nexport interface Result extends H_Result {\r\n  canvas2: HTMLCanvasElement;\r\n  base64: string;\r\n  blobUrl?: string;\r\n}\r\n\r\nexport interface ScannerFaceConfig {\r\n  src?: string;\r\n  isAuto?: boolean;\r\n  isLoading?: boolean;\r\n  fps?: number;\r\n  timeoutDetect?: number;\r\n  env?: Partial<Env>;\r\n  draw?: Partial<DrawOptions>;\r\n  human?: Partial<Config>;\r\n  constraints?: MediaStreamConstraints;\r\n}\r\n\r\nexport interface ScannerFaceResult {\r\n  file?: File;\r\n  name?: string;\r\n  url?: string;\r\n  blob?: any;\r\n  base64?: string;\r\n  result?: Result;\r\n}\r\n\r\nexport interface Device {\r\n  deviceId: string;\r\n  kind: string;\r\n  label: string;\r\n  groupId: string;\r\n}\r\n\r\n// Models in Config \r\n\r\nexport interface FilterConfig extends H_FilterConfig { }\r\n\r\nexport interface GestureConfig extends H_GestureConfig { }\r\n\r\nexport interface FaceConfig extends H_FaceConfig { }\r\n\r\nexport interface BodyConfig extends H_BodyConfig { }\r\n\r\nexport interface HandConfig extends H_HandConfig { }\r\n\r\nexport interface ObjectConfig extends H_ObjectConfig { }\r\n\r\nexport interface SegmentationConfig extends H_SegmentationConfig { }\r\n\r\n// Result\r\n\r\nexport interface FaceResult extends H_FaceResult { }\r\n\r\nexport interface BodyResult extends H_BodyResult { }\r\n\r\nexport interface HandResult extends H_HandResult { }\r\n\r\nexport type GestureResult = H_GestureResult;\r\n\r\nexport interface ObjectResult extends H_ObjectResult { }\r\n\r\nexport interface PersonResult extends H_PersonResult { }\r\n\r\n// Models in FaceConfig\r\n\r\nexport interface FaceDetectorConfig extends H_FaceDetectorConfig { }\r\n\r\nexport interface FaceMeshConfig extends H_FaceMeshConfig { }\r\n\r\nexport interface FaceDescriptionConfig extends H_FaceDescriptionConfig { }\r\n\r\nexport interface FaceEmotionConfig extends H_FaceEmotionConfig { }\r\n\r\nexport interface FaceGearConfig extends H_FaceGearConfig { }","/**\r\n * @default ngx-scanner-face\r\n * @author <DaiDH>\r\n * @package https://www.npmjs.com/package/ngx-scanner-face\r\n * @license MIT https://github.com/id1945/ngx-scanner-face/blob/master/LICENSE\r\n * @copyright <https://github.com/id1945>\r\n*/\r\n\r\nimport { NgModule } from '@angular/core';\r\nimport { NgxScannerFaceComponent } from './ngx-scanner-face.component';\r\n\r\n@NgModule({\r\n  declarations: [\r\n    NgxScannerFaceComponent\r\n  ],\r\n  exports: [\r\n    NgxScannerFaceComponent\r\n  ]\r\n})\r\nexport class NgxScannerFaceModule { }\r\n","/*\r\n * Public API Surface of ngx-scanner-face\r\n */\r\n\r\nexport * from './lib/ngx-scanner-face.service';\r\nexport * from './lib/ngx-scanner-face.component';\r\nexport * from './lib/ngx-scanner-face.options';\r\nexport * from './lib/ngx-scanner-face.module';\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["Human","H_Env","H_Human"],"mappings":"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"}