
在 Android、iOS、macOS 和 Windows 上对 16 个端侧语音识别模型和 9 个推理引擎进行的综合基准测试
源代码:
- android-offline-transcribe — 搭载 16 个 ASR 模型和 6 个推理引擎的 Android 基准测试应用
- ios-mac-offline-transcribe — 搭载 17 个 ASR 模型和 9 个推理引擎的 iOS/macOS 基准测试应用
- windows-offline-transcribe — 搭载 12 个 ASR 模型的 Windows 基准测试应用(仅 CPU)
摘要
我们在 Android、iOS、macOS 和 Windows 全平台上对 16 个端侧语音识别模型进行了基准测试,覆盖 9 个推理引擎,测量推理速度(tok/s)、实时系数(RTF)和内存占用。本基准仅测量速度,不评估转写准确率(WER/CER)。主要发现:推理引擎的选择可使同一模型的性能差异达 51 倍(Android 上 sherpa-onnx vs whisper.cpp);Moonshine Tiny 和 SenseVoice Small 在所有平台上实现最快推理;WhisperKit CoreML 在 4GB 的 iOS 设备上运行 Whisper Tiny 以上模型时会崩溃。所有基准测试应用和结果均已开源。
研究动机
开发音频相关的边缘应用时,开发者面临组合选择难题:数十个 ASR 模型(从 31MB 的 Whisper Tiny 到 1.8GB 的 Qwen3 ASR)、多种推理引擎(ONNX Runtime、CoreML、whisper.cpp、MLX)以及 4 个以上目标平台——每种组合产生截然不同的速度和内存特征。已发布的模型基准通常是在服务器 GPU 上测试的结果,而非模型实际部署的消费级手机和笔记本电脑。
本基准测试直接解决部署选择问题:在每个目标平台上,哪种模型+引擎组合能实现实时转写?内存约束如何?结果使开发者能够基于目标设备类别的实测数据进行选择,而非从 GPU 基准外推。
方法论
Android、iOS 和 macOS 基准测试使用同一个 30 秒 WAV 文件(JFK 就职演说循环片段,16kHz、单声道、PCM 16 位)。Windows 基准测试使用同一来源的 11 秒片段(详见 Windows 部分)。
测量指标(仅测速度——本基准不测量转写准确率/WER):
- 推理时间:从引擎调用到结果返回的实际用时
- tok/s:每秒输出单词数(越高越快)
- RTF:实时系数——处理时间与音频时长的比率(低于 1.0 = 快于实时)
测试设备:
| 设备 | 芯片 | 内存 | 操作系统 |
|---|---|---|---|
| Samsung Galaxy S10 | Exynos 9820 | 8 GB | Android 12 (API 31) |
| iPad Pro 第三代 | A12X Bionic | 4 GB | iOS 17+ |
| MacBook Air | Apple M4 | 32 GB | macOS 15+ |
| 笔记本电脑 | Intel Core i5-1035G1 | 8 GB | Windows(仅 CPU) |
Android 结果
设备: Samsung Galaxy S10, Android 12, API 31
| 模型 | 引擎 | 参数量 | 大小 | 支持语言 | 推理时间 | tok/s | RTF | 结果 |
|---|---|---|---|---|---|---|---|---|
| Moonshine Tiny | sherpa-onnx | 27M | ~125 MB | 英语 | 1,363 ms | 42.55 | 0.05 | ✅ |
| SenseVoice Small | sherpa-onnx | 234M | ~240 MB | zh/en/ja/ko/yue | 1,725 ms | 33.62 | 0.06 | ✅ |
| Whisper Tiny | sherpa-onnx | 39M | ~100 MB | 99 种语言 | 2,068 ms | 27.08 | 0.07 | ✅ |
| Moonshine Base | sherpa-onnx | 61M | ~290 MB | 英语 | 2,251 ms | 25.77 | 0.08 | ✅ |
| Parakeet TDT 0.6B v3 | sherpa-onnx | 600M | ~671 MB | 25 种欧洲语言 | 2,841 ms | 20.41 | 0.09 | ✅ |
| Android Speech(离线) | SpeechRecognizer | 系统 | 内置 | 50+ 种语言 | 3,615 ms | 1.38 | 0.12 | ✅ |
| Android Speech(在线) | SpeechRecognizer | 系统 | 内置 | 100+ 种语言 | 3,591 ms | 1.39 | 0.12 | ✅ |
| Zipformer Streaming | sherpa-onnx streaming | 20M | ~73 MB | 英语 | 3,568 ms | 16.26 | 0.12 | ✅ |
| Whisper Base (.en) | sherpa-onnx | 74M | ~160 MB | 英语 | 3,917 ms | 14.81 | 0.13 | ✅ |
| Whisper Base | sherpa-onnx | 74M | ~160 MB | 99 种语言 | 4,038 ms | 14.36 | 0.13 | ✅ |
| Whisper Small | sherpa-onnx | 244M | ~490 MB | 99 种语言 | 12,329 ms | 4.70 | 0.41 | ✅ |
| Qwen3 ASR 0.6B (ONNX) | ONNX Runtime INT8 | 600M | ~1.9 GB | 30 种语言 | 15,881 ms | 3.65 | 0.53 | ✅ |
| Whisper Turbo | sherpa-onnx | 809M | ~1.0 GB | 99 种语言 | 17,930 ms | 3.23 | 0.60 | ✅ |
| Whisper Tiny (whisper.cpp) | whisper.cpp GGML | 39M | ~31 MB | 99 种语言 | 105,596 ms | 0.55 | 3.52 | ✅ |
| Qwen3 ASR 0.6B (CPU) | Pure C/NEON | 600M | ~1.8 GB | 30 种语言 | 338,261 ms | 0.17 | 11.28 | ✅ |
| Omnilingual 300M | sherpa-onnx | 300M | ~365 MB | 1,600+ 种语言 | 44,035 ms | 0.05 | 1.47 | ❌ |
16 个模型中 15 个通过 — 0 次 OOM。唯一失败的 Omnilingual 300M 是已知的英语语言检测限制。
Android 引擎对比:相同模型,不同后端
Whisper Tiny 模型在不同推理后端上呈现出巨大的性能差异:
| 后端 | 推理时间 | tok/s | 加速倍数 |
|---|---|---|---|
| sherpa-onnx (ONNX) | 2,068 ms | 27.08 | 51 倍 |
| whisper.cpp (GGML) | 105,596 ms | 0.55 | 1 倍(基准) |
同一 Whisper Tiny 模型在 Android 上,sherpa-onnx 比 whisper.cpp 快 51 倍——这是开发者选择推理运行时的关键发现。
iOS 结果
设备: iPad Pro 第三代, A12X Bionic, 4 GB RAM
| 模型 | 引擎 | 参数量 | 大小 | 支持语言 | tok/s | 状态 |
|---|---|---|---|---|---|---|
| Parakeet TDT v3 | FluidAudio (CoreML) | 600M | ~600 MB (CoreML) | 25 种欧洲语言 | 181.8 | ✅ |
| Zipformer 20M | sherpa-onnx streaming | 20M | ~46 MB (INT8) | 英语 | 39.7 | ✅ |
| Whisper Tiny | whisper.cpp | 39M | ~31 MB (GGML Q5_1) | 99 种语言 | 37.8 | ✅ |
| Moonshine Tiny | sherpa-onnx offline | 27M | ~125 MB (INT8) | 英语 | 37.3 | ✅ |
| Moonshine Base | sherpa-onnx offline | 61M | ~280 MB (INT8) | 英语 | 31.3 | ✅ |
| Whisper Base | WhisperKit (CoreML) | 74M | ~150 MB (CoreML) | 英语 | 19.6 | ❌ 4GB OOM |
| SenseVoice Small | sherpa-onnx offline | 234M | ~240 MB (INT8) | zh/en/ja/ko/yue | 15.6 | ✅ |
| Whisper Base | whisper.cpp | 74M | ~57 MB (GGML Q5_1) | 99 种语言 | 13.8 | ✅ |
| Whisper Small | WhisperKit (CoreML) | 244M | ~500 MB (CoreML) | 99 种语言 | 6.3 | ❌ 4GB OOM |
| Qwen3 ASR 0.6B | Pure C (ARM NEON) | 600M | ~1.8 GB | 30 种语言 | 5.6 | ✅ |
| Qwen3 ASR 0.6B (ONNX) | ONNX Runtime (INT8) | 600M | ~1.6 GB (INT8) | 30 种语言 | 5.4 | ✅ |
| Whisper Tiny | WhisperKit (CoreML) | 39M | ~80 MB (CoreML) | 99 种语言 | 4.5 | ✅ |
| Whisper Small | whisper.cpp | 244M | ~181 MB (GGML Q5_1) | 99 种语言 | 3.9 | ✅ |
| Whisper Large v3 Turbo(压缩) | WhisperKit (CoreML) | 809M | ~1 GB (CoreML) | 99 种语言 | 1.9 | ❌ 4GB OOM |
| Whisper Large v3 Turbo | WhisperKit (CoreML) | 809M | ~600 MB (CoreML) | 99 种语言 | 1.4 | ❌ 4GB OOM |
| Whisper Large v3 Turbo | whisper.cpp | 809M | ~547 MB (GGML Q5_0) | 99 种语言 | 0.8 | ⚠️ RTF >1 |
| Whisper Large v3 Turbo(压缩) | whisper.cpp | 809M | ~834 MB (GGML Q8_0) | 99 种语言 | 0.8 | ⚠️ RTF >1 |
WhisperKit OOM 警告:在 4GB 设备上,WhisperKit CoreML 运行 Whisper Base 及以上模型时会崩溃(OOM)。OOM 标记模型的 tok/s 值是在崩溃前测得的,不代表完整的成功运行。whisper.cpp 可以在不发生 OOM 的情况下处理相同模型,但吞吐量较低。
macOS 结果
设备: MacBook Air M4, 32 GB RAM
| 模型 | 引擎 | 参数量 | 大小 | 支持语言 | tok/s | 状态 |
|---|---|---|---|---|---|---|
| Parakeet TDT v3 | FluidAudio (CoreML) | 600M | ~600 MB (CoreML) | 25 种欧洲语言 | 171.6 | ✅ |
| Moonshine Tiny | sherpa-onnx offline | 27M | ~125 MB (INT8) | 英语 | 92.2 | ✅ |
| Zipformer 20M | sherpa-onnx streaming | 20M | ~46 MB (INT8) | 英语 | 77.4 | ✅ |
| Moonshine Base | sherpa-onnx offline | 61M | ~280 MB (INT8) | 英语 | 59.3 | ✅ |
| SenseVoice Small | sherpa-onnx offline | 234M | ~240 MB (INT8) | zh/en/ja/ko/yue | 27.4 | ✅ |
| Whisper Tiny | WhisperKit (CoreML) | 39M | ~80 MB (CoreML) | 99 种语言 | 24.7 | ✅ |
| Whisper Base | WhisperKit (CoreML) | 74M | ~150 MB (CoreML) | 英语 | 23.3 | ✅ |
| Apple Speech | SFSpeechRecognizer | 系统 | 内置 | 50+ 种语言 | 13.1 | ✅ |
| Whisper Small | WhisperKit (CoreML) | 244M | ~500 MB (CoreML) | 99 种语言 | 8.7 | ✅ |
| Qwen3 ASR 0.6B (ONNX) | ONNX Runtime (INT8) | 600M | ~1.6 GB (INT8) | 30 种语言 | 8.0 | ✅ |
| Qwen3 ASR 0.6B | Pure C (ARM NEON) | 600M | ~1.8 GB | 30 种语言 | 5.7 | ✅ |
| Whisper Large v3 Turbo | WhisperKit (CoreML) | 809M | ~600 MB (CoreML) | 99 种语言 | 1.9 | ✅ |
| Whisper Large v3 Turbo(压缩) | WhisperKit (CoreML) | 809M | ~1 GB (CoreML) | 99 种语言 | 1.5 | ✅ |
| Qwen3 ASR 0.6B (MLX) | MLX (Metal GPU) | 600M | ~400 MB (4-bit) | 30 种语言 | — | 未测试 |
| Omnilingual 300M | sherpa-onnx offline | 300M | ~365 MB (INT8) | 1,600+ 种语言 | 0.03 | ❌ 英语不可用 |
macOS 无 OOM 问题 — 凭借 32GB 内存,包括 WhisperKit CoreML 运行的 Whisper Large v3 Turbo 在内的所有模型均可正常运行。
Windows 结果
设备: Intel Core i5-1035G1 @ 1.00 GHz (4C/8T), 8 GB RAM, 仅 CPU
| 模型 | 引擎 | 参数量 | 大小 | 推理时间 | Words/s | RTF |
|---|---|---|---|---|---|---|
| Moonshine Tiny | sherpa-onnx offline | 27M | ~125 MB | 435 ms | 50.6 | 0.040 |
| SenseVoice Small | sherpa-onnx offline | 234M | ~240 MB | 462 ms | 47.6 | 0.042 |
| Moonshine Base | sherpa-onnx offline | 61M | ~290 MB | 534 ms | 41.2 | 0.049 |
| Parakeet TDT v2 | sherpa-onnx offline | 600M | ~660 MB | 1,239 ms | 17.8 | 0.113 |
| Zipformer 20M | sherpa-onnx streaming | 20M | ~73 MB | 1,775 ms | 12.4 | 0.161 |
| Whisper Tiny | whisper.cpp | 39M | ~80 MB | 2,325 ms | 9.5 | 0.211 |
| Omnilingual 300M | sherpa-onnx offline | 300M | ~365 MB | 2,360 ms | — | 0.215 |
| Whisper Base | whisper.cpp | 74M | ~150 MB | 6,501 ms | 3.4 | 0.591 |
| Qwen3 ASR 0.6B | qwen-asr (C) | 600M | ~1.9 GB | 13,359 ms | 1.6 | 1.214 |
| Whisper Small | whisper.cpp | 244M | ~500 MB | 21,260 ms | 1.0 | 1.933 |
| Whisper Large v3 Turbo | whisper.cpp | 809M | ~834 MB | 92,845 ms | 0.2 | 8.440 |
| Windows Speech | Windows Speech API | N/A | 0 MB | — | — | — |
使用 11 秒 JFK 就职演说音频片段(22 个单词)进行测试。所有模型均在 x86_64 CPU 上运行(i5-1035G1, 4C/8T)——无 GPU 加速。Parakeet TDT v2 兼具快速推理(17.8 words/s)和标点输出功能,表现突出。
局限性
- 仅测速度:本基准仅测量推理速度,不评估转写准确率(WER/CER)。准确率因模型、语言和音频条件而异,开发者应针对目标场景单独评估。
- 单一音频样本:所有平台使用同一段 JFK 就职演说录音,其他音频特征(噪声、口音、领域词汇)可能产生不同结果。
- Windows 片段长度:Windows 使用 11 秒音频片段,而其他平台使用 30 秒,跨平台速度比较时应考虑此差异。
- iOS OOM 数值:标记为 OOM 的 iOS 模型的 tok/s 值是在崩溃前测得的,不代表完整成功的运行。
未来研究方向
- 增加准确率基准:将速度指标与多语言数据集及噪声环境下的 WER/CER 相结合。
- 扩展音频条件:在单一语音样本之外,增加长音频、多人重叠说话及领域词汇(会议、呼叫中心、工业场景)。
- 量化全面测试:在各引擎上对 INT8/INT4 和混合精度变体进行基准测试,绘制内存/速度/准确率权衡曲线。
- 更小的 Qwen3-ASR 模型:测试 Qwen3-ASR-0.6B 及未来低于 1B 的检查点,验证速度提升是否足以弥补质量损失。
- 功耗与温度分析:测量持续端侧转写工作负载的电池消耗和持续性能。
结论
端侧语音转写在所有主流移动和桌面平台上均可实现超实时速度。推理引擎的选择与模型选择同样重要——Android 上的 sherpa-onnx 和 Apple 平台上的 CoreML 相比朴素 CPU 推理可带来 10~50 倍的加速。在最快的模型中,Moonshine Tiny(英语)或 Whisper Tiny(多语言)搭配合适的引擎,能以极低的内存开销实现实时转写。模型选择时还应考虑本基准未测量的转写准确率(WER)。
参考资料
我们的仓库:
- android-offline-transcribe — Android 基准测试应用(Apache 2.0)
- ios-mac-offline-transcribe — iOS/macOS 基准测试应用(Apache 2.0)
- windows-offline-transcribe — Windows 基准测试应用(Apache 2.0)
模型:
- Moonshine Tiny/Base — Useful Sensors,仅英语
- Whisper Tiny/Base/Small/Turbo — OpenAI,99 种语言
- SenseVoice Small — FunAudioLLM,5 种语言
- Parakeet TDT 0.6B v3 — NVIDIA NeMo,25 种欧洲语言
- Qwen3 ASR 0.6B — Alibaba Qwen,30 种语言
- Zipformer Streaming — Next-gen Kaldi,英语
- Omnilingual 300M — MMS,1,600+ 种语言
推理引擎:
- sherpa-onnx — Next-gen Kaldi ONNX Runtime
- whisper.cpp — OpenAI Whisper 的 C/C++ 移植
- WhisperKit — 面向 Apple 的 CoreML Whisper
- MLX — Apple 机器学习框架


