Spaces:
Runtime error
Runtime error
| let model; | |
| const chooseFiles = document.getElementById('chooseFiles'); | |
| const modelNameSelect = document.getElementById("modelNameSelect"); | |
| const segmentImageButton = document.getElementById("segmentImage"); | |
| const legendsDiv = document.getElementById("legends"); | |
| const image = document.getElementById('image'); | |
| const canvas = document.getElementById('canvas'); | |
| const ctx = canvas.getContext('2d'); | |
| chooseFiles.onchange = () => { | |
| const [file] = chooseFiles.files | |
| if (file) { | |
| image.src = URL.createObjectURL(file); | |
| } | |
| }; | |
| segmentImageButton.onclick = predict; | |
| document.getElementById("loadModel").onclick = async () => { | |
| segmentImageButton.disabled = true; | |
| updateModelLoadStatus("Model Loading..."); | |
| const modelName = modelNameSelect.options[modelNameSelect.selectedIndex].value; | |
| await loadModel(modelName); | |
| updateModelLoadStatus(modelName + " model loaded!"); | |
| segmentImageButton.disabled = false; | |
| }; | |
| async function loadModel(modelName) { | |
| model = await deeplab.load({ "base": modelName, "quantizationBytes": 2 }); | |
| } | |
| function updateModelLoadStatus(status) { | |
| document.getElementById("modelLoadedStatus").innerHTML = status; | |
| } | |
| async function predict() { | |
| let prediction = await model.segment(image); | |
| renderPrediction(prediction); | |
| } | |
| function renderPrediction(prediction) { | |
| const { legend, height, width, segmentationMap } = prediction; | |
| //console.log(`prediction: ${JSON.stringify(prediction)}`); | |
| const segmentationMapData = new ImageData(segmentationMap, width, height); | |
| console.log(segmentationMapData) | |
| canvas.width = width; | |
| canvas.height = height; | |
| ctx.putImageData(segmentationMapData, 0, 0); | |
| displayLegends(legend); | |
| } | |
| function displayLegends(legendObj) { | |
| legendsDiv.innerHTML = ""; | |
| document.getElementById("legendLabel").style.visibility = "visible"; | |
| Object.keys(legendObj).forEach((legend) => { | |
| const [red, green, blue] = legendObj[legend]; | |
| const span = document.createElement('span'); | |
| span.innerHTML = legend; | |
| span.style.backgroundColor = `rgb(${red}, ${green}, ${blue})`; | |
| span.style.padding = '10px'; | |
| span.style.marginRight = '10px'; | |
| span.style.color = '#ffffff'; | |
| legendsDiv.appendChild(span); | |
| }); | |
| } |