告别云端API!我用Swift打造了一款100%本地的AI语音转写神器
在AI应用爆发的今天,语音转文字(STT)已经不是什么新鲜事。但作为一名开发者,我始终对“把录音上传到云端”这件事心存芥蒂。无论是会议记录、访谈整理,还是个人笔记,音频数据往往包含大量隐私。
为了解决这个痛点,我决定基于 Apple 原生的强大能力,结合最新的端侧AI技术,开发了一个真正意义上的开源项目——ohr-speaker。
它不仅仅是一个转录工具,更是一个**完全运行在本地、支持说话人分离(声纹识别)**的隐私优先型解决方案。
为什么我们需要 ohr-speaker?
市面上的转录工具很多,但大多存在以下问题:
- 隐私泄露风险:音频必须上传到服务器,数据不再受控。
- 费用昂贵:OpenAI Whisper API 等按秒计费,长音频成本不菲。
- 缺乏角色区分:大多数工具只能转出一大段文字,无法区分“谁说了什么”。
ohr-speaker 的出现就是为了解决这些问题。它基于 macOS 原生的 SpeechAnalyzer 引擎,并创新性地集成了 FluidAudio 的离线说话人分割技术。
它的核心承诺只有三点:
- 100% 本地运行:无需联网,无需 API Key。
- 数据不出设备:你的录音只属于你。
- 毫秒级响应:利用 Apple Silicon 的强悍性能,速度极快。
核心技术:原生引擎 + 端侧AI
这个项目最让我自豪的地方在于它的技术架构。它不是简单的套壳,而是深度整合了系统底层能力:
- 转录引擎:使用了 macOS 内置的
SpeechAnalyzer和SpeechTranscriber框架。这意味着它拥有系统级的优化,延迟极低,且不需要额外下载庞大的语音识别模型。 - 说话人分离:这是 ohr-speaker 的灵魂。我集成了 FluidAudio 的
OfflineDiarizer。首次运行时,它会自动下载约 700MB 的模型文件,随后即可在离线状态下精准识别不同的说话人。 - 智能对齐算法:为了解决“文字”和“人声”的对应问题,我编写了一套基于时间重叠最大化的算法,将转录的文本段与声纹分割段进行精准匹配。
功能亮点一览
ohr-speaker 不仅仅是一个命令行工具,它更像是一个全能的音频处理瑞士军刀:
- 🗣️ 说话人识别:自动标记
【S1】、【S2】,清晰区分不同角色。 - 📝 多格式输出:支持纯文本、JSON、SRT 字幕、VTT 字幕,满足剪辑和归档需求。
- 🎙️ 实时麦克风转录:支持
--listen模式,像实时字幕一样工作。 - 🖥️ 兼容 OpenAI API:这是为开发者准备的大招。启动
--serve模式后,它提供了一个兼容 OpenAI Whisper API 的接口。你可以将任何调用 Whisper 的代码,无缝切换到本地运行!
性能实测:快,而且稳
在 Apple Silicon 芯片的加持下,ohr-speaker 的表现令人惊艳。以下是纯转录与开启说话人分离后的性能对比:
| 音频时长 | 纯转录耗时 | 开启说话人分离额外耗时 |
|---|---|---|
| 1 分钟 | ~1s | ~1s |
| 10 分钟 | ~3s | ~2s |
| 31 分钟 | ~10s | ~5s |
| 1 小时 | ~20s | ~10s |
可以看到,即使开启了复杂的声纹识别,处理 1 小时的音频也仅需额外 10 秒左右,效率极高。
快速上手
ohr-speaker 是为 macOS 26+ (Apple Silicon) 打造的。你可以通过 Swift 包管理器轻松编译安装:
# 1. 克隆项目
git clone https://github.com/yanhuicsdn/ohr-speaker.git
cd ohr-speaker
# 2. 编译 (需 Xcode 26.6+ 或 Xcode-beta 27+)
swift build -c release
# 3. 安装到系统路径
cp .build/release/ohr /usr/local/bin/ohr-speaker
使用示例:
最简单的用法,直接转写音频:
ohr-speaker meeting_recording.m4a
开启说话人分离(核心功能):
ohr-speaker --speakers meeting_recording.m4a
输出效果如下,清晰明了:
【S1】 都会有一个平台管理一般就有个用户中心...
【S2】 一个全的给个全的让用这样东西对他这个就比较清晰...
【S1】 对,就是他们省业务层面对这个权限的隔离是要求...
给开发者的特别礼物:本地 Whisper 服务
如果你正在开发一个需要语音转写的应用,但不想支付 OpenAI 的费用,或者担心数据隐私,ohr-speaker 是你的完美后端。
启动服务:
ohr-speaker --serve --port 11434
然后,你可以直接使用标准的 OpenAI 客户端代码进行调用:
curl http://localhost:11434/v1/audio/transcriptions \
-F "file=@audio.wav" \
-F "model=whisper-1" \
-F "diarize=true"
注意那个 diarize=true 参数,这是我在兼容层中特别加入的,让你在本地也能享受说话人分离的乐趣。
结语
做这个项目的初衷很简单:我想在享受 AI 便利的同时,把数据主权掌握在自己手里。
ohr-speaker 目前已经在 GitHub 开源,采用 MIT 协议。如果你也是一名注重隐私的 macOS 用户,或者正在寻找一个高性能的本地语音处理方案,欢迎 Star 支持,也欢迎提交 PR 一起完善它!
项目地址:https://github.com/yanhuicsdn/ohr-speaker
让我们一起,用技术守护隐私,用开源连接未来。
更多推荐

所有评论(0)