Newer
Older
// want to wrap one ocv obj, importing async type
const OPENCV_URL = 'libs/opencv.js'
window.cvgo = false
window.cvloading = false
window.cvresolvers = []
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
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
if(window.cvresolvers.length > 0){
for(let res of window.cvresolvers){
res()
}
}
console.error('CVLOAD: failed to load script', err)
reject(err)
})
script.src = OPENCV_URL
let node = document.getElementsByTagName('script')[0]
node.parentNode.insertBefore(script, node)
}
})
}
function getWebcam(w, h) {
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)
})
})
}