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); | |
}); | |
} |