ToothpasteLake commited on
Commit
0858d1b
·
verified ·
1 Parent(s): 787c151

update index.html

Browse files
Files changed (1) hide show
  1. index.html +77 -34
index.html CHANGED
@@ -3,7 +3,7 @@
3
  <head>
4
  <meta charset="utf-8">
5
  <meta name="viewport" content="width=device-width, initial-scale=1">
6
- <title>录匣 Offlisten — 离线会议转写</title>
7
  <style>
8
  :root {
9
  --bg: #23272c;
@@ -14,6 +14,7 @@
14
  --accent: #f5c542;
15
  }
16
  * { box-sizing: border-box; }
 
17
  body {
18
  margin: 0;
19
  background: var(--bg);
@@ -38,9 +39,9 @@
38
  th { background: var(--panel); font-weight: 600; color: var(--dim); white-space: nowrap; }
39
  tr:last-child td { border-bottom: 0; }
40
  td.num { font-variant-numeric: tabular-nums; white-space: nowrap; }
41
- td.out { font-size: 13px; color: #d4d9de; }
42
- th .thsub { font-weight: 400; font-size: 11px; color: var(--dim); }
43
- td .rng { font-size: 11px; color: var(--dim); font-weight: 400; }
44
  video { width: 100%; border: 1px solid var(--line); border-radius: 8px; background: #000; display: block; }
45
  .videohint {
46
  border: 1px dashed var(--line); border-radius: 8px; padding: 28px 20px;
@@ -50,11 +51,18 @@
50
  h3 { font-size: 15px; margin: 26px 0 10px; font-weight: 600; color: var(--dim); }
51
  blockquote {
52
  margin: 0 0 14px; padding: 10px 14px; border-left: 2px solid var(--accent);
53
- background: var(--panel); color: #c9d1d8; font-size: 14px; line-height: 1.7;
54
  }
55
  footer { margin-top: 56px; padding-top: 20px; border-top: 1px solid var(--line); color: var(--dim); font-size: 13px; }
56
  ul { padding-left: 20px; margin: 0 0 14px; }
57
  li { margin-bottom: 6px; }
 
 
 
 
 
 
 
58
  </style>
59
  </head>
60
  <body>
@@ -66,13 +74,13 @@
66
  </header>
67
 
68
  <p class="lead">
69
- 不到一台轻薄本的价钱就能买到的算力,正在替你写会议记录——只要不联网。
70
  <strong>没有账号,没有云端,拔掉网线它还在写。</strong>
71
  </p>
72
 
73
  <p>
74
- 这个页面不放可交互 demo:转写要在服务端跑 229 MiB 的模型,而这东西的主场在你自己的电脑上。
75
- 下面是同一份模型(SenseVoice int8,2 个 CPU 线程)的真实输出,你可以先看效果,再决定要不要装。
76
  </p>
77
 
78
  <h2>五个语种,同一份模型</h2>
@@ -93,15 +101,14 @@
93
  </div>
94
 
95
  <p class="note" style="margin-top:12px">
96
- 点语种名可以直接听那段音频——五段都在
97
  <a href="https://huggingface.co/ToothpasteLake/offlisten-models/tree/main/test_wavs">模型仓库的 test_wavs/</a>,
98
- 和模型一样可下载。转写耗时是 2 个 CPU 线程的中位数,括号里是五轮的极值。
99
  <br>
100
- <b>一行精确到三位小数的 RTF 是噪声,不是一个值得炫耀的指标。</b>同一段音频连跑五次能落在 0.077–0.117 之间,
101
- 所以上表只能读出一件事:处理速度大约是实时的十倍。要当真 benchmark 用,得固定机器、关掉后台、多轮取分布。
102
  <br>
103
- 一处如实标注:同一段中文,官方示例作「<b>开放</b>时间」,int8 量化下这里是「<b>开饭</b>时间」——
104
- 我们把它留在表里,而不是挑一条好看的。
105
  </p>
106
 
107
  <h2>演示</h2>
@@ -110,41 +117,41 @@
110
  <p class="videohint" id="demo-hint">演示视频加载中;若浏览器不支持 mp4,可直接<a href="./demo.mp4">下载观看</a>。</p>
111
 
112
  <p class="note">
113
- 这 42 秒里没有写好的台词:五段音频先被模型听,听完才落字,和产品里一样按停顿切段。
114
- 界面是产品的本地文本页,以纯回放模式启动,所以控制区显示「只读文本页」——正常桌面运行时那里是开始/暂停。
115
- 视频里出现的每个字节都只走过 <code>127.0.0.1</code>。
116
  </p>
117
 
118
  <h2>接上本地的 AI</h2>
119
 
120
  <p>
121
- 录匣只做一件事:把声音变成文字。总结、追问、翻译交给谁写,由你决定——只要那个「谁」也在这台机器上。
122
- 下面这段 46 秒没有音轨,因为它要证明的是另一件事。
123
  </p>
124
 
125
  <video controls preload="metadata" src="./use-with-browser-ai.mp4"></video>
126
 
127
  <p class="note" style="margin-top:12px">
128
  左边是录匣的本地文本页,右边是浏览器里的 Page Assist,接着一个跑在 Ollama 上的 <code>qwen2.5:0.5b</code>。
129
- 勾选 <b>Chat with current page</b> 之后,插件读的是这个页面本身——不是云端接口,也不是把文字复制到别处再粘贴回来。
130
  </p>
131
 
132
- <h3>这不是外挂,是产品里写好的出口</h3>
133
 
134
- <p>本地文本页上那行提示,就是为这件事留的:</p>
135
 
136
  <blockquote>
137
  文本来自本机离线 ASR,只在 127.0.0.1 上传输。本页不调用任何模型,也不持有 apikey。
138
  要交给 AI 处理,就复制全文,或让你浏览器里已有的 AI 插件读取本页。
139
  </blockquote>
140
 
141
- <p>视频里三个部件都在同一台机器上,链路中没有一处需要出网:</p>
142
 
143
  <div class="tablewrap">
144
  <table>
145
  <thead><tr><th>部件</th><th>作用</th><th>跑在哪</th></tr></thead>
146
  <tbody>
147
- <tr><td>SenseVoice int8</td><td>声音 → 带标点文字</td><td class="out">本机进程,229 MiB 随安装包落盘</td></tr>
148
  <tr><td>Page Assist</td><td>把当前页内容放进提示词</td><td class="out">浏览器扩展</td></tr>
149
  <tr><td>Ollama + qwen2.5:0.5b</td><td>读文字,给回答</td><td class="out">本机进程,监听 127.0.0.1:11434</td></tr>
150
  </tbody>
@@ -152,25 +159,61 @@
152
  </div>
153
 
154
  <p class="note" style="margin-top:12px">
155
- 两句实话:一是 <code>0.5b</code> 只有五亿参数,回答质量按小模型的标准看,别拿它和云端大模型比;
156
- 二是视频里它用英文作答,因为页面上并排摆着中文原文和 Argos 译文,模型看到的是双语文本。
157
- 想让回答更稳,就在插件里限定「只依据中文原文回答」。
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
158
  </p>
159
 
160
- <h2>它和云端转写的区别</h2>
161
  <ul>
162
- <li><b>不上传</b>:音频不出本机。没有「隐私政策」需要读,因为没有服务器收它。</li>
163
  <li><b>不用登录</b>:没有账号体系,也就没有订阅和额度。</li>
164
- <li><b>断网可用</b>:模型随安装包一起落盘,拔掉网线照常写。</li>
165
- <li><b>能抓桌面客户端</b>:系统级音频采集,不是只能录浏览器标签页。</li>
166
  </ul>
167
 
168
  <h2>模型</h2>
169
  <p>
170
  本页数字对应的权重公开在
171
  <a href="https://huggingface.co/ToothpasteLake/offlisten-models">ToothpasteLake/offlisten-models</a>,
172
- 6 个文件共 229.07 MiB,逐文件 sha256 已登记在发行的清单里。
173
- 换成自己的机器复跑时,先核对哈希,再比数字。
174
  </p>
175
 
176
  <!-- 主仓库公开后取消注释:
@@ -191,7 +234,7 @@
191
  hint.hidden = true;
192
  });
193
  v.addEventListener('error', function () {
194
- hint.textContent = '演示视频待上传:把 demo.mp4 放进仓库根目录即自动显示。';
195
  });
196
  })();
