diff --git a/public/app.js b/public/app.js
index 8140253..c902466 100644
--- a/public/app.js
+++ b/public/app.js
@@ -277,6 +277,10 @@ document.addEventListener('DOMContentLoaded', () => {
const bboxContainerEl = document.getElementById("bbox-container");
const modelContainerEl = document.getElementById("current-model-container");
+ // [추가] 오버레이 표시용 요소
+ const modelDisplayEl = document.getElementById("current-model-display");
+ const fpsDisplayEl = document.getElementById("fps-display");
+
// [추가] 클래스별 색상 팔레트 (원하는 색상으로 수정 가능)
const CLASS_COLORS = [
'#FF3838', // 0: Red
@@ -289,6 +293,10 @@ document.addEventListener('DOMContentLoaded', () => {
'#FFFFFF' // 7: White
];
+ // [추가] FPS 계산용 변수
+ let frameCount = 0;
+ let lastFpsCheckTime = performance.now();
+
let lastFrameMeta = null;
if (imgEl && statusEl && frameInfoEl && detListEl && bboxContainerEl && modelContainerEl) {
@@ -296,6 +304,9 @@ document.addEventListener('DOMContentLoaded', () => {
// 모델 변경 이벤트 리스너
modelContainerEl.addEventListener('change', (event) => {
if (event.target && event.target.name === 'current-model') {
+ // [추가] 모델 이름 즉시 업데이트
+ updateModelDisplay();
+
const selectedModel = event.target.value;
console.log(`Model changed to: ${selectedModel}`);
@@ -345,6 +356,25 @@ document.addEventListener('DOMContentLoaded', () => {
` | FRAME ch=${meta.ch} ts=${meta.ts_us} w=${meta.w} h=${meta.h}`;
}
+ // [추가] 선택된 AI 모델 이름을 상단 우측에 표시하는 함수
+ function updateModelDisplay() {
+ if (!modelContainerEl || !modelDisplayEl) return;
+
+ // 현재 선택된 라디오 버튼을 찾습니다.
+ const checkedRadio = modelContainerEl.querySelector('input[name="current-model"]:checked');
+ if (checkedRadio) {
+ // 해당 라디오 버튼의 ID로 label을 찾습니다.
+ const label = modelContainerEl.querySelector(`label[for="${checkedRadio.id}"]`);
+ if (label) {
+ modelDisplayEl.textContent = label.textContent; // "군중 위험 인식"
+ } else {
+ modelDisplayEl.textContent = checkedRadio.value; // "CROWD" (대체)
+ }
+ } else {
+ modelDisplayEl.textContent = "모델 선택 안됨";
+ }
+ }
+
// Detections 표시 함수 (수정됨)
function showDetections(meta) {
const items = meta.items || [];
@@ -487,12 +517,27 @@ document.addEventListener('DOMContentLoaded', () => {
imgEl.onload = () => {
URL.revokeObjectURL(url);
updateBboxContainerPosition();
+
+ // [추가] FPS 계산
+ frameCount++;
+ const now = performance.now();
+ const delta = now - lastFpsCheckTime;
+
+ if (delta >= 1000 && fpsDisplayEl) { // 1초마다 업데이트
+ const fps = (frameCount * 1000) / delta;
+ fpsDisplayEl.textContent = `${Math.round(fps)} FPS`;
+ frameCount = 0;
+ lastFpsCheckTime = now;
+ }
};
imgEl.src = url;
}
};
}
+ // [추가] 초기 모델 이름 설정
+ updateModelDisplay();
+
// WebSocket 연결 시작
connect();
diff --git a/public/dashboard.html b/public/dashboard.html
index e9c0778..bd139f4 100644
--- a/public/dashboard.html
+++ b/public/dashboard.html
@@ -30,6 +30,10 @@
연결 시도 중...
+
+
+
+