低语. 节点
另一个节点绑有: 低语. cpp 将相同的 API 与 低声说话 尽可能多.
平台支持
- 马科斯
- arm64: CPU和金属GPU加速度
- x86 64: 仅限 CPU
- 视窗(x86 64和arm64)
- CPU 软件
- 通过 Vulkan 的 GPU 加速
- 通过CUDA的GPU加速(x86 64)
- Linux (x86 64和arm64) (中文(简体) )
- CPU 软件
- 通过 Vulkan 的 GPU 加速
- GPU 通过 CUDA 加速
- 通过Qualcomm Hexagon(arm64 Snapdragon,实验性)来进行NPU加速
- 网页
- 刚才
- 可选 WebGPU 通过
ggml-webgpuwASM 软件包的构建GGML_WEBGPU=ON
安装
npm install @fugood/whisper.node
使用量
基本译名
import { initWhisper } from '@fugood/whisper.node'
const context = await initWhisper({
model: 'path/to/ggml-base.en.bin',
useGpu: true,
}, libVariant)
// transcribeFile returns { stop, promise }
const { stop: stop1, promise: promise1 } = context.transcribeFile('audio1.wav', {
language: 'en',
temperature: 0.0,
// ...
})
const result1 = await promise1
// transcribeData also returns { stop, promise }
let audioBuffer // PCM 16-bit, mono, 16kHz
const { stop: stop2, promise: promise2 } = context.transcribeData(audioBuffer, {
language: 'en',
temperature: 0.0,
// ...
})
const result2 = await promise2
// You can also cancel transcription if needed
// await stop1() // Cancels the first transcription
// await stop2() // Cancels the second transcription
//
// stop() interrupts the decode; the job's promise then resolves with
// `isAborted: true` and the segments decoded so far (it does not reject).
// Native failures reject the promise. The context stays usable afterwards.
// Always release the context when done
await context.release()
NVIDIA PARAKEET TDT 维基百科
ParakeetContext 运行 NVIDIA 的 Parakeet TDT 0.6B v3 模型,通过 Parakeet API 包含在 sleep.cpp. v3模式支持英语外加其他24个欧洲语言.
下载 GGUF 模型 ggml-org/parakeet-GGUF 在初始化上下文之前:
| 型号 | 大约大小 |
|---|---|
ggml-parakeet-tdt-0.6b-v3-q4_0.bin | 356 甲基溴 |
ggml-parakeet-tdt-0.6b-v3-q4_k.bin | 416 MB (英语) |
ggml-parakeet-tdt-0.6b-v3-q8_0.bin | 669 甲基溴 |
ggml-parakeet-tdt-0.6b-v3-f16.bin | 1.26 英国 |
import { initParakeet } from '@fugood/whisper.node'
const parakeetContext = await initParakeet({
filePath: 'path/to/ggml-parakeet-tdt-0.6b-v3-q4_0.bin',
useGpu: true,
}, libVariant)
// transcribeFile / transcribeData return { stop, promise } like WhisperContext
const { stop, promise } = parakeetContext.transcribeFile('audio.wav', {
maxThreads: 4,
})
const { result, segments, isAborted } = await promise
// Cancel an in-flight transcription when needed:
// await stop()
await parakeetContext.release()
transcribeData() 接受原始签名的 16- bit PCM 为 ArrayBuffer; 原始音频必须是单于 16 kHz 。 不支持、 使用 Whiper 特定选项( 语言、 即时、 回调) maxThreads 财务报告和审定财务报表 audioCtx 换句话说.
语音活动检测( VAD)
import { initWhisperVad } from '@fugood/whisper.node'
// Speech model: whisper.cpp's ggml-silero-*.bin or a vad.cpp GGUF (Silero, FireRedVAD)
const vadContext = await initWhisperVad({
filePath: 'path/to/ggml-silero-v6.2.0.bin',
nThreads: 1, // Default: 1, best for the small per-hop graphs
}, libVariant)
// Offline detection: speech segments, t0/t1 in 10 ms units
const segments = await vadContext.detectSpeechFile('audio.wav')
const segments2 = await vadContext.detectSpeechData(audioBuffer, {
threshold: 0.5,
minSpeechDurationMs: 250,
minSilenceDurationMs: 100,
speechPadMs: 30,
})
// Stateful detection over live audio: the model state carries over between
// pushes, one speech probability per `hopSamples` (512 samples = 32 ms for Silero)
const stream = await vadContext.createStream()
const probs = await stream.push(pcmChunk) // any length
const lastProbs = await stream.flush() // end of audio
await stream.reset() // start a new audio stream
await stream.release()
await vadContext.release() // also frees its streams
说明:音频数据应为16位PCM,单相,16kHz格式. 库期望包含原始音频数据的ArrayBuffer.
VAD 运行 维德.cpp,总是在CPU(useGpu 页:1 概率完全跟随官员Silero; samplesOverlap 被忽略和 negThreshold 已提供.
原生日志
import {
addNativeLogListener,
isNativeLogEnabled,
toggleNativeLog,
} from '@fugood/whisper.node'
const logs = addNativeLogListener((level, text) => {
console.log(`[whisper ${level}] ${text}`)
})
await toggleNativeLog(true)
console.log(isNativeLogEnabled())
// ...
await toggleNativeLog(false)
logs.remove()
日志级别作为小写发布 error, (中文(简体) ), warn, (中文(简体) ), info,或 debug
字符串。 在Node.js和浏览器WASM架构中也有同样的帮助.
浏览器 WASM
浏览器软件包保持相同的基于承诺的软件包 initWhisper, (中文(简体) ),
initWhisperVad,以及 initParakeet 进入点。 在浏览器中, filePath 实值
作为 URL 处理,模型会被带入 WASM 文件系统.
import { initWhisper, initWhisperVad } from '@fugood/whisper.node'
const whisper = await initWhisper({
filePath: 'https://huggingface.co/ggerganov/whisper.cpp/resolve/main/ggml-base.en.bin',
maxModelBytes: 1536 * 1024 * 1024,
useGpu: false,
})
const { promise } = whisper.transcribeFile('https://raw.githubusercontent.com/ggml-org/whisper.cpp/master/samples/jfk.wav', {
language: 'en',
temperature: 0,
})
console.log(await promise)
await whisper.release()
const vad = await initWhisperVad({
filePath: 'https://huggingface.co/ggml-org/whisper-vad/resolve/main/ggml-silero-v6.2.0.bin',
useGpu: false,
})
console.log(await vad.detectSpeechFile('https://raw.githubusercontent.com/ggml-org/whisper.cpp/master/samples/jfk.wav'))
await vad.release()
浏览器包上同时装有单行道和接线道WASM文物. 打开
跨原生相隔页Cross-Origin-Opener-Policy: same-origin 财务报告和审定财务报表
Cross-Origin-Embedder-Policy: require-corp,加载器使用线程
工艺品 SharedArrayBuffer; 否则它会回到单行道
文物自动。 超大小的模型下载在装入前失败
(音乐) Firefox默认上限为256 MiB;其他浏览器默认为75%
已配置的 WASM 最大内存 。 过 maxModelBytes 当你知道
目标浏览器可以分配模型. 低声转录默认为8
在有线程时基于浏览器硬件的线程; 通过
maxThreads 以覆盖它。 浏览器 WASM 夹 maxThreads 至编译本
池限为8或单行道倒置后1. 浏览器页面运行模型
在专门的模块工作人员中加载、复制、基准和 VAD
默认, 因此 UI 线程可以继续渲染 。 使用主线 whisper.node 软件包
浏览器代码中的条目点 :
import { configureWasm, initWhisper } from '@fugood/whisper.node'
使用 configureWasm({ worker: false }) 只有在你明确需要时
线上运行时间, configureWasm({ threads: false }) 迫使
单行道文物,或通过 workerPath, (中文(简体) ), jsPath,以及 wasmPath 何时
服务自定义 URL 的软件包文件。 年长者 workerUrl 财务报告和审定财务报表
runtimeScriptUrl 选项名称仍然有效。 型号
下载默认在浏览器缓存中被缓存. 过
cacheModel: false 使连续的缓存失效, modelCacheName 要隔离
缓存命名空间,或 modelCacheKey 当获取 URL 是代理或签名时
URL但应该重新使用相同的缓存模型.
以 :
npm run build-wasm
或者用徽章多克的图像构建 :
npm run build-wasm-docker
npm run build-wasm 启用 GGML_WEBGPU=ON 默认并发出
wasm/whisper-node.js, (中文(简体) ), wasm/whisper-node.wasm, (中文(简体) ),
wasm/whisper-node.threads.js,以及 wasm/whisper-node.threads.wasm启用
bash scripts/build-wasm.sh --no-webgpu 用于只用于CPU WASM构建,或
--no-threads 编号 : --threads 只构建一个 CPU 线程变体。 过
--single-file 仅在您想要将 WASM 二进制嵌入到每个生成中时
联合来文文件。 现代标志在主要联署材料中嵌入了线条工人的靴子
文件,所以一个单独的 whisper-node.worker.js 无法预料。 浏览器
包件还装有自己的模块 worker.js 非阻塞模型负载的包装
和推论. npm run build-wasm-docker 用途 emscripten/emsdk:4.0.14-arm64
在 arm64 主机,如 Apple 硅Macs,以及 emscripten/emsdk:4.0.13 打开
amd64 主持人. 覆盖 EMSCRIPTEN_IMAGE 或者说 EMSCRIPTEN_PLATFORM 何时
需要帮助。 建筑后有本地烟页:
node examples/wasm/server.mjs
在WASM包, useGpu: true 启用WebGPU进行低声转录
当浏览器支持时 navigator.gpuVAD总是运行在CPU上
(vad.cpp)自己的内核,有WASM SIMD.
自由选项
default: 一般使用, 不支持 GPU, 只支持 macOS (Metal)vulkan: 支持 GPU Vulkan( Windows/ Linux),但有些情景可能不稳定cuda: 支持GPU CUDA( Windows/Linux),但仅限于能力有限Linux:(x86 64: 8.9, arm64: 8.7) (中文(简体) ) 视窗: x86 64-12.0
- [x] (中文(简体) )
snapdragon: Qualcomm Snapdragon Hexagon NPU通过ggml-六边形(Linux arm64). 月台套装中的HTP skels飞船ADSP_LIBRARY_PATH自动设置;GGML_HEXAGON_NDEV默认为 16
Snapdragon (六边形 NPU) 基准
过 'snapdragon' 作为 libVariant 参数(例如:. initWhisper({ model, useGpu: true }, 'snapdragon')) (中文(简体) ). 微声模型运行在"六角NPU"上,闪出注意力总是在.
Qualcomm IQ-9075基准(HTP= snapdragon 变体,CPU = default 变体 :
| 型号 | HTP 编码 | CPU 编码 | HTP 解码 | CPU 解码 | HTP 转录 | CPU 转录 |
|---|---|---|---|---|---|---|
| 细小的.en | 95分钟 | 361分钟 | 6.7 毫秒 | 3.4个毫秒 | 316分钟 | 524分钟 |
| 基础 | 143分钟 | 787分钟 | 6.3 ms (英语) | 5.5毫秒(每分钟) | 430分钟 | 846分钟 |
| 基数- q8 0 | 154分钟 | 557分钟 | 6.9个毫秒 | 4.2 毫秒(秒) | 397分钟 | 582分钟 |
| 小数 | 360分钟 | 2824分钟 | 16.3 毫秒(秒) | 14.0 分钟 | 915分钟 | 2789分钟 |
| distil- small.en-q8 0 (英语) | 320分钟 | 1743分钟 | 5.3 分钟 | 4.8 毫秒( 秒) | 510分钟 | 1530分钟 |
| 介质 | 812分钟 | 8799分钟 | 35.1毫秒 | 38.3 毫秒(秒) | 1915分钟 | 8006分钟 |
| 大v3-涡轮-q8 0 | 2479分钟 | 9400毫秒( 分钟) | 9.8 毫秒(秒) | 8.2毫秒(每分钟) | 2838分钟 | 7616分钟 |
Android上也有同样的后端 低声说话。 。 。 .
许可证
麻省理工学院
建造和维护 金砖。 。 。 .