CoolFace
Apppublic

Shubham9008/leaf_detection_eith_gatekeeper

sourceHugging Facemitupdated 3mo agoView on Hugging Face
0likes
script.js116 linesDownload Raw Back to js
1const dropArea = document.getElementById('drop-area');2const fileElem = document.getElementById('fileElem');3const fileSelectBtn = document.getElementById('fileSelectBtn');4const previewContainer = document.getElementById('preview-container');5const previewImage = document.getElementById('preview-image');6const loading = document.getElementById('loading');7const resultContainer = document.getElementById('result-container');8const predictionText = document.getElementById('prediction-text');9 10// Prevent default drag behaviors11['dragenter', 'dragover', 'dragleave', 'drop'].forEach(eventName => {12    dropArea.addEventListener(eventName, preventDefaults, false);13    document.body.addEventListener(eventName, preventDefaults, false);14});15 16function preventDefaults(e) {17    e.preventDefault();18    e.stopPropagation();19}20 21// Highlight drop area when item is dragged over it22['dragenter', 'dragover'].forEach(eventName => {23    dropArea.addEventListener(eventName, highlight, false);24});25 26['dragleave', 'drop'].forEach(eventName => {27    dropArea.addEventListener(eventName, unhighlight, false);28});29 30function highlight(e) {31    dropArea.classList.add('highlight');32}33 34function unhighlight(e) {35    dropArea.classList.remove('highlight');36}37 38// Handle dropped files39dropArea.addEventListener('drop', handleDrop, false);40 41function handleDrop(e) {42    const dt = e.dataTransfer;43    const files = dt.files;44    handleFiles(files);45}46 47// Handle selected files via button48fileSelectBtn.addEventListener('click', () => {49    fileElem.click();50});51 52function handleFiles(files) {53    if (files.length > 0) {54        const file = files[0];55        if (!file.type.startsWith('image/')) {56            alert('Please upload an image file!');57            return;58        }59        uploadFile(file);60        previewFile(file);61    }62}63 64function previewFile(file) {65    const reader = new FileReader();66    reader.readAsDataURL(file);67    reader.onloadend = function () {68        previewImage.src = reader.result;69        previewContainer.classList.remove('hidden');70        dropArea.classList.add('hidden'); // Optional: hide drop area after upload71    }72}73 74async function uploadFile(file) {75    loading.classList.remove('hidden');76    resultContainer.classList.add('hidden');77 78    let formData = new FormData();79    formData.append('file', file);80 81    try {82        let response = await fetch('/predict', {83            method: 'POST',84            body: formData85        });86 87        if (response.ok) {88            let result = await response.json();89            displayResult(result);90        } else {91            console.error('Error uploading file');92            alert('Error analyzing image. Please try again.');93        }94    } catch (error) {95        console.error('Error:', error);96        alert('Network error. Please check your connection.');97    } finally {98        loading.classList.add('hidden');99    }100}101 102function displayResult(result) {103    resultContainer.classList.remove('hidden');104    // Assuming backend returns { "class": "ClassName", "confidence": 0.99 }105    const percentage = (result.confidence * 100).toFixed(2);106    predictionText.innerText = `${result.class} (${percentage}%)`;107}108 109function resetApp() {110    fileElem.value = ""; // Clear input111    previewImage.src = "";112    previewContainer.classList.add('hidden');113    resultContainer.classList.add('hidden');114    dropArea.classList.remove('hidden');115    predictionText.innerText = "--";116}