From a665fb591d5d97a170d393a039aa4eb45846984c Mon Sep 17 00:00:00 2001 From: Justin Georgi Date: Mon, 11 Mar 2024 09:47:26 -0700 Subject: [PATCH] Fix empty detection bug (#135) Closes: #134 Fixes regression in post-processing from #129. Signed-off-by: Justin Georgi Reviewed-on: https://gitea.azgeorgis.net/ALVINN/ALVINN_f7/pulls/135 --- src/pages/detection-mixin.js | 74 ++++++++++++++++++------------------ 1 file changed, 38 insertions(+), 36 deletions(-) diff --git a/src/pages/detection-mixin.js b/src/pages/detection-mixin.js index b361c3a..46eb871 100644 --- a/src/pages/detection-mixin.js +++ b/src/pages/detection-mixin.js @@ -43,48 +43,50 @@ export default { rawBoxes.push(boxCalc) rawScores.push(getScores) } - const tBoxes = tf.tensor2d(rawBoxes) - let tScores = null - let structureScores = null - let boxes_data = [] - let scores_data = [] - let classes_data = [] - for (var c = 0; c < outputSize - 4; c++) { - structureScores = rawScores.map(x => x[c]) - tScores = tf.tensor1d(structureScores) - var validBoxes = await tf.image.nonMaxSuppressionAsync(tBoxes,tScores,10,0.5,.05) - validBoxes = validBoxes.dataSync() - if (validBoxes) { - boxes_data.push(...rawBoxes.filter( (_, idx) => validBoxes.includes(idx))) - var outputScores = structureScores.filter( (_, idx) => validBoxes.includes(idx)) - scores_data.push(...outputScores) - classes_data.push(...outputScores.fill(c)) + + if (rawBoxes.length > 0) { + const tBoxes = tf.tensor2d(rawBoxes) + let tScores = null + let structureScores = null + let boxes_data = [] + let scores_data = [] + let classes_data = [] + for (var c = 0; c < outputSize - 4; c++) { + structureScores = rawScores.map(x => x[c]) + tScores = tf.tensor1d(structureScores) + var validBoxes = await tf.image.nonMaxSuppressionAsync(tBoxes,tScores,10,0.5,.05) + validBoxes = validBoxes.dataSync() + if (validBoxes) { + boxes_data.push(...rawBoxes.filter( (_, idx) => validBoxes.includes(idx))) + var outputScores = structureScores.filter( (_, idx) => validBoxes.includes(idx)) + scores_data.push(...outputScores) + classes_data.push(...outputScores.fill(c)) + } + } + + tf.dispose(tBoxes) + tf.dispose(tScores) + const valid_detections_data = classes_data.length + var output = { + detections: [] + } + for (var i =0; i < valid_detections_data; i++) { + var [dLeft, dTop, dRight, dBottom] = boxes_data[i] + output.detections.push({ + "top": dTop, + "left": dLeft, + "bottom": dBottom, + "right": dRight, + "label": this.detectorLabels[classes_data[i]].name, + "confidence": scores_data[i] * 100 + }) } } - - const valid_detections_data = classes_data.length - var output = { - detections: [] - } - for (var i =0; i < valid_detections_data; i++) { - var [dLeft, dTop, dRight, dBottom] = boxes_data[i] - output.detections.push({ - "top": dTop, - "left": dLeft, - "bottom": dBottom, - "right": dRight, - "label": this.detectorLabels[classes_data[i]].name, - "confidence": scores_data[i] * 100 - }) - } - tf.dispose(res) - tf.dispose(tBoxes) - tf.dispose(tScores) tf.dispose(input) console.timeEnd('post-process') - return output + return output || { detections: [] } }, getRemoteLabels() { var self = this