Nexta Tech Blog
🎤

Whisperを使ったC#の音声認識アプリ開発

に公開

はじめに

ネクスタの tetsu.k です。
生産管理システム「SmartF」の開発に携わっています。

今回は、C#で音声を扱う方法を調べてみました。
主に以下の処理を、手元で環境構築してやってみた感じです。

  • 音声入力
  • 音声認識
  • 文字起こし

作ったもの

「文字起こしアプリ」を作りました。

文字起こしアプリのスクリーンショット

フレームワークは Windows Formsです。
デザインは適当です。
モデル取得以外は、オフラインで動きます。

録音にはNAudioを使用。

これを使ってマイクとPC音の両方を試すと、問題なくキャプチャできました。
録音された音声ファイルはwavとしてセットされます。

次に、音声認識。
OpenAIの開発したWhisperのOSS版を使いました。
Whisper.cppを.NETで扱えるようにしたWhisper.netです。

アプリ上でモデルを選べるようにしています。
モデルを選ぶとHugging Faceからモデルを取得します。

Whisperには複数のモデルがあり、精度と速度がトレードオフの関係になっています。

モデル サイズ 速度 精度 用途
Tiny 75MB ★★★★★ ★☆☆☆☆ デモ・リアルタイム処理
Base 142MB ★★★★☆ ★★☆☆☆ バランス型(推奨)
Small 466MB ★★★☆☆ ★★★☆☆ 高精度が必要な場合
Medium 1.5GB ★★☆☆☆ ★★★★☆ より高精度
Large V3 2.9GB ★☆☆☆☆ ★★★★★ 最高精度
Large V3 Turbo 1.6GB ★★☆☆☆ ★★★★★ 最新・高精度・高速

今回はLarge V3 Turboで試しました。

文字起こし実行ボタンを押すと、音声がテキストに変換されます。

実際に文字起こししてみた

自社プロダクト「SmartF」の紹介動画(2分20秒)を文字起こししてみました。

https://www.youtube.com/watch?v=yUXriJ85q3k

文字起こし条件:

  • モデル: LargeV3Turbo(最新の高速大型モデル)
  • 言語: 日本語(ja)
  • 音声長さ: 2分20秒
文字起こし結果(全文)

00:01.00 - 00:05.32
スモールスタートできる生産管理システムスマートF

00:05.32 - 00:12.18
日々の生産現場ではたくさんの手書き帳表やエクセル管理など

00:12.18 - 00:15.54
多くの煩雑で非効率な作業があります

00:15.54 - 00:22.22
仕入れ部品の在庫や工程進捗、人や設備の負荷率などがわからず

00:22.22 - 00:25.04
生産計画や発注業務を大変

00:26.98 - 00:30.98
二重入力や都度現場に確認などの無駄な作業や

00:30.98 - 00:36.98
熟練社員の経験による俗人的な業務もたくさんあります

00:36.98 - 00:40.38
スマートFを導入すると

00:40.38 - 00:47.28
今まで手書きで書いていた作業日報をバーコードを活用して現場で簡単入力したり

00:47.28 - 00:53.96
仕入れ部品や製品もバーコードで簡単に入出庫記録を行います

00:53.96 - 00:58.96
これにより工程進捗や在庫管理、負荷率などが見える化され

00:58.96 - 01:03.96
簡単に最適な生産計画や発注業務が可能になります

01:03.96 - 01:08.96
また、各工程の検査結果や設備データなども

01:08.96 - 01:11.96
端末やセンサを使ってデータ化し

01:11.96 - 01:15.96
トレーサビリティや設備稼働監視なども可能になります

01:15.96 - 01:20.96
バーコードやハンディ端末などを利用して

01:20.96 - 01:25.96
現場のあらゆるデータを手間なくスマートFへ集約

01:25.96 - 01:28.96
現場の手書き帳表やExcel管理など

01:28.96 - 01:31.96
多くの無駄やミスなどを減らせると同時に

01:31.96 - 01:34.96
俗人的な業務も解消できます

01:34.96 - 01:39.96
さらに、スマートFで集約したデータで現場の見える化をすると

01:39.96 - 01:44.96
改善すべきポイントが一目瞭然

01:44.96 - 01:48.96
社内の無駄を減らした時間を改善の取り組みの時間に使い

01:48.96 - 01:50.96
それを継続することで

01:50.96 - 01:56.96
生産効率や品質を大きく向上させていくことが可能です

01:56.96 - 01:59.96
スマートFには10の機能があり

01:59.96 - 02:02.96
必要な機能だけを選んで導入が可能

02:02.96 - 02:07.96
後から徐々に機能を追加していくことができるので

02:07.96 - 02:10.96
スモールスタートでシステム導入ができます

02:10.96 - 02:12.96
うまく運用できるまで

02:12.96 - 02:16.96
しっかりと導入サポートを行います

02:16.96 - 02:19.96
ものづくりをスマートに!

02:19.96 - 02:20.96
NEXT

Largeモデルの変換結果は、多少の誤字はあれど高精度でした。
ネクスタがNEXTになっているくらいで、ほぼ正確に文字起こしできています。

わちゃわちゃした雑談の音声が正しく認識できるかは、今後検証してみたいですね。

音声コマンドの検証

最後に、音声入力コマンドを検証してみました。
予め定義されたワードをトリガーに、ダイアログを表示できるか試しました。

私: 「ポップアップを開いて」

検証結果(モデル: Base):

音声コマンドの認識失敗例

全然伝わっていない…😂

この後、Smallモデルに変更したところ成功しました。
あまり大きなモデルだと処理時間も掛かるので、モデル選定が重要になりそうです。

感想

音声関連の実装は、AI任せで素直に動きました。
Nugetライブラリが充実していて、ありがたいですね。

モデルの使い分けには、もう少し検討が必要そうです。
現状、こんな感じです。

  • 文字起こし:Large以上。時間かかるが精度優先
  • 音声コマンド:small以上。時間と精度のバランスが求められる

実用面では、色々と活用の幅がありそうです。

  • 音声で日報作成
  • 業務アプリで音声コマンド入力機能(ハンズフリー操作)
  • 自分のPCを音声で操ってみる

等々。

リアルタイム文字起こしや複数人の会話など、まだ試せていない部分もあるので、
時間を見つけて検証してみます。

参考リンク

GitHubで編集を提案
Nexta Tech Blog
Nexta Tech Blog

Discussion