Files
ISISeg/frontend/index.html

223 lines
8.6 KiB
HTML
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<!doctype html>
<html lang="zh-CN">
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<title>ISISeg 导丝分割工作台</title>
<link rel="stylesheet" href="/styles.css" />
</head>
<body>
<main class="app-shell">
<header class="topbar">
<div class="brand">
<span class="brand-mark">IS</span>
<div>
<p class="eyebrow">ISISeg Console</p>
<h1>介入导丝视频分割工作台</h1>
</div>
</div>
<div class="top-actions">
<span class="pill" id="health">服务检查中</span>
<a class="pill link-pill" id="videoLink" hidden>输出视频</a>
</div>
</header>
<section class="workbench">
<form class="control-panel" id="segmentForm">
<section class="panel-section">
<div class="section-title">
<span>01</span>
<h2>输入</h2>
</div>
<label class="drop-zone" id="dropZone" for="file">
<input id="file" name="file" type="file" accept="image/*,video/*" required />
<span class="drop-icon">+</span>
<span class="drop-title">拖拽或选择视频/图像</span>
<span class="drop-subtitle" id="fileName">支持 mp4、avi、png、jpg、tiff</span>
</label>
<div class="input-actions">
<button class="ghost" id="sampleButton" type="button">加载样例</button>
<button class="ghost" id="clearButton" type="button">清空</button>
</div>
</section>
<section class="panel-section">
<div class="section-title">
<span>02</span>
<h2>方法</h2>
</div>
<select class="sr-only" id="method" name="method" aria-label="分割方式"></select>
<div class="method-grid" id="methodGrid"></div>
</section>
<section class="panel-section">
<div class="section-title">
<span>03</span>
<h2>参数</h2>
</div>
<div class="field">
<div class="field-head">
<label for="sensitivity">灵敏度</label>
<output id="sensitivityValue">0.56</output>
</div>
<input id="sensitivity" name="sensitivity" type="range" min="0.05" max="0.95" value="0.56" step="0.01" />
</div>
<div class="compact-grid">
<div class="field">
<label for="frameStride">帧步长</label>
<input id="frameStride" name="frame_stride" type="number" min="1" max="90" value="5" />
</div>
<div class="field">
<label for="maxFrames">最大帧数</label>
<input id="maxFrames" name="max_frames" type="number" min="1" max="80" value="12" />
</div>
</div>
</section>
<button class="primary" type="submit">
<span>运行分割</span>
</button>
<button class="ghost compare-entry" id="controlCompareButton" type="button" disabled>
多方法对比
</button>
</form>
<section class="viewer">
<div class="viewer-split">
<section class="workspace-pane source-pane">
<div class="pane-head">
<div>
<p class="eyebrow">Source Media</p>
<h2 id="sourcePaneTitle">查看原始视频</h2>
</div>
<div class="viewer-actions">
<button class="ghost media-button" id="openSourceButton" type="button" hidden>放大查看</button>
<div class="job-meta" id="jobMeta">等待输入</div>
</div>
</div>
<div class="preview-stage" id="previewStage">
<div class="preview-empty" id="previewEmpty">选择文件或加载样例后开始</div>
<video id="videoPreview" controls muted hidden></video>
<img id="imagePreview" alt="输入图像预览" hidden />
</div>
</section>
<section class="workspace-pane result-pane">
<div class="pane-head">
<div>
<p class="eyebrow">Live Workspace</p>
<h2>预览与结果视频</h2>
</div>
<button class="ghost media-button" id="openCompareButton" type="button" disabled>多方法对比</button>
</div>
<div class="progress-wrap" id="progressWrap" hidden>
<div class="progress-line"><span id="progressBar"></span></div>
<p id="progressText">准备任务</p>
</div>
<div class="result-video-stage">
<div class="preview-empty" id="resultVideoEmpty">运行分割后,这里会显示叠加结果视频。</div>
<video id="resultVideoPreview" controls muted hidden></video>
</div>
</section>
</div>
<section class="workspace-pane frame-browser">
<div class="pane-head">
<div>
<p class="eyebrow">Frame Review</p>
<h2>预览与结果查看</h2>
</div>
<span id="resultCount">0 个结果</span>
</div>
<div class="frame-browser-body">
<div class="summary-strip" id="summaryStrip" hidden>
<div><span>任务</span><strong id="summaryJob">-</strong></div>
<div><span>帧数</span><strong id="summaryFrames">-</strong></div>
<div><span>平均覆盖率</span><strong id="summaryCoverage">-</strong></div>
<div><span>平均骨架</span><strong id="summarySkeleton">-</strong></div>
</div>
<div class="empty" id="emptyState">运行分割后,这里会显示原帧、叠加图、掩膜和指标。</div>
<div class="result-grid" id="resultGrid"></div>
</div>
</section>
</section>
</section>
</main>
<dialog class="detail-dialog" id="detailDialog">
<div class="dialog-head">
<div>
<p class="eyebrow" id="detailMethod">Method</p>
<h2 id="detailTitle">帧详情</h2>
</div>
<button class="icon-button" id="closeDialog" type="button" aria-label="关闭详情">×</button>
</div>
<div class="detail-images">
<figure>
<img id="detailOriginal" alt="原始帧" />
<figcaption>原始帧</figcaption>
</figure>
<figure>
<img id="detailOverlay" alt="叠加结果" />
<figcaption>叠加结果</figcaption>
</figure>
<figure>
<img id="detailMask" alt="导丝掩膜" />
<figcaption>导丝掩膜</figcaption>
</figure>
</div>
<dl class="detail-metrics" id="detailMetrics"></dl>
</dialog>
<dialog class="detail-dialog source-dialog" id="sourceDialog">
<div class="dialog-head">
<div>
<p class="eyebrow">Source Media</p>
<h2 id="sourceTitle">原始视频</h2>
</div>
<button class="icon-button" id="closeSourceDialog" type="button" aria-label="关闭原始媒体">×</button>
</div>
<div class="source-stage">
<video id="sourceVideo" controls hidden></video>
<img id="sourceImage" alt="原始输入图像" hidden />
</div>
</dialog>
<dialog class="detail-dialog compare-dialog" id="compareDialog">
<div class="dialog-head">
<div>
<p class="eyebrow">Method Compare</p>
<h2 id="compareTitle">当前帧多方法对比</h2>
</div>
<button class="icon-button" id="closeCompareDialog" type="button" aria-label="关闭多方法对比">×</button>
</div>
<div class="compare-grid" id="compareGrid"></div>
</dialog>
<template id="resultCardTemplate">
<article class="result-card" tabindex="0">
<div class="card-top">
<span class="method"></span>
<span class="frame-index"></span>
</div>
<figure>
<img class="overlay" alt="导丝叠加结果" />
<figcaption>叠加视图</figcaption>
</figure>
<dl class="metrics">
<div><dt>覆盖率</dt><dd class="coverage"></dd></div>
<div><dt>骨架</dt><dd class="skeleton"></dd></div>
<div><dt>连通域</dt><dd class="components"></dd></div>
</dl>
</article>
</template>
<script src="/app.js"></script>
</body>
</html>