diff --git a/src/assets/detect-worker.js b/src/assets/detect-worker.js index 9490976..20e4f42 100644 --- a/src/assets/detect-worker.js +++ b/src/assets/detect-worker.js @@ -75,14 +75,18 @@ async function localDetect(imageData) { console.time('sw: post-process') const outputSize = res.shape[1] - let rawBoxes = [] + const output = { + detections: [] + } +let rawBoxes = [] let rawScores = [] + let getScores, getBox, boxCalc - for (var i = 0; i < rawRes.length; i++) { - var getScores = rawRes[i].slice(4) + for (let i = 0; i < rawRes.length; i++) { + getScores = rawRes[i].slice(4) if (getScores.every( s => s < .05)) { continue } - var getBox = rawRes[i].slice(0,4) - var boxCalc = [ + getBox = rawRes[i].slice(0,4) + boxCalc = [ (getBox[0] - (getBox[2] / 2)) / modelWidth, (getBox[1] - (getBox[3] / 2)) / modelHeight, (getBox[0] + (getBox[2] / 2)) / modelWidth, @@ -101,7 +105,7 @@ async function localDetect(imageData) { let boxes_data = [] let scores_data = [] let classes_data = [] - for (var c = 0; c < outputSize - 4; c++) { + for (let c = 0; c < outputSize - 4; c++) { structureScores = rawScores.map(x => x[c]) tScores = tf.tensor1d(structureScores) resBoxes = await tf.image.nonMaxSuppressionAsync(tBoxes,tScores,10,0.5,.05) @@ -109,7 +113,7 @@ async function localDetect(imageData) { tf.dispose(resBoxes) if (validBoxes) { boxes_data.push(...rawBoxes.filter( (_, idx) => validBoxes.includes(idx))) - var outputScores = structureScores.filter( (_, idx) => validBoxes.includes(idx)) + let outputScores = structureScores.filter( (_, idx) => validBoxes.includes(idx)) scores_data.push(...outputScores) classes_data.push(...outputScores.fill(c)) } @@ -120,11 +124,8 @@ async function localDetect(imageData) { tf.dispose(tScores) tf.dispose(tRes) 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] + for (let i =0; i < valid_detections_data; i++) { + let [dLeft, dTop, dRight, dBottom] = boxes_data[i] output.detections.push({ "top": dTop, "left": dLeft, @@ -155,7 +156,7 @@ async function videoFrame (vidData) { const rawRes = tf.transpose(res,[0,2,1]).arraySync()[0] if (rawRes) { - for (var i = 0; i < rawRes.length; i++) { + for (let i = 0; i < rawRes.length; i++) { let getScores = rawRes[i].slice(4) if (getScores.some( s => s > .5)) { let foundTarget = rawRes[i].slice(0,2) diff --git a/src/pages/camera-mixin.js b/src/pages/camera-mixin.js index 2179611..69060c0 100644 --- a/src/pages/camera-mixin.js +++ b/src/pages/camera-mixin.js @@ -58,7 +58,7 @@ export default { }) if (eVid.data.coords) { imageCtx.clearRect(0,0,imCanvas.width,imCanvas.height) - for (var coord of eVid.data.coords) { + for (let coord of eVid.data.coords) { let pointX = (imCanvas.width - imgWidth) / 2 + (coord[0] / eVid.data.modelWidth) * imgWidth - 10 let pointY = (imCanvas.height - imgHeight) / 2 + (coord[1] / eVid.data.modelHeight) * imgHeight - 10 console.debug(`cx: ${pointX}, cy: ${pointY}`) @@ -72,8 +72,7 @@ export default { const imCanvas = this.$refs.image_cvs const imageCtx = imCanvas.getContext("2d") const target = this.$refs.target_image - var imgWidth - var imgHeight + let imgWidth, imgHeight f7.utils.nextFrame(() => { imCanvas.width = imCanvas.clientWidth imCanvas.height = imCanvas.clientHeight diff --git a/src/pages/contact.vue b/src/pages/contact.vue index ed524e9..7c544ad 100644 --- a/src/pages/contact.vue +++ b/src/pages/contact.vue @@ -56,7 +56,7 @@ }, computed: { commentText () { - var text = f7.textEditor.get('.comment-editor').getValue() + let text = f7.textEditor.get('.comment-editor').getValue() if (this.userEmail) { text += `\\n\\nSubmitted by: ${this.userEmail}` } @@ -65,9 +65,9 @@ }, methods: { sendFeedback () { - var self = this - var issueURL = `https://gitea.azgeorgis.net/api/v1/repos/Georgi_Lab/ALVINN_f7/issues?access_token=9af8ae15b1ee5a98afcb3083bb488e4cf3c683af` - var xhr = new XMLHttpRequest() + let self = this + const issueURL = `https://gitea.azgeorgis.net/api/v1/repos/Georgi_Lab/ALVINN_f7/issues?access_token=9af8ae15b1ee5a98afcb3083bb488e4cf3c683af` + let xhr = new XMLHttpRequest() xhr.open("POST", issueURL) xhr.setRequestHeader('Content-Type', 'application/json') xhr.setRequestHeader('accept', 'application/json') diff --git a/src/pages/detect.vue b/src/pages/detect.vue index 5a52b91..0a263dc 100644 --- a/src/pages/detect.vue +++ b/src/pages/detect.vue @@ -227,7 +227,7 @@ classesList = classes this.detectorLabels = classesList.map( l => { return {'name': l, 'detect': true} } ) }) - var loadServerSettings = localStorage.getItem('serverSettings') + const loadServerSettings = localStorage.getItem('serverSettings') if (loadServerSettings) serverSettings = JSON.parse(loadServerSettings) }, mounted () { @@ -284,7 +284,7 @@ } }, showResults () { - var filteredResults = this.resultData.detections + let filteredResults = this.resultData.detections if (!filteredResults) return [] const allSelect = this.detectorLabels.every( s => { return s.detect } ) @@ -419,8 +419,8 @@ this.imageView.src = null this.$refs.image_cvs.style['background-image'] = 'none' this.resultData = {} - var trackDetails = this.cameraStream.getVideoTracks()[0].getSettings() - var vidElement = this.$refs.vid_viewer + const trackDetails = this.cameraStream.getVideoTracks()[0].getSettings() + let vidElement = this.$refs.vid_viewer vidElement.width = trackDetails.width vidElement.height = trackDetails.height if (!this.useWorkers) { @@ -594,7 +594,7 @@ }) }, async submitData () { - var uploadData = this.showResults + let uploadData = this.showResults .filter( d => { return d.aboveThreshold && d.isSearched && !d.isDeleted }) .map( r => { return {"top": r.top, "left": r.left, "bottom": r.bottom, "right": r.right, "label": r.label}}) this.uploadUid = await this.uploadData(this.imageView.src.split(',')[1],uploadData,this.uploadUid) @@ -622,7 +622,7 @@ let clickY = (e.offsetY - this.canvasOffset.y) / this.canvasZoom let boxEnd = boxCoords.splice(0, this.selectedChip) boxCoords = boxCoords.concat(boxEnd) - var findBox = boxCoords.findIndex( (r, i) => { + const findBox = boxCoords.findIndex( (r, i) => { let di = loopIndex(i) if (di == this.selectedChip ) return false return r.left <= clickX && diff --git a/src/pages/detection-mixin.js b/src/pages/detection-mixin.js index a2672fc..4a1b460 100644 --- a/src/pages/detection-mixin.js +++ b/src/pages/detection-mixin.js @@ -46,11 +46,11 @@ export default { let rawBoxes = [] let rawScores = [] - for (var i = 0; i < rawRes.length; i++) { - var getScores = rawRes[i].slice(4) + for (let i = 0; i < rawRes.length; i++) { + const getScores = rawRes[i].slice(4) if (getScores.every( s => s < .05)) { continue } - var getBox = rawRes[i].slice(0,4) - var boxCalc = [ + const getBox = rawRes[i].slice(0,4) + const boxCalc = [ (getBox[0] - (getBox[2] / 2)) / modelWidth, (getBox[1] - (getBox[3] / 2)) / modelHeight, (getBox[0] + (getBox[2] / 2)) / modelWidth, @@ -69,7 +69,7 @@ export default { let boxes_data = [] let scores_data = [] let classes_data = [] - for (var c = 0; c < outputSize - 4; c++) { + for (let c = 0; c < outputSize - 4; c++) { structureScores = rawScores.map(x => x[c]) tScores = tf.tensor1d(structureScores) resBoxes = await tf.image.nonMaxSuppressionAsync(tBoxes,tScores,10,0.5,.05) @@ -77,7 +77,7 @@ export default { tf.dispose(resBoxes) if (validBoxes) { boxes_data.push(...rawBoxes.filter( (_, idx) => validBoxes.includes(idx))) - var outputScores = structureScores.filter( (_, idx) => validBoxes.includes(idx)) + let outputScores = structureScores.filter( (_, idx) => validBoxes.includes(idx)) scores_data.push(...outputScores) classes_data.push(...outputScores.fill(c)) } @@ -88,11 +88,11 @@ export default { tf.dispose(tScores) tf.dispose(tRes) const valid_detections_data = classes_data.length - var output = { + const output = { detections: [] } - for (var i =0; i < valid_detections_data; i++) { - var [dLeft, dTop, dRight, dBottom] = boxes_data[i] + for (let i =0; i < valid_detections_data; i++) { + const [dLeft, dTop, dRight, dBottom] = boxes_data[i] output.detections.push({ "top": dTop, "left": dLeft, @@ -110,9 +110,9 @@ export default { return output || { detections: [] } }, getRemoteLabels() { - var self = this - var modelURL = `http://${this.serverSettings.address}:${this.serverSettings.port}/detectors` - var xhr = new XMLHttpRequest() + let self = this + const modelURL = `http://${this.serverSettings.address}:${this.serverSettings.port}/detectors` + let xhr = new XMLHttpRequest() xhr.open("GET", modelURL) xhr.setRequestHeader('Content-Type', 'application/json') xhr.timeout = 10000 @@ -124,8 +124,8 @@ export default { f7.dialog.alert(`ALVINN has encountered an error: ${errorResponse.error}`) return } - var detectors = JSON.parse(xhr.response).detectors - var findLabel = detectors + const detectors = JSON.parse(xhr.response).detectors + let findLabel = detectors .find( d => { return d.name == self.detectorName } )?.labels .filter( l => { return l != "" } ).sort() .map( l => { return {'name': l, 'detect': true} } ) @@ -139,9 +139,9 @@ export default { xhr.send() }, remoteDetect() { - var self = this - var modelURL = `http://${this.serverSettings.address}:${this.serverSettings.port}/detect` - var xhr = new XMLHttpRequest() + let self = this + const modelURL = `http://${this.serverSettings.address}:${this.serverSettings.port}/detect` + let xhr = new XMLHttpRequest() xhr.open("POST", modelURL) xhr.timeout = 10000 xhr.ontimeout = this.remoteTimeout @@ -158,7 +158,7 @@ export default { self.uploadDirty = true } - var doodsData = { + const doodsData = { "detector_name": this.detectorName, "detect": { "*": 1 @@ -182,8 +182,7 @@ export default { imCanvas.width = imCanvas.clientWidth imCanvas.height = imCanvas.clientHeight imageCtx.clearRect(0,0,imCanvas.width,imCanvas.height) - var imgWidth - var imgHeight + let imgWidth, imgHeight const imgAspect = vidData.width / vidData.height const rendAspect = imCanvas.width / imCanvas.height if (imgAspect >= rendAspect) { @@ -204,7 +203,7 @@ export default { let rawCoords = [] if (rawRes) { - for (var i = 0; i < rawRes.length; i++) { + for (let i = 0; i < rawRes.length; i++) { let getScores = rawRes[i].slice(4) if (getScores.some( s => s > .5)) { let foundTarget = rawRes[i].slice(0,2) @@ -214,7 +213,7 @@ export default { } imageCtx.clearRect(0,0,imCanvas.width,imCanvas.height) - for (var coord of rawCoords) { + for (let coord of rawCoords) { console.log(`x: ${coord[0]}, y: ${coord[1]}`) let pointX = (imCanvas.width - imgWidth) / 2 + (coord[0] / modelWidth) * imgWidth -5 let pointY = (imCanvas.height - imgHeight) / 2 + (coord[1] / modelHeight) * imgHeight -5 diff --git a/src/pages/settings.vue b/src/pages/settings.vue index f14c073..75f0cec 100644 --- a/src/pages/settings.vue +++ b/src/pages/settings.vue @@ -91,7 +91,7 @@ computed: { otherIp () { let filteredIps = {} - for (var oldIp in this.serverSettings.previous) { + for (let oldIp in this.serverSettings.previous) { if (oldIp != this.serverSettings.address) { filteredIps[oldIp] = this.serverSettings.previous[oldIp] } @@ -109,12 +109,12 @@ } }, created () { - var loadServerSettings = localStorage.getItem('serverSettings') + const loadServerSettings = localStorage.getItem('serverSettings') if (loadServerSettings) this.serverSettings = JSON.parse(loadServerSettings) if (!this.serverSettings.previous) this.serverSettings.previous = {} - var loadThemeSettings = localStorage.getItem('themeSettings') + const loadThemeSettings = localStorage.getItem('themeSettings') if (loadThemeSettings) this.themeSettings = JSON.parse(loadThemeSettings) - var loadOtherSettings = localStorage.getItem('otherSettings') + const loadOtherSettings = localStorage.getItem('otherSettings') if (loadOtherSettings) this.otherSettings = JSON.parse(loadOtherSettings) }, methods: { @@ -136,7 +136,7 @@ ) saveSetting.then( () => { - var toast = f7.toast.create({ + const toast = f7.toast.create({ text: 'Settings saved', closeTimeout: 2000 }) @@ -144,7 +144,7 @@ this.isDirty = false; }, () => { - var toast = f7.toast.create({ + const toast = f7.toast.create({ text: 'ERROR: No settings saved', closeTimeout: 2000 }) diff --git a/src/pages/specs.vue b/src/pages/specs.vue index 28a7484..51fd0c0 100644 --- a/src/pages/specs.vue +++ b/src/pages/specs.vue @@ -63,7 +63,7 @@ return store() }, created () { - var loadOtherSettings = localStorage.getItem('otherSettings') + const loadOtherSettings = localStorage.getItem('otherSettings') if (loadOtherSettings) this.otherSettings = JSON.parse(loadOtherSettings) fetch(`${this.isCordova ? 'https://localhost' : '.'}/models/thorax/descript.json`) .then((mod) => { return mod.json() }) diff --git a/src/pages/submit-mixin.js b/src/pages/submit-mixin.js index bc46fd7..8e9519c 100644 --- a/src/pages/submit-mixin.js +++ b/src/pages/submit-mixin.js @@ -5,8 +5,8 @@ export default { newUid (length) { const uidLength = length || 16 const uidChars = 'abcdefghijklmnopqrstuvwxyz0123456789' - var uid = [] - for (var i = 0; i < uidLength; i++) { + let uid = [] + for (let i = 0; i < uidLength; i++) { uid.push(uidChars.charAt(Math.floor(Math.random() * ((i < 4) ? 26 : 36)))) } return uid.join('') @@ -14,24 +14,23 @@ export default { uploadData (imagePayload, classPayload, prevUid) { let uploadImage = new Promise (resolve => { const dataUid = prevUid || this.newUid(16) - var byteChars = window.atob(imagePayload) - var byteArrays = [] - var len = byteChars.length + let byteChars = window.atob(imagePayload) + let byteArrays = [] - for (var offset = 0; offset < len; offset += 1024) { - var slice = byteChars.slice(offset, offset + 1024) - var byteNumbers = new Array(slice.length) - for (var i = 0; i < slice.length; i++) { + for (let offset = 0; offset < byteChars.length; offset += 1024) { + let slice = byteChars.slice(offset, offset + 1024) + let byteNumbers = new Array(slice.length) + for (let i = 0; i < slice.length; i++) { byteNumbers[i] = slice.charCodeAt(i) } - var byteArray = new Uint8Array(byteNumbers) + let byteArray = new Uint8Array(byteNumbers) byteArrays.push(byteArray) } - var imageBlob = new Blob(byteArrays, {type: 'image/jpeg'}) + const imageBlob = new Blob(byteArrays, {type: 'image/jpeg'}) - var xhrJpg = new XMLHttpRequest() - var uploadUrl = `https://nextcloud.azgeorgis.net/public.php/webdav/${dataUid}.jpeg` + let xhrJpg = new XMLHttpRequest() + let uploadUrl = `https://nextcloud.azgeorgis.net/public.php/webdav/${dataUid}.jpeg` xhrJpg.open("PUT", uploadUrl) xhrJpg.setRequestHeader('Content-Type', 'image/jpeg') xhrJpg.setRequestHeader('X-Method-Override', 'PUT') @@ -39,8 +38,8 @@ export default { xhrJpg.setRequestHeader("Authorization", "Basic " + btoa("LKBm3H6JdSaywyg:")) xhrJpg.send(imageBlob) - var xhrTxt = new XMLHttpRequest() - var uploadUrl = `https://nextcloud.azgeorgis.net/public.php/webdav/${dataUid}.txt` + let xhrTxt = new XMLHttpRequest() + uploadUrl = `https://nextcloud.azgeorgis.net/public.php/webdav/${dataUid}.txt` xhrTxt.open("PUT", uploadUrl) xhrTxt.setRequestHeader('Content-Type', 'text/plain') xhrTxt.setRequestHeader('X-Method-Override', 'PUT') @@ -51,7 +50,7 @@ export default { resolve(dataUid) }) return uploadImage.then((newUid) => { - var toast = f7.toast.create({ + const toast = f7.toast.create({ text: 'Detections Uploaded: thank you.', closeTimeout: 2000 })