Skip to content
Snippets Groups Projects
opencvwrap.js 1.97 KiB
Newer Older
  • Learn to ignore specific revisions
  • Jake Read's avatar
    Jake Read committed
    // want to wrap one ocv obj, importing async type
    
    const OPENCV_URL = 'libs/opencv.js'
    
    
    window.cvgo = false
    window.cvloading = false
    window.cvresolvers = []
    
    
    Jake Read's avatar
    Jake Read committed
    function loadOpenCv() {
      return new Promise((resolve, reject) => {
    
        console.log('CVLOAD: begin', window.cvgo, window.cvloading, window.cvresolvers.length)
        if (window.cvgo && !window.cvloading && cv) {
          console.log('CVLOAD: here already')
          resolve()
        } else if (window.cvloading) {
          console.log('CVLOAD: already loading, adding to resolve')
          window.cvresolvers.push(resolve)
        } else {
          console.log('CVLOAD: loading cv, ok')
          window.cvloading = true
    
    Jake Read's avatar
    Jake Read committed
          let script = document.createElement('script')
          script.setAttribute('async', '')
          script.setAttribute('type', 'text/javascript')
          script.addEventListener('load', () => {
            // ocv drops 'cv' in to toplevel documeeeent yikes
            // let's see if we can just stash this local copy,
            // and shell it out ...
    
            console.log('CVLOAD: loaded')
            window.cvgo = true
            window.cvloading = false
    
    Jake Read's avatar
    Jake Read committed
            resolve()
    
            if(window.cvresolvers.length > 0){
              for(let res of window.cvresolvers){
                res()
              }
            }
    
    Jake Read's avatar
    Jake Read committed
          })
          script.addEventListener('error', (err) => {
    
            console.error('CVLOAD: failed to load script', err)
    
    Jake Read's avatar
    Jake Read committed
            reject(err)
          })
          script.src = OPENCV_URL
          let node = document.getElementsByTagName('script')[0]
          node.parentNode.insertBefore(script, node)
        }
      })
    }
    
    
    function getWebcam(w, h) {
    
    Jake Read's avatar
    Jake Read committed
      return new Promise((resolve, reject) => {
        let video = document.createElement('video')
        video.width = w
        video.height = h
        navigator.mediaDevices.getUserMedia({
          video: true,
          audio: false
        }).then((stream) => {
          video.srcObject = stream
          video.play()
          resolve(video)
        }).catch((err) => {
          console.error('cannot get webcam', err)
          reject(err)
        })
      })
    }