在AI应用爆发的今天,语音转文字(STT)已经不是什么新鲜事。但作为一名开发者,我始终对“把录音上传到云端”这件事心存芥蒂。无论是会议记录、访谈整理,还是个人笔记,音频数据往往包含大量隐私。

为了解决这个痛点,我决定基于 Apple 原生的强大能力,结合最新的端侧AI技术,开发了一个真正意义上的开源项目——ohr-speaker

它不仅仅是一个转录工具,更是一个**完全运行在本地、支持说话人分离(声纹识别)**的隐私优先型解决方案。

为什么我们需要 ohr-speaker?

市面上的转录工具很多,但大多存在以下问题:

  1. 隐私泄露风险:音频必须上传到服务器,数据不再受控。
  2. 费用昂贵:OpenAI Whisper API 等按秒计费,长音频成本不菲。
  3. 缺乏角色区分:大多数工具只能转出一大段文字,无法区分“谁说了什么”。

ohr-speaker 的出现就是为了解决这些问题。它基于 macOS 原生的 SpeechAnalyzer 引擎,并创新性地集成了 FluidAudio 的离线说话人分割技术。

它的核心承诺只有三点:

  • 100% 本地运行:无需联网,无需 API Key。
  • 数据不出设备:你的录音只属于你。
  • 毫秒级响应:利用 Apple Silicon 的强悍性能,速度极快。
核心技术:原生引擎 + 端侧AI

这个项目最让我自豪的地方在于它的技术架构。它不是简单的套壳,而是深度整合了系统底层能力:

  1. 转录引擎:使用了 macOS 内置的 SpeechAnalyzerSpeechTranscriber 框架。这意味着它拥有系统级的优化,延迟极低,且不需要额外下载庞大的语音识别模型。
  2. 说话人分离:这是 ohr-speaker 的灵魂。我集成了 FluidAudioOfflineDiarizer。首次运行时,它会自动下载约 700MB 的模型文件,随后即可在离线状态下精准识别不同的说话人。
  3. 智能对齐算法:为了解决“文字”和“人声”的对应问题,我编写了一套基于时间重叠最大化的算法,将转录的文本段与声纹分割段进行精准匹配。
功能亮点一览

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

让我们一起,用技术守护隐私,用开源连接未来。

Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