
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での結果を報告しており、実際にデプロイするモバイルやラップトップのハードウェアでの結果ではありません。
本ベンチマークは、デプロイ時の選択問題に直接対応します。各ターゲットプラットフォームでどのモデル+エンジンの組み合わせがリアルタイム文字起こしを実現できるか、メモリ制約はどうか、という点を実測データで示しています。
方法
Android、iOS、macOSのベンチマークでは、JFKの就任演説をループした30秒のWAVファイル(16kHz、モノラル、PCM 16ビット)を使用しています。Windowsベンチマークでは同じ音源から11秒の抜粋を使用しています(詳細はWindowsセクション参照)。
測定指標(速度のみ — 文字起こし精度/WERは測定対象外):
- 推論時間:エンジン呼び出しから結果取得までの実測時間
- tok/s:1秒あたりの出力単語数(高いほど高速)
- RTF:リアルタイムファクター — 処理時間と音声長の比率(1.0未満=リアルタイムより高速)
テストデバイス:
| デバイス | チップ | RAM | OS |
|---|---|---|---|
| Samsung Galaxy S10 | Exynos 9820 | 8 GB | Android 12 (API 31) |
| iPad Pro 第3世代 | A12X Bionic | 4 GB | iOS 17+ |
| MacBook Air | Apple M4 | 32 GB | macOS 15+ |
| ノートPC | 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モデルがパス — OOMは0件。唯一の失敗(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 第3世代、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 RAMにより、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就任演説の1つの録音を使用しています。他の音声特性(ノイズ、アクセント、ドメイン固有の語彙)では結果が異なる可能性があります。
- Windowsのクリップ長:Windowsは他のプラットフォームの30秒に対して11秒の音声クリップを使用しているため、クロスプラットフォームの速度比較ではこの差を考慮する必要があります。
- 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の機械学習フレームワーク


