|
<!DOCTYPE html> |
|
<html> |
|
<head> |
|
<title>YOLOv8 Object Detection</title> |
|
</head> |
|
<body> |
|
<h1>Webcam Object Detection with YOLOv8</h1> |
|
<video id="video" width="640" height="480" autoplay></video> |
|
<canvas id="canvas" style="display:none;"></canvas> |
|
<br> |
|
<img id="output" width="640" height="480" /> |
|
|
|
<script> |
|
const video = document.getElementById('video'); |
|
const canvas = document.getElementById('canvas'); |
|
const ctx = canvas.getContext('2d'); |
|
const output = document.getElementById('output'); |
|
|
|
|
|
navigator.mediaDevices.getUserMedia({ video: true }).then(stream => { |
|
video.srcObject = stream; |
|
}); |
|
|
|
|
|
setInterval(() => { |
|
canvas.width = video.videoWidth; |
|
canvas.height = video.videoHeight; |
|
|
|
|
|
ctx.save(); |
|
ctx.scale(-1, 1); |
|
ctx.drawImage(video, -canvas.width, 0, canvas.width, canvas.height); |
|
ctx.restore(); |
|
|
|
const dataURL = canvas.toDataURL('image/jpeg'); |
|
|
|
fetch('/upload_frame', { |
|
method: 'POST', |
|
headers: { 'Content-Type': 'application/json' }, |
|
body: JSON.stringify({ image: dataURL }) |
|
}) |
|
.then(response => response.json()) |
|
.then(data => { |
|
if (data.image) { |
|
output.src = data.image; |
|
} |
|
}); |
|
}, 1000); |
|
</script> |
|
</body> |
|
</html> |
|
|