完全自用的本地音频转文字应用,有需要的朋友可以自取,耗费了不少 token ,希望利用率能够高。
https://github.com/bubugamer/VoxNote
- 实时录音转译功能还有问题,下个排期修复
- 因为我只有 Mac ,所以目前仅有 Mac 版本,后续随缘更新 win 版
完全自用的本地音频转文字应用,有需要的朋友可以自取,耗费了不少 token ,希望利用率能够高。
https://github.com/bubugamer/VoxNote
1
lambdaX999 11h 35m ago
|
2
AlangHa 11h 34m ago via iPhone
真是优秀
|
3
kuhung 11h 26m ago
好奇佬用的什么语音转文字和说话人识别模型
|
4
x1x2 OP 我目前用着还行,识别的准确率确实不算太高,但是我一般是先转,然后再把文本扔进 GPT ,让它再给我润色润色。 我主要是用来转电话录音和播客文本的,时间都比较长,30 分钟以上吧。
P.S. 我其实也是参考了开源项目。第一版是用原生的 Mac 语音识别引擎,其实效果也还行。后面翻了下 x ,发现有成熟开源,就拿来用了。 |
5
x1x2 OP @kuhung 我最开始用的苹果内置的引擎,后面扫了一眼这个开源项目: https://github.com/argmaxinc/argmax-oss-swift ,把内置模型改成了 Whisper large-v3
|
6
x1x2 OP @kuhung Claude 的解释,你可以参考看看:
⏺ argmax-oss-swift 在 VoxNote 里负责两件事:语音识别( WhisperKit )和说话人识别( SpeakerKit )。 --- 一、WhisperKit — 语音转文字的核心引擎 VoxNote 自己只负责把音频文件读成 [Float] 浮点数组( AudioProcessor.loadAudioAsFloatArray ),之后全部交给 WhisperKit: [Float] 音频数据 ↓ whisperKit.transcribe(audioArray:decodeOptions:callback:segmentCallback:) ↓ [TranscriptionResult] ← 含完整文本 + 每段时间戳 VoxNote 给 WhisperKit 的配置参数: - chunkingStrategy: .vad — 自动按静音分段 - wordTimestamps: true — 保留每段的时间戳(供说话人对齐用) - concurrentWorkerCount: 16 — 并行加速 - detectLanguage: language == nil — 不指定语言时自动检测 转录过程中 WhisperKit 会不断回调进度( 0%→98%)和中间文本,VoxNote 把这些映射成 UI 上的 .transcribing(progress, partialText) 实时显示。 --- 二、SpeakerKit — 说话人识别(可选功能) 用户开启说话人标注后,VoxNote 会同时跑两个任务: 同一份 [Float] 音频 ├─ 并行 → speakerKit.diarize() → DiarizationResult (谁在什么时间说话) └─ 顺序 → whisperKit.transcribe() → [TranscriptionResult](说了什么) 合并 → diarization.addSpeakerInfo(to: results, strategy: .subsegment) ↓ " [Speaker 1] 你好,请问…… [Speaker 2] 好的,我来解释一下……" SpeakerKit 底层用的是 Pyannote v4 的 CoreML 模型,在本机完成推理,不联网。 |
7
ern 10h 42m ago
whisper 的模型感觉不太行,据说小红书的那个好点,还没研究。反正实测一段录音,whisper 转出来很乱,gemini 在线和飞书在线都能转个 95%左右。
|
9
x1x2 OP 是,中文识别率确实一般。没有做过取舍,单纯觉得是不是 large 比 medium 识别准确率可能更高,但实际效果半斤八两。 我现在的工作流是,先转成文本,然后再让 gpt/opus 润色一道。不得不说,SOTA 就是 SOTA ,很刁钻的误识,都能识别出来。
下面是我刚刚转的文本错误和修正汇总 ┌───────────────────────────┬──────────────────────────────────────────┐ │ 原文 │ 修正 │ ├───────────────────────────┼──────────────────────────────────────────┤ │ 伤/商(贯穿全文) │ 熵( entropy ) │ ├───────────────────────────┼──────────────────────────────────────────┤ │ 毒血的头 │ 读写头( read/write head ) │ ├───────────────────────────┼──────────────────────────────────────────┤ │ 山门 56 │ 山本五十六(日本海军大将) │ ├───────────────────────────┼──────────────────────────────────────────┤ │ 积电器/寄电器 │ 继电器 │ ├───────────────────────────┼──────────────────────────────────────────┤ │ 二子海默症 │ 阿尔茨海默症 │ ├───────────────────────────┼──────────────────────────────────────────┤ │ 埃尼亚克/安尼阿克 │ ENIAC │ ├───────────────────────────┼──────────────────────────────────────────┤ │ 爱德瓦克/爱尼瓦克 │ EDVAC │ ├───────────────────────────┼──────────────────────────────────────────┤ │ αβ减值算法 │ α-β剪枝算法 │ ├───────────────────────────┼──────────────────────────────────────────┤ │ ToroChamp │ Turochamp (图灵+钱珀诺恩合创的象棋程序) │ ├───────────────────────────┼──────────────────────────────────────────┤ │ 布尔兹曼 │ 玻尔兹曼( Ludwig Boltzmann ) │ ├───────────────────────────┼──────────────────────────────────────────┤ │ ACES │ ACE ( Automatic Computing Engine ) │ ├───────────────────────────┼──────────────────────────────────────────┤ │ Unartificial Intelligence │ Artificial Intelligence │ ├───────────────────────────┼──────────────────────────────────────────┤ │ 卷幅他 │ 本尼迪克特·康伯巴奇(卷福) │ ├───────────────────────────┼──────────────────────────────────────────┤ │ 道胜和夫 │ 稻盛和夫 │ └───────────────────────────┴──────────────────────────────────────────┘ 人名译名统一 - 冯诺一曼 → 冯·诺伊曼 - 斯马赫/司马赫 → 赫伯特·西蒙(中文名司马赫,首次出现做注) - 纽娥尔 → 纽厄尔 - 赛米尔 → 阿瑟·塞缪尔 结构优化:去除 Speaker 标签,按四章结构整理为连贯叙述文章,保留播客的口语风格。 |