Add shared worker structure detection

Signed-off-by: Justin Georgi <justin.georgi@gmail.com>
This commit is contained in:
2024-07-23 14:18:49 -07:00
parent c7622c3602
commit cd6cad9e73
2 changed files with 31 additions and 23 deletions

View File

@@ -15,6 +15,14 @@ self.onconnect = (e) => {
port.postMessage({error: true, message: err.message})
})
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:
console.log('Worker message incoming:')
console.log(e)
@@ -120,7 +128,8 @@ async function localDetect(imageData) {
"left": dLeft,
"bottom": dBottom,
"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
})
}

View File

@@ -221,9 +221,6 @@
console.log(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
}
@@ -232,15 +229,7 @@
this.modelLoading = false
} else {
this.modelLoading = true
console.log('Loading model...')
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') }
},
@@ -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)`
},
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) {
await this.loadModel(this.modelLocation)
this.reloadModel = false
@@ -309,15 +315,8 @@
if (this.serverSettings && this.serverSettings.use) {
this.remoteDetect()
} else {
this.localDetect(this.imageView).then(dets => {
this.detecting = false
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}`)
createImageBitmap(this.imageView).then(imData => {
detectWorker.port.postMessage({call: 'localDetect', image: imData}, [imData])
})
}
},
@@ -464,9 +463,9 @@
* setTimeout is not a good solution, but it's the only way
* I can find to not cut off drawing of the canvas background
******/
setTimeout(() => {
// setTimeout(() => {
this.setData()
}, 1)
// }, 1)
}).catch((e) => {
console.log(e.message)
f7.dialog.alert(`Error loading image: ${e.message}`)