From cd6cad9e7323678eb1293ee36301ef0abba77fe6 Mon Sep 17 00:00:00 2001 From: Justin Georgi Date: Tue, 23 Jul 2024 14:18:49 -0700 Subject: [PATCH] Add shared worker structure detection Signed-off-by: Justin Georgi --- src/js/detect-worker.js | 11 ++++++++++- src/pages/detect.vue | 43 ++++++++++++++++++++--------------------- 2 files changed, 31 insertions(+), 23 deletions(-) diff --git a/src/js/detect-worker.js b/src/js/detect-worker.js index 97b154e..da5b4c2 100644 --- a/src/js/detect-worker.js +++ b/src/js/detect-worker.js @@ -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 }) } diff --git a/src/pages/detect.vue b/src/pages/detect.vue index 7520fdc..d901a54 100644 --- a/src/pages/detect.vue +++ b/src/pages/detect.vue @@ -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}`)