Afnaan04's picture
Deploy project using Hugging Face API
3aa726a verified
Raw
History Blame Contribute Delete
4.24 kB
document.addEventListener('DOMContentLoaded', () => {
const dropZone = document.getElementById('drop-zone');
const fileInput = document.getElementById('file-input');
const browseBtn = document.getElementById('browse-btn');
const previewContainer = document.getElementById('preview-container');
const uploadContent = document.querySelector('.upload-content');
const imagePreview = document.getElementById('image-preview');
const classifyBtn = document.getElementById('classify-btn');
const resultSection = document.getElementById('result-section');
const resultContent = document.getElementById('result-content');
const loader = document.getElementById('loader');
const predictionText = document.getElementById('prediction-text');
const confidenceText = document.getElementById('confidence-text');
const confidenceBar = document.getElementById('confidence-bar');
const resetBtn = document.getElementById('reset-btn');
let selectedFile = null;
// Trigger file input
browseBtn.addEventListener('click', (e) => {
e.stopPropagation();
fileInput.click();
});
dropZone.addEventListener('click', () => {
if (!selectedFile) fileInput.click();
});
// Handle drag & drop
dropZone.addEventListener('dragover', (e) => {
e.preventDefault();
dropZone.style.borderColor = 'var(--primary)';
});
dropZone.addEventListener('dragleave', () => {
dropZone.style.borderColor = 'var(--glass-border)';
});
dropZone.addEventListener('drop', (e) => {
e.preventDefault();
dropZone.style.borderColor = 'var(--glass-border)';
if (e.dataTransfer.files.length) {
handleFiles(e.dataTransfer.files[0]);
}
});
fileInput.addEventListener('change', (e) => {
if (e.target.files.length) {
handleFiles(e.target.files[0]);
}
});
function handleFiles(file) {
if (!file.type.startsWith('image/')) {
alert('Please upload an image file');
return;
}
selectedFile = file;
const reader = new FileReader();
reader.onload = (e) => {
imagePreview.src = e.target.result;
uploadContent.classList.add('hidden');
previewContainer.classList.remove('hidden');
};
reader.readAsDataURL(file);
}
// Classification Request
classifyBtn.addEventListener('click', async () => {
if (!selectedFile) return;
resultSection.classList.remove('hidden');
resultContent.classList.add('hidden');
loader.classList.remove('hidden');
// Scroll to result
resultSection.scrollIntoView({ behavior: 'smooth' });
const formData = new FormData();
formData.append('file', selectedFile);
try {
const response = await fetch('/predict', {
method: 'POST',
body: formData
});
const result = await response.json();
if (response.ok) {
showResult(result.class, result.confidence);
} else {
alert('Error: ' + result.error);
resetUI();
}
} catch (error) {
console.error('Error:', error);
alert('Server error, check console');
resetUI();
}
});
function showResult(prediction, confidence) {
loader.classList.add('hidden');
resultContent.classList.remove('hidden');
predictionText.textContent = prediction;
confidenceText.textContent = confidence;
// Animate bar
setTimeout(() => {
confidenceBar.style.width = confidence;
}, 100);
}
resetBtn.addEventListener('click', resetUI);
function resetUI() {
selectedFile = null;
fileInput.value = '';
uploadContent.classList.remove('hidden');
previewContainer.classList.add('hidden');
resultSection.classList.add('hidden');
confidenceBar.style.width = '0%';
}
});