Team Ai
Modelpublic

DYNAMAXD/ExplainabilityOnModel

sourceHugging Faceapache-2.0updated 6mo agoView on Hugging Face
0likes10downloads
script.js128 linesDownload Raw Back to static
1document.addEventListener("DOMContentLoaded", () => {2    const uploadArea = document.getElementById("uploadArea");3    const imageInput = document.getElementById("imageInput");4    const imagePreview = document.getElementById("imagePreview");5    const uploadContent = document.querySelector(".upload-content");6    const analyzeBtn = document.getElementById("analyzeBtn");7    const loadingSpinner = document.getElementById("loadingSpinner");8    const resultsContainer = document.getElementById("resultsContainer");9 10    const predClassEl = document.getElementById("predClass");11    const predConfEl = document.getElementById("predConf");12 13    const imgIds = [14        "origImg", "gradcamImg", "gradcamppImg", 15        "scorecamImg", "occlusionImg", "eigencamImg", "layercamImg"16    ];17 18    let currentFile = null;19 20    // Handle Drag & Drop21    uploadArea.addEventListener("dragover", (e) => {22        e.preventDefault();23        uploadArea.classList.add("dragover");24    });25 26    uploadArea.addEventListener("dragleave", () => {27        uploadArea.classList.remove("dragover");28    });29 30    uploadArea.addEventListener("drop", (e) => {31        e.preventDefault();32        uploadArea.classList.remove("dragover");33        if (e.dataTransfer.files && e.dataTransfer.files.length > 0) {34            handleFile(e.dataTransfer.files[0]);35        }36    });37 38    // Handle Click39    uploadArea.addEventListener("click", () => {40        imageInput.click();41    });42 43    imageInput.addEventListener("change", (e) => {44        if (e.target.files && e.target.files.length > 0) {45            handleFile(e.target.files[0]);46        }47    });48 49    function handleFile(file) {50        if (!file.type.startsWith('image/')) {51            alert('Please select a valid image file');52            return;53        }54        currentFile = file;55 56        const reader = new FileReader();57        reader.onload = (e) => {58            imagePreview.src = e.target.result;59            imagePreview.classList.remove("hidden");60            uploadContent.classList.add("hidden");61            analyzeBtn.classList.remove("disabled");62            analyzeBtn.disabled = false;63        };64        reader.readAsDataURL(file);65    }66 67    analyzeBtn.addEventListener("click", async () => {68        if (!currentFile) return;69 70        // UI updates for loading state71        analyzeBtn.disabled = true;72        analyzeBtn.querySelector('span').innerText = 'Analyzing...';73        loadingSpinner.classList.remove("hidden");74        resultsContainer.classList.add("hidden");75 76        const formData = new FormData();77        formData.append("file", currentFile);78 79        try {80            const response = await fetch("/predict", {81                method: "POST",82                body: formData83            });84 85            if (!response.ok) {86                throw new Error(`Server returned ${response.status}: ${response.statusText}`);87            }88 89            const data = await response.json();90            91            // Set Text results92            predClassEl.innerText = data.pred_class;93            predConfEl.innerText = (data.confidence * 100).toFixed(2) + "%";94 95            // Determine if pred_class is normal or tumor for potential dynamic color coding96            if(data.pred_class === "notumor") {97                predClassEl.style.color = "#48bb78"; // Green accent98            } else {99                predClassEl.style.color = "#f56565"; // Red accent (medical alert)100            }101 102            // Set Image results103            document.getElementById("origImg").src = "data:image/jpeg;base64," + data.original_image;104            document.getElementById("gradcamImg").src = "data:image/jpeg;base64," + data.cams.gradcam;105            document.getElementById("gradcamppImg").src = "data:image/jpeg;base64," + data.cams.gradcam_pp;106            document.getElementById("scorecamImg").src = "data:image/jpeg;base64," + data.cams.scorecam;107            document.getElementById("occlusionImg").src = "data:image/jpeg;base64," + data.cams.occlusion;108            document.getElementById("eigencamImg").src = "data:image/jpeg;base64," + data.cams.eigencam;109            document.getElementById("layercamImg").src = "data:image/jpeg;base64," + data.cams.layercam;110 111            // Show results112            resultsContainer.classList.remove("hidden");113 114            // Scroll into view115            resultsContainer.scrollIntoView({ behavior: 'smooth', block: 'start' });116 117        } catch (error) {118            console.error("Error during prediction:", error);119            alert("Error: " + error.message);120        } finally {121            analyzeBtn.disabled = false;122            analyzeBtn.querySelector('span').innerText = 'Generate Analysis';123            loadingSpinner.classList.add("hidden");124        }125    });126 127});128