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';
    }
});