Spaces:
Runtime error
Runtime error
File size: 2,838 Bytes
1f082a8 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 | let video = document.getElementById('video');
let canvas = document.getElementById('canvas');
let openCameraBtn = document.getElementById('openCamera');
let captureBtn = document.getElementById('capture');
let toggleCameraBtn = document.getElementById('toggleCamera');
let retakeBtn = document.getElementById('retake');
let uploadBtn = document.getElementById('upload');
let cameraContainer = document.getElementById('cameraContainer');
let previewContainer = document.getElementById('previewContainer');
let messageDiv = document.getElementById('message');
let currentStream = null;
let facingMode = 'user'; // Default to front camera
async function startCamera() {
try {
if (currentStream) {
currentStream.getTracks().forEach(track => track.stop());
}
currentStream = await navigator.mediaDevices.getUserMedia({
video: { facingMode: facingMode }
});
video.srcObject = currentStream;
cameraContainer.style.display = 'block';
openCameraBtn.style.display = 'none';
} catch (err) {
messageDiv.textContent = 'Error accessing camera: ' + err.message;
}
}
function stopCamera() {
if (currentStream) {
currentStream.getTracks().forEach(track => track.stop());
currentStream = null;
}
cameraContainer.style.display = 'none';
openCameraBtn.style.display = 'block';
}
openCameraBtn.addEventListener('click', startCamera);
captureBtn.addEventListener('click', () => {
canvas.width = video.videoWidth;
canvas.height = video.videoHeight;
canvas.getContext('2d').drawImage(video, 0, 0, canvas.width, canvas.height);
previewContainer.style.display = 'block';
cameraContainer.style.display = 'none';
stopCamera();
});
toggleCameraBtn.addEventListener('click', () => {
facingMode = facingMode === 'user' ? 'environment' : 'user';
startCamera();
});
retakeBtn.addEventListener('click', () => {
previewContainer.style.display = 'none';
startCamera();
});
uploadBtn.addEventListener('click', async () => {
const imageData = canvas.toDataURL('image/jpeg');
try {
const response = await fetch('/upload', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({ image: imageData })
});
const result = await response.json();
messageDiv.textContent = result.message;
if (result.status === 'success') {
messageDiv.style.color = 'green';
previewContainer.style.display = 'none';
openCameraBtn.style.display = 'block';
} else {
messageDiv.style.color = 'red';
}
} catch (err) {
messageDiv.textContent = 'Error uploading image: ' + err.message;
messageDiv.style.color = 'red';
}
}); |