Files
yolo/frontend/index.html

91 lines
3.6 KiB
HTML

<!doctype html>
<html lang="zh-CN">
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<title>烟火视频检测</title>
<link rel="stylesheet" href="./styles.css" />
</head>
<body>
<main class="app-shell">
<header class="topbar">
<div>
<p class="eyebrow">YOLO11S / VIDEO DETECTION</p>
<h1>烟火视频检测</h1>
</div>
<span id="connectionStatus" class="status-pill status-idle">正在检查服务</span>
</header>
<section class="workspace">
<div class="stage-panel">
<div class="panel-heading">
<div>
<p class="eyebrow">VIDEO VIEW</p>
<h2>检测画面</h2>
</div>
<span id="sourceLabel" class="muted">等待选择视频</span>
</div>
<div class="media-stage">
<video id="videoPreview" controls muted playsinline hidden></video>
<div id="emptyState" class="empty-state">
<div class="empty-icon">+</div>
<strong>选择本地视频开始检测</strong>
<span>视频仅在浏览器本地播放,发送的是抽取帧</span>
</div>
<canvas id="overlayCanvas" aria-hidden="true"></canvas>
<div id="loadingState" class="loading-state" hidden>正在分析视频帧...</div>
</div>
<div class="stage-footer">
<span id="lastUpdated">尚未检测</span>
<button id="runDetectionButton" class="button button-primary" type="button" disabled>开始连续检测</button>
</div>
</div>
<aside class="control-panel">
<div class="panel-heading">
<div>
<p class="eyebrow">INPUT</p>
<h2>视频源</h2>
</div>
</div>
<div class="control-stack">
<label class="upload-control">
<span class="button button-secondary">选择视频</span>
<input id="videoInput" type="file" accept="video/*" />
<small>支持浏览器可播放的 MP4、WebM 等格式</small>
</label>
<label class="setting-row">
<span>检测间隔</span>
<select id="intervalSelect">
<option value="500">0.5 秒</option>
<option value="1000" selected>1 秒</option>
<option value="2000">2 秒</option>
</select>
</label>
<button id="clearButton" class="button button-quiet" type="button">清除视频</button>
</div>
<div class="divider"></div>
<div class="panel-heading compact-heading">
<div>
<p class="eyebrow">RESULTS</p>
<h2>检测摘要</h2>
</div>
</div>
<div class="metrics-grid">
<div class="metric-card"><span>烟雾</span><strong id="smokeCount">0</strong></div>
<div class="metric-card"><span>火焰</span><strong id="fireCount">0</strong></div>
<div class="metric-card"><span>最高置信度</span><strong id="maxConfidence">--</strong></div>
<div class="metric-card"><span>状态</span><strong id="riskStatus">待机</strong></div>
</div>
<div id="alertStatus" class="alert-status">机器人告警状态:检查中</div>
<div id="detectionList" class="detection-list">
<p class="muted">暂无检测结果</p>
</div>
</aside>
</section>
</main>
<script src="./app.js" type="module"></script>
</body>
</html>