title: ローカルGPUで爆速日本語音声入力を自作した話
categories: AI, 自作PC
tags: 音声入力, Whisper, kotoba-whisper, Rust, GPU, 自作
ローカルGPUで爆速日本語音声入力を自作した話
きっかけ:「Windowsキー + H」で音声入力できるOSが欲しかった
Windowsには標準で「Windowsキー + H」で音声入力を起動できる機能があります。あれ、便利ですよね。
Linux(Ubuntu)に乗り換えてから、あれと同等のことができないのがずっと気になっていました。
そこで作ったのが、今回紹介する 自前の音声入力デーモン です。
システムの全体像
構成はシンプルです。
[Windowsキー + H] を押す
↓
arecord でマイク録音開始(キーを押している間)
↓
キーを離す → 録音停止
↓
RTX 3060(ローカルGPU)で kotoba-whisper 推論
↓
認識したテキストをクリップボードへ
↓
Ctrl+V で自動貼り付け(どのアプリにも)
キーボードを叩くのではなく、話しかけてそのままテキストが入力される 感覚です。
技術選定のポイント
言語:Rust
常駐デーモンとして24時間起動しておくので、メモリ効率とパフォーマンスを重視してRustを採用しました。evdev でキーボードイベントを直接捕捉し、uinput で仮想キーボードを生成してCtrl+Vを再現しています。
音声認識モデル:kotoba-whisper-v2.0
当初はOpenAIのWhisper largeモデル(ggml-large-v3-turbo.bin)を使っていましたが、kotoba-whisper に乗り換えました。
kotoba-whisperはWhisper large-v3を日本語データで追加学習したモデルで、特に:
– 口語・話し言葉の認識精度が向上
– 固有名詞(地名・人名)の誤認識が減少
– 速度はほぼ同等
という特徴があります。Whisperをすでに使っている方はモデルファイルを差し替えるだけで試せます。
GPU指定:UUIDで確実に RTX 3060 を使う
私のPCはGTX 1650(映像出力専用)とRTX 3060(AI処理専用)のデュアルGPU構成です(この構成については別の記事で紹介しています)。
CUDA_VISIBLE_DEVICES=1 のようなインデックス指定は sudo 環境だと環境変数が引き継がれず、小さい方のGPUが使われてしまうことがありました。
そこで GPU UUID で直接指定する方法に変更しました:
unsafe {
std::env::set_var(
"CUDA_VISIBLE_DEVICES",
"GPU-5e9ee7b1-5492-7b5f-3397-d82eceb2293b" // RTX 3060のUUID
);
}
UUIDは nvidia-smi -L で確認できます。これで確実にRTX 3060が選ばれるようになりました。
こだわりポイント:Obsidianの単語帳でWhisperをカスタマイズ
Whisperには initial_prompt という機能があります。これは「こういう単語が出てくるよ」という文脈ヒントを事前に渡すことで、固有名詞の認識精度を大幅に上げられる機能です。
最初は「前回認識したテキストを渡せばいいのでは?」と考えたのですが、誤認識した内容がそのまま次の認識のコンテキストとして渡されてしまうという欠点があります。
そこで採用したのが、Obsidianの手帳から固有名詞リストを専用ファイルとして管理する方式です。
voice-typer-vocab.md というファイルを手帳に作り、よく使う単語を自分でメンテしていきます。
以下は例です:
## 人名
(よく会話に登場する知人や同僚の名前など)
## 地名
(よく行く場所や地元の地名など)
## プロジェクト
ゴンラス
Obsidian
Raspberry Pi
## 技術用語
kotoba-whisper
VOICEVOX
RAG
MCP
このファイルをvoice-typerが60秒ごとに自動リロードするため、Obsidianで単語を追加するだけで次の認識から反映されます。
使ってみた感想
率直に言って、思ったより精度が高い です。
Windows標準の音声入力(Win+H)と比べても、誤変換や文脈の勘違いが少なく、精度は格段に高いと感じました。
また、以前はWhisperのミディアムモデル(Medium)も試したことがありましたが、それと比較しても今回の kotoba-whisper-v2.0 は段違いに精度が高く、体感できるレベルで実用性が向上しています。
普通の日本語は9割以上の確率で正確に認識されますし、固有名詞もvocabファイルに登録しておけば、かなり正確に拾ってくれます。
圧倒的なレスポンス速度
精度だけでなく、速度も申し分ありません。
プログラム内に精密なタイマーを仕込んで計測したところ、RTX 3060を使った推論では、約13秒ほど喋った長めの音声データでも、キーを離してからわずか「0.6秒」で瞬時に文字に変換されてペーストされました。
クラウドのAPIを経由しないため、ネットワークの遅延もなくまさに「爆速」です。
何よりキーボードに触れなくてもテキストが打てるというのは、長文を書くときや両手がふさがっているときに非常に助かります。
Localで完結しているので、APIコストはゼロです。RTX 3060があれば同様の環境が作れます。
まとめ
| 項目 | 内容 |
|---|---|
| キーバインド | Windowsキー(Meta)+ H |
| 音声認識モデル | kotoba-whisper-v2.0 (日本語特化) |
| 推論デバイス | RTX 3060 (VRAM 12GB) |
| プログラム言語 | Rust |
| 辞書管理 | Obsidian vault内の voice-typer-vocab.md |
| APIコスト | ゼロ(完全ローカル) |
Linuxで音声入力に困っている方、ぜひ試してみてください。