Add detection worker #187

Merged
jgeorgi merged 4 commits from xps-detect-workers into main 2024-07-25 17:56:21 +00:00
2 changed files with 301 additions and 18 deletions
Showing only changes of commit cd6cad9e73 - Show all commits

View File

@@ -15,6 +15,14 @@ self.onconnect = (e) => {
port.postMessage({error: true, message: err.message}) port.postMessage({error: true, message: err.message})
}) })
break break
case 'localDetect':
localDetect(e.data.image).then((dets) => {
port.postMessage({success: true, detections: dets})
}).catch((err) => {
port.postMessage({error: true, message: err.message})
})
e.data.image.close()
break
default: default:
console.log('Worker message incoming:') console.log('Worker message incoming:')
console.log(e) console.log(e)
@@ -120,7 +128,8 @@ async function localDetect(imageData) {
"left": dLeft, "left": dLeft,
"bottom": dBottom, "bottom": dBottom,
"right": dRight, "right": dRight,
"label": this.detectorLabels[classes_data[i]].name, // "label": this.detectorLabels[classes_data[i]].name,
"label": classes_data[i],
"confidence": scores_data[i] * 100 "confidence": scores_data[i] * 100
}) })
} }

View File

@@ -221,9 +221,6 @@
console.log(eMount.data.message) console.log(eMount.data.message)
f7.dialog.alert(`ALVINN AI model error: ${eMount.data.message}`) f7.dialog.alert(`ALVINN AI model error: ${eMount.data.message}`)
} }
console.log(eMount)
console.log('Model loading complete.')
console.log(self.imageLoadMode)
self.modelLoading = false self.modelLoading = false
} }
@@ -232,15 +229,7 @@
this.modelLoading = false this.modelLoading = false
} else { } else {
this.modelLoading = true this.modelLoading = true
console.log('Loading model...')
mountWorker.port.postMessage({call: 'loadModel', weights: this.modelLocation, preload: true}) mountWorker.port.postMessage({call: 'loadModel', weights: this.modelLocation, preload: true})
// this.loadModel(this.modelLocation, true).then(() => {
// this.modelLoading = false
// }).catch((e) => {
// console.log(e.message)
// f7.dialog.alert(`ALVINN AI model error: ${e.message}`)
// this.modelLoading = false
// })
} }
window.onresize = (e) => { if (this.$refs.image_cvs) this.selectChip('redraw') } window.onresize = (e) => { if (this.$refs.image_cvs) this.selectChip('redraw') }
}, },
@@ -302,6 +291,23 @@
return `--chip-media-gradient: conic-gradient(from ${270 - (confFactor * 360 / 2)}deg, hsl(${confFactor * 120}deg, 100%, 50%) ${confFactor}turn, hsl(${confFactor * 120}deg, 50%, 66%) ${confFactor}turn)` return `--chip-media-gradient: conic-gradient(from ${270 - (confFactor * 360 / 2)}deg, hsl(${confFactor * 120}deg, 100%, 50%) ${confFactor}turn, hsl(${confFactor * 120}deg, 50%, 66%) ${confFactor}turn)`
}, },
async setData () { async setData () {
const detectWorker = new SharedWorker('../js/detect-worker.js',{type: 'module'})
detectWorker.port.onmessage = (eDetect) => {
self = this
if (eDetect.data.error) {
self.detecting = false
self.resultData = {}
f7.dialog.alert(`ALVINN structure finding error: ${eDetect.data.message}`)
} else {
self.detecting = false
self.resultData = eDetect.data.detections
if (self.resultData) {
self.resultData.detections.map(d => {d.label = self.detectorLabels[d.label].name})
}
self.uploadDirty = true
}
}
if (this.reloadModel) { if (this.reloadModel) {
await this.loadModel(this.modelLocation) await this.loadModel(this.modelLocation)
this.reloadModel = false this.reloadModel = false
@@ -309,15 +315,8 @@
if (this.serverSettings && this.serverSettings.use) { if (this.serverSettings && this.serverSettings.use) {
this.remoteDetect() this.remoteDetect()
} else { } else {
this.localDetect(this.imageView).then(dets => { createImageBitmap(this.imageView).then(imData => {
this.detecting = false detectWorker.port.postMessage({call: 'localDetect', image: imData}, [imData])
this.resultData = dets
this.uploadDirty = true
}).catch((e) => {
console.log(e.message)
this.detecting = false
this.resultData = {}
f7.dialog.alert(`ALVINN structure finding error: ${e.message}`)
}) })
} }
}, },
@@ -464,9 +463,9 @@
* setTimeout is not a good solution, but it's the only way * setTimeout is not a good solution, but it's the only way
* I can find to not cut off drawing of the canvas background * I can find to not cut off drawing of the canvas background
******/ ******/
setTimeout(() => { // setTimeout(() => {
this.setData() this.setData()
}, 1) // }, 1)
}).catch((e) => { }).catch((e) => {
console.log(e.message) console.log(e.message)
f7.dialog.alert(`Error loading image: ${e.message}`) f7.dialog.alert(`Error loading image: ${e.message}`)