supernova / templates /index.html
yukiapple323's picture
Update templates/index.html
08c3fe3 verified
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>GluColor-์ƒ‰์œผ๋กœ ๋‹น ์ˆ˜์น˜ ๋ณด๊ธฐ</title>
<link href="https://fonts.googleapis.com/css2?family=Roboto:wght@400;700&display=swap" rel="stylesheet">
<style>
body {
font-family: 'Roboto', sans-serif;
background-color: #f0f2f5;
display: flex;
justify-content: center;
align-items: center;
height: 100vh;
margin: 0;
}
.container {
background: #fff;
padding: 20px;
border-radius: 8px;
box-shadow: 0 4px 8px rgba(0, 0, 0, 0.1);
text-align: center;
max-width: 700px;
width: 100%;
}
h1 {
color: #333;
margin-bottom: 20px;
}
video,
canvas,
img {
border-radius: 8px;
width: 100%;
max-width: 640px;
height: auto;
margin-bottom: 20px;
}
button {
background-color: #4CAF50;
color: white;
padding: 10px 20px;
border: none;
border-radius: 5px;
cursor: pointer;
font-size: 16px;
transition: background-color 0.3s, transform 0.3s;
}
button:hover {
background-color: #45a049;
transform: scale(1.05);
}
.result {
margin-top: 20px;
font-size: 18px;
font-weight: bold;
}
.good {
color: green;
}
.normal {
color: orange;
}
.dangerous {
color: red;
}
</style>
</head>
<body>
<div class="container">
<h1>GluColor-์ƒ‰์œผ๋กœ ๋‹น ์ˆ˜์น˜ ๋ณด๊ธฐ</h1>
<video id="video" autoplay></video>
<button id="snap">Capture</button>
<canvas id="canvas"></canvas>
<p id="analysisResult" class="result"></p>
</div>
<script>
const video = document.getElementById('video');
const canvas = document.getElementById('canvas');
const snap = document.getElementById('snap');
const context = canvas.getContext('2d');
const analysisResult = document.getElementById('analysisResult');
navigator.mediaDevices.getUserMedia({
video: {
facingMode: { exact: "environment" }
}
})
.then(stream => {
video.srcObject = stream;
})
.catch(err => {
console.error("Error accessing webcam: " + err);
});
function processAnalysisResult(result) {
const match = result.match(/\d+/);
if (match) {
const sugarContent = parseInt(match[0], 10);
let message = '';
let className = '';
if (sugarContent >= 0 && sugarContent <= 20) {
message = 'good';
className = 'good';
} else if (sugarContent >= 21 && sugarContent <= 50) {
message = 'normal';
className = 'normal';
} else if (sugarContent >= 51) {
message = 'dangerous';
className = 'dangerous';
}
analysisResult.textContent = message;
analysisResult.className = className;
} else {
analysisResult.textContent = 'Error: ์„ฑ๋ถ„๋ถ„์„ํ‘œ๋ฅผ ํ™•์ธํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.';
analysisResult.className = '';
}
}
snap.addEventListener('click', () => {
context.drawImage(video, 0, 0, canvas.width, canvas.height);
const dataURL = canvas.toDataURL('image/png');
fetch('/save_image', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
},
body: JSON.stringify({ image: dataURL })
}).then(response => response.json())
.then(data => {
if (data.analysis_result) {
processAnalysisResult(data.analysis_result);
} else {
analysisResult.textContent = 'Error: ์„ฑ๋ถ„๋ถ„์„ํ‘œ๋ฅผ ํ™•์ธํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.';
analysisResult.className = '';
}
alert(data.message);
});
});
</script>
</body>
</html>