197
  </script>
 
3
  <head>
4
  <meta charset="utf-8">
5
  <meta name="viewport" content="width=device-width, initial-scale=1">
6
+ <title>录匣 Offlisten · 离线会议转写</title>
7
  <style>
8
  :root {
9
  --bg: #23272c;
 
14
  --accent: #f5c542;
15
  }
16
  * { box-sizing: border-box; }
17
+ html { background: var(--bg); }
18
  body {
19
  margin: 0;
20
  background: var(--bg);
 
39
  th { background: var(--panel); font-weight: 600; color: var(--dim); white-space: nowrap; }
40
  tr:last-child td { border-bottom: 0; }
41
  td.num { font-variant-numeric: tabular-nums; white-space: nowrap; }
42
+ td.out { font-size: 13px; }
43
+ th .thsub { font-weight: 400; font-size: 13px; color: var(--dim); }
44
+ td .rng { font-size: 13px; color: var(--dim); }
45
  video { width: 100%; border: 1px solid var(--line); border-radius: 8px; background: #000; display: block; }
46
  .videohint {
47
  border: 1px dashed var(--line); border-radius: 8px; padding: 28px 20px;
 
51
  h3 { font-size: 15px; margin: 26px 0 10px; font-weight: 600; color: var(--dim); }
52
  blockquote {
53
  margin: 0 0 14px; padding: 10px 14px; border-left: 2px solid var(--accent);
54
+ background: var(--panel); font-size: 14px; line-height: 1.7;
55
  }
56
  footer { margin-top: 56px; padding-top: 20px; border-top: 1px solid var(--line); color: var(--dim); font-size: 13px; }
57
  ul { padding-left: 20px; margin: 0 0 14px; }
58
  li { margin-bottom: 6px; }
59
+ figure { margin: 0 0 10px; background: #fff; border-radius: 8px; padding: 10px; }
60
+ figure img { display: block; width: 100%; height: auto; }
61
+ figure a { display: block; border-bottom: 0; }
62
+ /* 矩阵图是 1000px 宽的信息图,正文栏只有 712px:宽屏时让它出血,字才看得清 */
63
+ @media (min-width: 960px) {
64
+ figure { margin-left: -90px; margin-right: -90px; }
65
+ }
66
  </style>
67
  </head>
68
  <body>
 
74
  </header>
75
 
76
  <p class="lead">
77
+ 录匣把你电脑上的声音转成文字,全部在本机完成。
78
  <strong>没有账号,没有云端,拔掉网线它还在写。</strong>
79
  </p>
80
 
81
  <p>
82
+ 这个页面不放可交互 demo:转写要在服务端加载 229 MiB 的模型,而它的主场是你自己的电脑。
83
+ 下面是同一份模型(SenseVoice int8,2 个 CPU 线程)在五段公开音频上的真实输出,看完再决定要不要装。
84
  </p>
85
 
86
  <h2>五个语种,同一份模型</h2>
 
101
  </div>
102
 
103
  <p class="note" style="margin-top:12px">
104
+ 点语种名可以听那段音频。五段都在
105
  <a href="https://huggingface.co/ToothpasteLake/offlisten-models/tree/main/test_wavs">模型仓库的 test_wavs/</a>,
106
+ 和模型一样可下载,可自己复跑。耗时是 2 个 CPU 线程跑五轮的中位数,括号里是极值。
107
  <br>
108
+ 同一段音频连跑五次,RTF 能落在 0.077–0.117 之间,所以这张表只支撑一个结论:速度大概是实时的十倍。
109
+ 要当 benchmark 用,得固定机器、关掉后台、多跑几轮看分布。
110
  <br>
111
+ 中文那句在官方示例里是「开放时间」,int8 量化后这里是「开饭时间」。我们没有换成好看的那条。
 
112
  </p>
113
 
114
  <h2>演示</h2>
 
117
  <p class="videohint" id="demo-hint">演示视频加载中;若浏览器不支持 mp4,可直接<a href="./demo.mp4">下载观看</a>。</p>
118
 
119
  <p class="note">
120
+ 这 42 秒是按真实时钟跑出来的:五段音频先被模型听完��字幕才依次出现,切段方式和产品里一样靠停顿。
121
+ 界面是产品的本地文本页,以只读回放模式启动,所以控制区写着「只读文本页」;正常桌面运行时那里是开始/暂停。
122
+ 视频里的数据只走过 <code>127.0.0.1</code>。
123
  </p>
124
 
125
  <h2>接上本地的 AI</h2>
126
 
127
  <p>
128
+ 录匣只把声音变成文字。总结、追问、翻译交给谁写由你决定,前提是那个模型也在这台机器上。
129
+ 下面这段 46 秒没有音轨,因为它要证明的不是听感。
130
  </p>
131
 
132
  <video controls preload="metadata" src="./use-with-browser-ai.mp4"></video>
133
 
134
  <p class="note" style="margin-top:12px">
135
  左边是录匣的本地文本页,右边是浏览器里的 Page Assist,接着一个跑在 Ollama 上的 <code>qwen2.5:0.5b</code>。
136
+ 勾选 <b>Chat with current page</b> 之后,插件读的是这个页面本身,走的不是云端接口,也不经过复制粘贴。
137
  </p>
138
 
139
+ <h3>本地文本页本来就留了这个出口</h3>
140
 
141
+ <p>页面上那行提示是为这件事写的:</p>
142
 
143
  <blockquote>
144
  文本来自本机离线 ASR,只在 127.0.0.1 上传输。本页不调用任何模型,也不持有 apikey。
145
  要交给 AI 处理,就复制全文,或让你浏览器里已有的 AI 插件读取本页。
146
  </blockquote>
147
 
148
+ <p>视频里三个部件都在同一台机器上,链路没有一处出网:</p>
149
 
150
  <div class="tablewrap">
151
  <table>
152
  <thead><tr><th>部件</th><th>作用</th><th>跑在哪</th></tr></thead>
153
  <tbody>
154
+ <tr><td>SenseVoice int8</td><td>声音转成带标点的文字</td><td class="out">本机进程,229 MiB 随安装包落盘</td></tr>
155
  <tr><td>Page Assist</td><td>把当前页内容放进提示词</td><td class="out">浏览器扩展</td></tr>
156
  <tr><td>Ollama + qwen2.5:0.5b</td><td>读文字,给回答</td><td class="out">本机进程,监听 127.0.0.1:11434</td></tr>
157
  </tbody>
 
159
  </div>
160
 
161
  <p class="note" style="margin-top:12px">
162
+ 两点说明。一是 <code>0.5b</code> 只有五亿参数,回答质量按小模型的标准看,别拿它和云端大模型比。
163
+ 二是视频里它用英文作答,因为页面上并排摆着中文原文和 Argos 译文,模型看到的是双语文本;
164
+ 想让回答更稳,可以在插件里限定「只依据中文原文回答」。
165
+ </p>
166
+
167
+ <h2>造轮子之前,先看这 12 格</h2>
168
+
169
+ <p>
170
+ 上面演示的是产品选中的那一格。选之前量过 4 个运行时 × 3 个平台,
171
+ 能同时满足「CPU 能跑、流式、能装进别人的机器」的只有 2 格,其中 1 格有本机实测。
172
+ </p>
173
+
174
+ <figure>
175
+ <a href="./matrix-zh.png" title="点开看原尺寸 1000×780"><img src="./matrix-zh.png" alt="端侧 ASR 运行时可用性矩阵:4 个运行时 × 3 个平台,12 格里只有 2 格通过"></a>
176
+ </figure>
177
+
178
+ <p class="note">
179
+ 颜色越深越可用。斜纹表示这一格不存在:不是慢,是没有这个选项。
180
+ 英文版:<a href="./matrix-en.png">matrix-en.png</a>。
181
+ </p>
182
+
183
+ <p>
184
+ 图上只放结论,依据分四级:5 格来自官方文档或包矩阵,1 格是本机实测(就是上面那张表),
185
+ 1 格只验过模型、没跑过运行时,5 格是推断。推断的那 5 格标了 L3,只能当"值得试",不能当结论引用。
186
+ </p>
187
+
188
+ <h3>依据都能点开核</h3>
189
+
190
+ <ul>
191
+ <li><a href="https://arxiv.org/abs/2407.04051">FunAudioLLM 论文(arXiv:2407.04051)</a>:SenseVoice-Small 的结构、5 语言支持与低延迟声明。</li>
192
+ <li><a href="https://k2-fsa.github.io/sherpa/onnx/">sherpa-onnx 文档</a>:ONNX Runtime 下的 SenseVoice 用法与流式示例,产品走的就是这条。</li>
193
+ <li><a href="https://k2-fsa.github.io/sherpa/ncnn/sense-voice/">sherpa-ncnn 的 SenseVoice 章</a>:ncnn 侧有现成预训练包,也有麦克风实时识别一节。</li>
194
+ <li><a href="https://docs.nvidia.com/deeplearning/triton-inference-server/user-guide/docs/backend/docs/backend_platform_support_matrix.html">Triton 后端支持矩阵</a>:TensorRT 在 x86 与 ARM-SBSA 上都是 GPU ✓ / CPU ✗。</li>
195
+ <li><a href="https://pypi.org/project/sherpa-ncnn/#files">PyPI 上 sherpa-ncnn 的 wheel 列表</a>:只有 win32 与 win_amd64,没有 win_arm64。</li>
196
+ <li><a href="https://huggingface.co/FunAudioLLM/SenseVoiceSmall-GGUF">SenseVoiceSmall-GGUF 模型卡</a>:q8 体积,8 线程 8.01% CER(184 条普通话)。</li>
197
+ </ul>
198
+
199
+ <p class="note">
200
+ 逐格原因、证据分级和「补一格」用的模板在仓库的 <code>docs/bench/README.md</code>。
201
+ 这 12 格里我们只有 1 格是自己量的,其余 11 格缺的正是别人手上的数据。
202
  </p>
203
 
204
+ <h2>和云端转写比</h2>
205
  <ul>
206
+ <li><b>不上传</b>:音频不出本机。没有隐私政策需要读,因为没有服务器收它。</li>
207
  <li><b>不用登录</b>:没有账号体系,也就没有订阅和额度。</li>
208
+ <li><b>断网可用</b>:模型随安装包落盘,拔掉网线照常写。</li>
209
+ <li><b>能抓桌面客户端</b>:系统级音频采集,不只限于浏览器标签页。</li>
210
  </ul>
211
 
212
  <h2>模型</h2>
213
  <p>
214
  本页数字对应的权重公开在
215
  <a href="https://huggingface.co/ToothpasteLake/offlisten-models">ToothpasteLake/offlisten-models</a>,
216
+ 6 个文件共 229.07 MiB,逐文件 sha256 登记在发行清单里。换成自己的机器复跑时,先核对哈希,再比数字。
 
217
  </p>
218
 
219
  <!-- 主仓库公开后取消注释:
 
234
  hint.hidden = true;
235
  });
236
  v.addEventListener('error', function () {
237
+ hint.innerHTML = '演示视频加载失败,可直接<a href="./demo.mp4">下载观看</a>。';
238
  });
239
  })();
240
  </script>