Spaces:
Sleeping
Sleeping
| <html lang="en"> | |
| <head> | |
| <meta charset="UTF-8"> | |
| <meta name="viewport" content="width=device-width, initial-scale=1.0"> | |
| <title>Camera Capture</title> | |
| <style> | |
| #videoElement { | |
| width: 100%; | |
| height: auto; | |
| } | |
| #camera-controls { | |
| display: flex; | |
| justify-content: space-between; | |
| margin-top: 10px; | |
| } | |
| #capture-button { | |
| margin-top: 10px; | |
| } | |
| </style> | |
| </head> | |
| <body> | |
| <h1>Camera Capture</h1> | |
| <!-- Camera Icon --> | |
| <button id="open-camera-btn" onclick="startCamera()">π·</button> | |
| <!-- Video Capture Element --> | |
| <video id="videoElement" autoplay></video> | |
| <!-- Camera Control Buttons --> | |
| <div id="camera-controls"> | |
| <button id="switch-camera-btn" onclick="switchCamera()">Switch Camera</button> | |
| <button id="capture-button" onclick="captureImage()">Capture</button> | |
| </div> | |
| <!-- Image Display and Action Buttons --> | |
| <div id="captured-image-section" style="display:none;"> | |
| <img id="captured-image" src="" alt="Captured Image" width="100%"> | |
| <button onclick="retakeImage()">Retake</button> | |
| <button onclick="submitImage()">Submit</button> | |
| </div> | |
| <script> | |
| let videoStream; | |
| let currentStream; | |
| let videoElement = document.getElementById('videoElement'); | |
| let capturedImageSection = document.getElementById('captured-image-section'); | |
| let capturedImage = document.getElementById('captured-image'); | |
| function startCamera() { | |
| navigator.mediaDevices.enumerateDevices() | |
| .then(devices => { | |
| devices.forEach(device => { | |
| if (device.kind === 'videoinput') { | |
| currentStream = device.deviceId; | |
| startStream(currentStream); | |
| } | |
| }); | |
| }) | |
| .catch(err => console.error("Error accessing camera:", err)); | |
| } | |
| function startStream(deviceId) { | |
| navigator.mediaDevices.getUserMedia({ | |
| video: { deviceId: { exact: deviceId } } | |
| }) | |
| .then(stream => { | |
| videoElement.srcObject = stream; | |
| videoStream = stream; | |
| }) | |
| .catch(err => console.error("Error accessing stream:", err)); | |
| } | |
| function switchCamera() { | |
| if (videoStream) { | |
| videoStream.getTracks().forEach(track => track.stop()); | |
| } | |
| startCamera(); | |
| } | |
| function captureImage() { | |
| let canvas = document.createElement('canvas'); | |
| canvas.width = videoElement.videoWidth; | |
| canvas.height = videoElement.videoHeight; | |
| canvas.getContext('2d').drawImage(videoElement, 0, 0, canvas.width, canvas.height); | |
| let imageData = canvas.toDataURL('image/jpeg'); | |
| capturedImage.src = imageData; | |
| capturedImageSection.style.display = 'block'; | |
| // Sending the captured image to Flask server | |
| fetch('/capture', { | |
| method: 'POST', | |
| headers: { 'Content-Type': 'application/x-www-form-urlencoded' }, | |
| body: 'image=' + encodeURIComponent(imageData) | |
| }).then(response => response.json()) | |
| .then(data => console.log(data.message)); | |
| } | |
| function retakeImage() { | |
| capturedImageSection.style.display = 'none'; | |
| startCamera(); | |
| } | |
| function submitImage() { | |
| fetch('/post_to_instagram', { | |
| method: 'POST' | |
| }) | |
| .then(response => response.json()) | |
| .then(data => { | |
| alert(data.message); | |
| }); | |
| } | |
| </script> | |
| </body> | |
| </html> | |