| const video = document.getElementById("video"); | |
| const canvas = document.getElementById("canvas"); | |
| const ctx = canvas.getContext("2d"); | |
| // Ask for camera access | |
| navigator.mediaDevices.getUserMedia({ video: true }).then(stream => { | |
| video.srcObject = stream; | |
| }); | |
| function sendFrame() { | |
| ctx.drawImage(video, 0, 0, canvas.width, canvas.height); | |
| const dataURL = canvas.toDataURL("image/jpeg"); | |
| fetch("/detect_frame", { | |
| method: "POST", | |
| headers: { "Content-Type": "application/json" }, | |
| body: JSON.stringify({ image: dataURL }) | |
| }) | |
| .then(res => res.json()) | |
| .then(data => { | |
| if(data.image){ | |
| const img = new Image(); | |
| img.src = data.image; | |
| img.onload = () => ctx.drawImage(img, 0, 0, canvas.width, canvas.height); | |
| } | |
| }) | |
| .catch(console.error) | |
| .finally(() => setTimeout(sendFrame, 200)); // ~5 FPS | |
| } | |
| // Start loop after video is ready | |
| video.addEventListener("loadeddata", sendFrame); | |