const video = document.getElementById('camera-feed');
const canvas = document.getElementById('captured-image');
const captureBtn = document.getElementById('capture-btn');
const form = document.getElementById('upload-form');
const scanEffect = document.getElementById('scan-effect');
const statusDiv = document.getElementById('status');
// Request camera access with specific constraints
async function startCamera() {
const constraints = {
video: {
width: { ideal: 640 },
height: { ideal: 480 },
facingMode: "user"
}
};
try {
const stream = await navigator.mediaDevices.getUserMedia(constraints);
video.srcObject = stream;
} catch (err) {
console.error("Error accessing camera:", err);
statusDiv.textContent = "Camera access denied. Please check permissions.";
}
}
startCamera();
// Capture image
captureBtn.addEventListener('click', () => {
statusDiv.innerHTML = ' Processing...';
captureBtn.disabled = true;
// Animate scan effect
gsap.to(scanEffect, {
duration: 1,
top: "100%",
opacity: 1,
ease: "power1.inOut",
onComplete: processImage
});
});
function processImage() {
canvas.width = video.videoWidth;
canvas.height = video.videoHeight;
canvas.getContext('2d').drawImage(video, 0, 0, canvas.width, canvas.height);
// Convert canvas to blob and send to server
canvas.toBlob((blob) => {
const formData = new FormData();
formData.append('image', blob, 'captured_image.jpg');
fetch('/get_image', {
method: 'POST',
body: formData
}).then(response => response.json())
.then(data => {
console.log('Image saved:', data.filename);
// You can update the UI here if needed
}).catch(error => {
console.error('Error saving image:', error);
statusDiv.innerHTML = ' Error saving image';
});
}, 'image/jpeg');
// Simulate face recognition process
setTimeout(() => {
statusDiv.innerHTML = ' Welcome, User!';
captureBtn.disabled = false;
}, 2000);
// Reset scan effect
gsap.set(scanEffect, { top: "-100%", opacity: 0 });
}
// Add pulse effect to capture button
gsap.to(captureBtn, { duration: 1, scale: 1.05, repeat: -1, yoyo: true, ease: "power1.inOut" });
// Handle form submission
form.addEventListener('submit', async (e) => {
e.preventDefault();
const formData = new FormData(form);
const userIdInput = document.getElementById('user-id');
const videoInput = document.getElementById('video-upload');
if (!userIdInput || !videoInput || !videoInput.files[0]) {
statusDiv.innerHTML = ' Please provide both user ID and video';
return;
}
formData.append('user_id', userIdInput.value);
formData.append('video', videoInput.files[0]);
// Log FormData contents
for (let [key, value] of formData.entries()) {
console.log(key, value);
}
statusDiv.innerHTML = ' Uploading...';
try {
const response = await fetch('/submitAccount', {
method: 'POST',
body: formData
});
console.log('Response status:', response.status);
console.log('Response headers:', response.headers);
if (!response.ok) {
const errorText = await response.text();
throw new Error(`Server response was not ok: ${response.status} ${response.statusText}\n${errorText}`);
}
const result = await response.json();
statusDiv.innerHTML = ` ${result.message}`;
} catch (error) {
console.error('Error:', error);
statusDiv.innerHTML = ' Error submitting form';
}
});