Windows/Mac対応!Whisper CPPで始めるローカル音声認識

はい、承知いたしました。Windows/MacでWhisper CPPを使用してローカルで音声認識を行う方法に関する詳細な記事を作成します。約5000語を目指し、手順、解説、応用、トラブルシューティングなどを網羅的に記述します。


Windows/Mac対応!Whisper CPPで始めるローカル音声認識 – 詳細解説

はじめに

テクノロジーの進化により、私たちの声はますます重要な情報伝達手段となっています。会議の議事録作成、動画コンテンツの字幕生成、音声コマンドによるデバイス操作など、音声認識技術は多岐にわたる分野で活用されています。これらの音声認識の多くは、Google Cloud Speech-to-TextやAWS TranscribeなどのクラウドAPIを利用しています。クラウドAPIは手軽で高性能ですが、インターネット接続が必須であること、機密性の高い音声データを外部に送信する必要があること、そして利用量に応じたコストが発生するといった課題も存在します。

こうしたクラウドAPIの課題を克服する手段として、ローカルで音声認識を実行するというアプローチが注目されています。ローカル実行には、プライバシーの確保(外部にデータを送らない)、オフラインでの利用(インターネット不要)、そしてランニングコストがかからない(一度セットアップすれば無料)といった明確なメリットがあります。

ローカル音声認識を実現する上で、近年最も注目されている技術の一つが、OpenAIが開発した高性能な音声認識モデル「Whisper」です。そして、そのWhisperモデルをC++で効率的に実装し、様々な環境で軽量かつ高速に動作させることを目指して開発されているのが「Whisper CPP」です。

本記事では、WindowsおよびMacユーザーが、Whisper CPPを使ってご自身のPC上でローカル音声認識を始めるための詳細な手順を、準備からセットアップ、ビルド、実行、そしてトラブルシューティングに至るまで、網羅的に解説します。約5000語を費やし、読者がこの記事を読むだけでWhisper CPPを使ったローカル音声認識をマスターできることを目指します。

第1部: Whisper CPPの理解

ローカル音声認識の世界に足を踏み入れる前に、まずWhisper CPPとは何か、そしてその基盤となるOpenAI Whisperモデルについて理解を深めましょう。

1.1 OpenAI Whisperモデルとは?

OpenAI Whisperは、2022年9月にOpenAIが発表した高性能な汎用音声認識モデルです。インターネット上の68万時間という膨大な多言語かつマルチタスク(音声認識、翻訳、言語識別など)のデータを学習して開発されました。

その最大の特徴は、単に音声をテキストに変換するだけでなく、多言語に対応し、さらに音声から英語への翻訳も可能である点です。また、非常にロバストであり、様々なアクセントや背景ノイズ、技術用語なども比較的高い精度で認識することができます。

OpenAIはWhisperモデルをオープンソースとして公開しており、誰でもそのモデルアーキテクチャや学習済みモデルを利用できるようになっています。ただし、オリジナルの実装はPythonやPyTorchなどのディープラーニングフレームワークに依存しており、そのままでは特定の環境やハードウェアでの実行に制約がありました。

1.2 Whisper CPPとは?

Whisper CPPは、OpenAIのWhisperモデルをC++言語でゼロから再実装したプロジェクトです。このプロジェクトの主な目的は、様々なハードウェア環境で、より軽量かつ高速にWhisperモデルを実行することです。

C++で実装することで、Pythonや特定のフレームワークへの依存性を排除し、コンパイル時にターゲット環境に合わせて最適化を行うことが可能になります。特に、ggmlという独自のテンソルライブラリ(CPU上で高速な行列計算を行うためのライブラリ)を使用することで、GPUを持たない環境でも効率的な推論(音声認識処理)を実現しています。

Whisper CPPの主な特徴は以下の通りです。

  • C++による軽量かつ高速な実装: 低リソース環境でも動作しやすく、処理速度も向上。
  • GGML/GGUFフォーマットの採用: モデルデータを効率的に扱うための独自フォーマット。CPU処理に最適化されており、量子化モデルにも対応。
  • クロスプラットフォーム対応: Windows, macOS, Linuxはもちろん、WebAssembly、iOS、Androidなど、幅広い環境でのビルドと実行をサポート。
  • GPUアクセラレーション: NVIDIA (cuBLAS)、Apple Silicon (Metal)、Intel/AMD (OpenCL/SYCL – 実験的) など、主要なGPUバックエンドをサポートし、さらなる高速化が可能。
  • 低リソースでの動作: 大量のRAMや高性能GPUが必須ではなく、比較的古いPCでも実行可能(モデルサイズによる)。
  • コミュニティ主導の開発: 活発なコミュニティによって継続的に改善、最適化が行われている。

1.3 なぜWhisper CPPを選ぶのか?

ローカルで音声認識を実行するための選択肢はWhisper CPPだけではありませんが、Windows/MacユーザーにとってWhisper CPPは非常に魅力的な選択肢です。その理由を改めて整理しましょう。

  1. プライバシーの確保: 音声データがPCの外に出ることがないため、会議内容や個人的な会話など、機密性の高い情報を安全に処理できます。
  2. オフラインでの利用: インターネット接続が不要なので、ネットワーク環境のない場所や、安定しない場所でも問題なく使用できます。
  3. コスト効率: クラウドAPIのような従量課金は発生しません。一度セットアップすれば、無料で何度でも利用できます。
  4. 高速な処理: C++実装とGGML/GGUFによる最適化により、特にCPU環境や、対応GPUがあれば非常に高速な処理が可能です。処理速度はPCのスペックに依存しますが、多くの場合、クラウドAPIに匹敵するかそれ以上の速度が出ます。
  5. 幅広い互換性: WindowsとMacの両方でほぼ同じ手順でセットアップでき、様々なハードウェア構成に対応します。
  6. 柔軟性とカスタマイズ性: コマンドラインオプションが豊富に用意されており、認識言語、処理スレッド数、出力形式などを細かく制御できます。開発者であれば、ソースコードを改変したり、ライブラリとして自身のアプリケーションに組み込んだりすることも可能です。

これらの理由から、プライバシーを重視する方、オフラインでの利用が多い方、コストを抑えたい方、そしてPCの性能を最大限に活用したい方にとって、Whisper CPPは最適なローカル音声認識ソリューションと言えるでしょう。

第2部: 事前準備

Whisper CPPをセットアップする前に、いくつかの準備が必要です。必要なハードウェア、ソフトウェア、そしてモデルファイルについて確認しましょう。

2.1 ハードウェア要件

Whisper CPPは比較的低リソースで動作しますが、快適に利用するためにはある程度のスペックが推奨されます。

  • CPU: 音声認識処理の大部分はCPUで行われます。コア数が多いほど、また周波数が高いほど処理は速くなります。近年のマルチコアCPUであれば、十分な性能を発揮できます。
  • メモリ (RAM): 使用するモデルのサイズによって必要なメモリ量が大きく変わります。
    • tinybaseモデルであれば、8GBでも動作可能ですが、他のアプリケーションとの兼ね合いを考えると16GB以上が推奨されます。
    • smallmediumモデルでは16GB以上が推奨されます。
    • large-v3などの大きなモデルを使用する場合、32GB以上あると安定して高速に動作します。特に、大きな音声ファイルを処理する際にはメモリを消費します。
  • GPU (オプション): GPUは必須ではありませんが、NVIDIA (CUDA/cuBLAS対応) やApple Silicon (Metal対応) などの対応GPUがある場合、処理速度を劇的に向上させることができます。GPUを使用する場合、GPUメモリ(VRAM)の容量も重要です。大きなモデルを使うほど多くのVRAMが必要です。
    • smallモデル: 4GB以上のVRAM
    • mediumモデル: 8GB以上のVRAM
    • large-v3モデル: 10GB以上のVRAM
      GPUが利用できない場合やVRAMが不足している場合でも、CPUで処理されるため認識自体は可能です。
  • ストレージ容量: Whisper CPPのソースコード自体は小さいですが、モデルファイルは種類によって数百MBから数GBのサイズがあります。複数のモデルを試す場合は、それなりの空き容量が必要です。また、処理する音声ファイルや出力されるテキストファイルのための容量も確保しておきましょう。

2.2 ソフトウェア要件

Whisper CPPをビルドして実行するためには、以下のソフトウェアが必要です。

  • 対応OS:
    • Windows 10 / 11 (64-bit)
    • macOS (Intel / Apple Silicon)
  • ビルドツール:
    • Git: Whisper CPPのソースコードをダウンロードするために使用します。
    • CMake: ビルドシステムを生成するために使用します。バージョン3.16以上が推奨されます。
  • 開発環境 (コンパイラ):
    • Windows: Visual Studio 2019以降のC++デスクトップ開発ツールチェーン(MSVCコンパイラ)。Visual Studio Communityエディションで十分です。Build Toolsのみをインストールすることも可能です。
    • Mac: Xcode Command Line Toolsに含まれるClangコンパイラ。ターミナルを開いてxcode-select --installコマンドでインストールできます。
  • FFmpeg (推奨): Whisper CPP自体はWAV形式の音声ファイルしか直接処理できません。MP3やMP4などの他の形式のファイルを処理するには、FFmpegというツールが必要です。FFmpegがシステムパスに通っている場合、Whisper CPPは自動的にFFmpegを使って音声をデコードします。これは必須ではありませんが、多くの音声形式に対応するためにインストールしておくことを強く推奨します。

2.3 モデルファイルの準備

Whisper CPPは、OpenAI WhisperモデルをGGML/GGUFフォーマットに変換したファイルを使用します。このフォーマットはCPUでの効率的な計算に最適化されています。

GGML/GGUFフォーマットについて

当初Whisper CPPはGGMLフォーマットを使用していましたが、現在はその後継であるGGUF (GGML Unified Format)への移行が進んでいます。GGUFはより多くの情報(メタデータ、トークン情報など)を保持でき、将来的な拡張性も考慮されています。Whisper CPPの最新版はGGUFフォーマットのモデルを主に使用します。

モデルの種類とサイズ

Whisperモデルにはいくつかのサイズがあります。一般的に、モデルが大きいほど認識精度は向上しますが、必要なメモリ量が増え、処理速度は遅くなる傾向があります。

モデル名 パラメータ数 ファイルサイズ (GGML/GGUF) VRAM推奨 (fp16) 主な特徴
tiny 39M ~75MB N/A 最小、最速。精度は最も低い。
base 74M ~142MB N/A tinyより少し大きい。速度と精度のバランス。
small 244M ~466MB 4GB以上 多くのユースケースで実用的な精度。
medium 769M ~1.5GB 8GB以上 高精度。大きなモデルの前に試す価値あり。
large 1550M ~2.9GB 10GB以上 最高精度。large-v2large-v3がある。
large-v1 ~2.9GB 10GB以上 初期の大型モデル。
large-v2 ~2.9GB 10GB以上 largeの改良版。
large-v3 ~2.9GB 10GB以上 large-v2の改良版。精度がさらに向上。

これらのモデルには、多言語版(tiny, base, small, medium, large)と、英語専用版(.enが付く tiny.en, base.en, small.en, medium.en)があります。英語専用版は、英語の認識においては多言語版よりも高速かつ高精度な場合があります。

また、モデルファイル名の末尾に.q4_0.q5_0などが付いているものは「量子化モデル」です。これはモデルの重み(パラメータ)をより少ないビット数で表現することで、ファイルサイズとメモリ使用量を削減し、推論速度を向上させたものです。量子化の度合いによって精度は若干低下しますが、多くの場合、速度とリソース削減のメリットが大きいため推奨されます。特にGPUメモリが少ない場合や、CPUで少しでも速く実行したい場合に有効です。

モデルファイルのダウンロード方法

Whisper CPPリポジトリには、モデルファイルをダウンロードするためのスクリプトが用意されています。

  1. Whisper CPPリポジトリをクローンしたディレクトリに移動します。
  2. modelsディレクトリに移動します。
  3. 以下のスクリプトを実行します。

    “`bash

    Windows (Git Bash などを使用) または Mac/Linux

    ./download-ggml-model.sh
    “`

    <model_name>にはダウンロードしたいモデルの名前を指定します。例:base.en, small, medium, large-v3, large-v3.q5_0 など。

    例: smallモデルをダウンロードする場合

    bash
    ./download-ggml-model.sh small

    例: large-v3の量子化モデル (q5_0) をダウンロードする場合

    bash
    ./download-ggml-model.sh large-v3.q5_0

スクリプトを実行すると、指定したモデルファイル(例: ggml-small.bin または ggml-large-v3-q5_0.bin)がmodelsディレクトリにダウンロードされます。

手動ダウンロードの代替方法: スクリプトがうまく動作しない場合や、特定のバージョンのモデルが必要な場合は、以下のURLからモデルファイルを直接ダウンロードすることも可能です。
https://huggingface.co/ggerganov/whisper.cpp/tree/main
このページから、必要な.binまたは.ggufファイルを選択してダウンロードし、Whisper CPPのディレクトリ内の任意の場所(通常はmodelsディレクトリ)に配置してください。

これで、Whisper CPPのセットアップとビルドに必要なものが全て揃いました。

第3部: Whisper CPPのセットアップとビルド

いよいよWhisper CPPのソースコードを取得し、実行可能ファイルをビルドする手順です。WindowsとMacで手順が若干異なりますので、ご自身の環境に合わせて進めてください。

3.1 ソースコードの取得

まず、Whisper CPPのソースコードをGitHubからダウンロードします。これにはGitコマンドを使用します。

  1. コマンドプロンプト(Windows) または ターミナル(Mac) を開きます。
  2. ソースコードを配置したいディレクトリに移動します。例: cd Documents/GitHub
  3. 以下のコマンドを実行して、Whisper CPPリポジトリをクローンします。

    bash
    git clone https://github.com/ggerganov/whisper.cpp.git

    これにより、現在のディレクトリ内にwhisper.cppという新しいフォルダが作成され、その中にソースコードがダウンロードされます。

  4. クローンしたディレクトリに移動します。

    bash
    cd whisper.cpp

これで、Whisper CPPのソースコードがPC上に準備できました。

3.2 ビルド環境の構築

Whisper CPPのソースコードを実行可能ファイルに変換する「ビルド」という作業を行います。ビルドにはコンパイラなどの開発ツールが必要です。

Windowsの場合

Visual Studio CommunityまたはBuild Toolsをインストールし、C++デスクトップ開発ワークロードを選択していることを確認してください。インストール後、ビルドに使うための特別なコマンドプロンプトを開きます。

  1. Windowsのスタートメニューを開き、「Visual Studio」や「VS」などと検索します。
  2. 「Developer Command Prompt for VS [バージョン]」または「x64 Native Tools Command Prompt for VS [バージョン]」といった名前の項目を見つけ、クリックして開きます。通常のコマンドプロンプトやPowerShellではないので注意してください。このコマンドプロンプトは、ビルドに必要な環境変数(コンパイラのパスなど)があらかじめ設定されています。
  3. 開いたDeveloper Command Promptで、先ほどクローンしたwhisper.cppディレクトリに移動します。例: cd C:\Users\YourUsername\Documents\GitHub\whisper.cpp
Macの場合

Xcode Command Line Toolsがインストールされていることを確認します。インストールされていない場合は、ターミナルで以下のコマンドを実行します。

bash
xcode-select --install

画面の指示に従ってインストールを完了させてください。既にインストールされている場合は、「command line tools are already installed」のようなメッセージが表示されます。

これで、ビルドに必要な環境が整いました。

3.3 Whisper CPPのビルド

CMakeを使ってビルドシステムを生成し、その後にコンパイラを使ってビルドを実行します。

基本的なビルド手順

GPUサポートを有効にしない基本的なビルド手順です。

  1. Whisper CPPディレクトリcd whisper.cpp で移動したディレクトリ)にいることを確認してください。
  2. ビルド用のディレクトリを作成し、そこに移動します。

    bash
    mkdir build
    cd build

    ソースコードがあるディレクトリとは別の場所でビルドするのが一般的な作法です。

  3. CMakeを使ってビルドシステム(MakefileやVisual Studioプロジェクトファイルなど)を生成します。

    bash
    cmake ..

    ..は親ディレクトリ(whisper.cpp)にあるCMakeLists.txtというファイルを参照するという意味です。このコマンドを実行すると、使用しているOSと開発環境に応じたビルドファイルがbuildディレクトリ内に生成されます。

  4. 生成されたビルドシステムを使ってビルドを実行します。

    • Windows (Developer Command Prompt for VS):

      bash
      msbuild ALL_BUILD.vcxproj /p:Configuration=Release

      または、cmake --build . --config Release というクロスプラットフォームなコマンドも使えます。

      bash
      cmake --build . --config Release

    • Mac (ターミナル):

      bash
      make

      または

      bash
      cmake --build .

    これらのコマンドを実行すると、ソースコードがコンパイルされ、リンクされ、最終的な実行可能ファイルが生成されます。ビルドには数分かかる場合があります。

  5. ビルドが成功すると、buildディレクトリ内(またはWindowsの場合はbuild\Releaseディレクトリ内)にmain(Windowsの場合はmain.exe)という実行可能ファイルが生成されます。これが音声認識を実行するためのプログラムです。

GPUサポートを有効にしたビルド(オプション、重要)

対応するGPUを持っている場合、GPUサポートを有効にすることで処理速度を大幅に向上させることができます。GPUの種類によって手順が異なります。

Windows (NVIDIA GPU with CUDA/cuBLAS):

NVIDIA GPUで高速化するには、事前にNVIDIA CUDA Toolkitをインストールしておく必要があります。お使いのGPUとOSに対応したCUDA ToolkitをNVIDIAのウェブサイトからダウンロードしてインストールしてください。

  1. Developer Command Prompt for VSを開き、whisper.cpp/buildディレクトリに移動します。
  2. CMakeを実行する際に、-DWISPER_CUBLAS=ONオプションを追加します。

    bash
    cmake .. -DWISPER_CUBLAS=ON

    もしCUDA Toolkitがデフォルト以外の場所にインストールされている場合は、-DCMAKE_PREFIX_PATH="C:/path/to/cuda"のようにパスを指定する必要があるかもしれません。

  3. CMakeの実行結果に-- CUBLAS: enabledのような表示が出ていることを確認します。

  4. 通常通りビルドを実行します。

    “`bash
    msbuild ALL_BUILD.vcxproj /p:Configuration=Release

    または

    cmake –build . –config Release
    “`

Mac (Apple Silicon with Metal):

Apple Silicon搭載Macの場合、macOSに内蔵されているMetalフレームワークを利用してGPUアクセラレーションが可能です。

  1. ターミナルを開き、whisper.cpp/buildディレクトリに移動します。
  2. CMakeを実行する際に、-DWISPER_METAL=ONオプションを追加します。

    bash
    cmake .. -DWISPER_METAL=ON

    注: かつては-DWISPER_ACCELERATE=ONオプションもありましたが、これは古いバージョンでMetalではなくAccelerateフレームワーク(主にCPU上のベクトル演算最適化)を使用するものでした。現在のApple Silicon Macでは-DWISPER_METAL=ONが推奨されます。

  3. CMakeの実行結果に-- Metal enabled: YESのような表示が出ていることを確認します。

  4. 通常通りビルドを実行します。

    “`bash
    make

    または

    cmake –build .
    “`

その他のGPU (OpenCLなど):

Intelの内蔵GPUやAMD GPUなど、OpenCLに対応したGPUを使用する場合、-DWISPER_CLBLAS=ONオプションを使ってビルドすることでアクセラレーションが可能になる場合があります。ただし、OpenCLサポートはcuBLASやMetalに比べて安定性が低い可能性があり、環境によっては正しく動作しないこともあります。

  1. 適切なOpenCLドライバがインストールされていることを確認します。
  2. whisper.cpp/buildディレクトリで以下のCMakeコマンドを実行します。

    bash
    cmake .. -DWISPER_CLBLAS=ON

  3. ビルドを実行します (msbuildまたはmake)。

ビルド結果の確認

ビルドが成功したら、buildディレクトリ(Windowsの場合はbuild\Release)の中にmain(またはmain.exe)という実行可能ファイルが存在するか確認してください。

3.4 モデルファイルの配置

ダウンロードしたモデルファイル(例: ggml-small.binggml-large-v3-q5_0.ggufなど)を、main実行可能ファイルからアクセスできる場所に配置します。最も簡単な方法は、whisper.cppディレクトリの直下、またはmodelsディレクトリに配置することです。

これで、Whisper CPPを使った音声認識を実行する準備が全て整いました。

第4部: 音声認識の実行

ビルドしたmainプログラムを使って、実際に音声認識を実行してみましょう。ここでは、基本的な使い方から、よく使うコマンドラインオプション、そして具体的な実行例までを詳しく解説します。

4.1 mainプログラムの基本的な使い方

mainプログラムはコマンドラインインターフェースで動作します。必要な情報をオプションとして渡して実行します。

基本的な構文は以下の通りです。

bash
./main -m <model_path> -f <audio_file>

  • ./main: 実行するプログラムのパスです。現在いるディレクトリにmainがある場合は./mainとします。Windowsの場合は.\main.exeまたは単にmain.exeです。以降はmainと表記しますが、ご自身の環境に合わせて読み替えてください。
  • -m <model_path>: 使用するモデルファイルへのパスを指定します。例: -m models/ggml-small.bin
  • -f <audio_file>: 音声認識を行いたい音声ファイルへのパスを指定します。例: -f /path/to/your/audio.wav

簡単な実行例:

whisper.cppディレクトリの直下で作業していると仮定します。modelsディレクトリにggml-small.binがあり、認識したい音声ファイルがaudio.wavという名前でwhisper.cppディレクトリにある場合。

“`bash

Mac/Linux

./main -m models/ggml-small.bin -f audio.wav

Windows (Developer Command Prompt or PowerShell)

.\main.exe -m models\ggml-small.bin -f audio.wav
“`

このコマンドを実行すると、audio.wavファイルの音声認識が開始され、認識されたテキストがコンソールに表示されます。

4.2 よく使うコマンドラインオプションの詳細

mainプログラムには多くのコマンドラインオプションがあり、認識の挙動や出力を細かく制御できます。主要なオプションをいくつか紹介します。すべてのオプションを見るには、main -hを実行してください。

  • -m <model>: 必須。使用するモデルファイル(例: ggml-small.bin, ggml-large-v3-q5_0.gguf)へのパスを指定します。
  • -f <file>: 必須。入力音声ファイルへのパスを指定します。デフォルトではWAV形式が推奨されますが、FFmpegが利用可能であればMP3, MP4 (.m4a), FLACなどの多くの形式に対応できます。
  • -l <lang>: 認識する言語を指定します。指定しない場合、音声から言語を自動検出します。日本語を指定する場合は-l jaとします。言語コードはISO 639-1形式(例: en, ja, fr, de, zhなど)で指定します。自動検出は便利な機能ですが、短い音声や複数の言語が混ざった音声では失敗することもあります。特定の言語と分かっている場合は明示的に指定した方が精度が安定します。
  • -t <n>: 音声認識処理に使用するスレッド数を指定します。デフォルトではシステムのスレッド数が使用されます。コア数の多いCPUを使用している場合、この値を調整することで処理速度が変わることがあります。通常はデフォルトで問題ありませんが、リソースを節約したい場合や、他の作業と並行したい場合は小さく、認識だけを高速に行いたい場合はCPUの論理コア数程度に設定すると良いでしょう。
  • -p <text>: プロンプトとして使用する初期テキストを指定します。認識の最初にある特定の単語やフレーズが分かっている場合に指定すると、認識精度が向上する可能性があります。例: -p "いつもお世話になっております、"
  • -tr: 翻訳モードを有効にします。指定された入力言語(または自動検出された言語)から英語への翻訳を行います。
  • -ps <strategy>: 推論戦略を指定します。greedy(デフォルト)またはbeam searchを選択できます。ビームサーチは複数の候補を探索するため、一般的に精度は高くなりますが、計算コストが増加します。
  • -b <n>: beam search戦略を使用する場合のビームサーチ幅を指定します。デフォルトは-b 5です。値を大きくすると精度が向上する可能性がありますが、処理速度は低下します。
  • タイムスタンプ関連オプション:
    • -ho: 各セグメントの開始/終了タイムスタンプを時分秒ミリ秒形式で出力します。
    • -hs: 各セグメントの開始タイムスタンプをミリ秒形式で出力します。
    • -sp: 各単語の開始タイムスタンプと終了タイムスタンプ、信頼度スコアを出力します(-hoまたは-hsも同時に指定する必要がある場合があります)。
    • -np: セグメントの開始タイムスタンプのみを出力し、終了タイムスタンプは出力しません。
  • 出力形式オプション:
    • -owen: WebVTT形式で出力します。
    • -osrt: SRT形式で出力します。字幕ファイルとして非常に一般的な形式です。
    • -o <format>: 指定したフォーマットで出力します(例: txt, vtt, srt, csv, json)。-owen-osrtはこれのショートカットです。
    • -of <prefix>: 出力ファイル名のプレフィックスを指定します。例: -of outputとすると、output.txt, output.srtなどのファイルが生成されます。
  • 音声処理関連オプション:
    • -ss <n>: 音声の開始位置を秒数で指定します。
    • -se <n>: 音声の終了位置を秒数で指定します。
    • -fp: 入力音声ファイルの最初と最後の無音部分をトリミングします。
  • 分割処理関連オプション (長い音声ファイル向け):
    • -ml <n>: 最大セグメント長をミリ秒で指定します。デフォルトは30000 (30秒) です。音声をこれ以下の長さに分割して処理します。短いセグメントに分割すると、メモリ使用量を抑え、リアルタイム性に近くなりますが、セグメント間の連続性が失われる可能性があります。
    • -mjc <n>: セグメント間の最小結合候補の長さをミリ秒で指定します。セグメントの切れ目での単語の途切れを防ぐために使用されます。
    • -ml0 <n>: セグメントの先頭でスキップする最大無音長をミリ秒で指定します。
    • -ml1 <n>: セグメントの末尾でスキップする最大無音長をミリ秒で指定します。
  • パフォーマンス関連オプション:
    • -ng: GPUを使用しない(GPUビルドした場合でも)。
    • -ngl <n>: モデルの最初のn個のレイヤーをGPUにオフロードしない(CPUで処理する)。VRAMが不足している場合に調整します。

4.3 具体的な実行例と解説

いくつかの一般的なユースケースを想定した実行例を示します。mainプログラムはwhisper.cpp/buildまたはwhisper.cpp/build/Releaseに、モデルファイルはwhisper.cpp/modelsにあると仮定します。音声ファイルはカレントディレクトリにあるとします。コマンドはMac/Linuxを基準に記述しますが、Windowsの場合はパスの区切り文字を\に変え、実行ファイル名をmain.exeとしてください。

例1: 日本語音声ファイルの認識(基本)

日本語の音声ファイルjapanese_audio.wavをsmallモデルで認識し、言語を日本語と明示的に指定します。

bash
./build/main -m models/ggml-small.bin -f japanese_audio.wav -l ja

-l jaを指定することで、日本語として認識するようにモデルに指示します。自動検出よりも精度が安定することが期待できます。

例2: 英語音声ファイルの認識とタイムスタンプ付き出力

英語の音声ファイルenglish_audio.mp3をbaseモデル(英語専用)で認識し、各セグメントの開始/終了タイムスタンプも出力します。FFmpegがインストールされている必要があります。

bash
./build/main -m models/ggml-base.en.bin -f english_audio.mp3 -l en -ho

-fオプションでMP3ファイルを指定しています。-l enで言語を英語に指定し、-hoでタイムスタンプ([00:00:01.234 --> 00:00:05.678] Text...のような形式)を出力させています。

例3: 日本語音声ファイルの英語への翻訳

日本語の音声ファイルjapanese_speech.wavの内容を英語に翻訳します。mediumモデルを使用します。

bash
./build/main -m models/ggml-medium.bin -f japanese_speech.wav -l ja -tr

-l jaで入力言語が日本語であることを指定し、-trオプションで翻訳モードを有効にしています。出力は英語のテキストになります。

例4: 長い音声ファイルの認識(分割処理の効果)

1時間などの長い音声ファイルlong_meeting.wavをlarge-v3モデルで認識します。デフォルトの分割処理が自動的に行われますが、メモリ使用量を抑えたい場合や、より短いセグメントで出力したい場合は-mlオプションを調整します。ここではデフォルト設定で実行します。

bash
./build/main -m models/ggml-large-v3.gguf -f long_meeting.wav

長い音声ファイルの場合、処理に時間がかかります。進捗状況はコンソールに表示されます。メモリ使用量が多くなる可能性があるため、システムメモリやVRAMに注意が必要です。

例5: GPUを使った高速化(NVIDIA cuBLASの場合)

cuBLASを有効にしてビルドしたmainを使用し、GPUを使って認識速度を向上させます。mediumモデルを使用します。

bash
./build/main -m models/ggml-medium.bin -f audio_for_gpu.wav -ngl 0

-ngl 0オプションは、モデルの全レイヤーをGPUにオフロードすることを試みます(VRAMが十分にある場合)。GPUが正しく使われているか確認するには、タスクマネージャー(Windows)やActivity Monitor/nvidia-smi/istat menusなど(Mac/Linux)でGPU使用率を監視します。GPU使用率が高くなっていれば、GPUが使われています。-nglのデフォルト値はモデルによって異なり、部分的にCPUに残す設定になっていることが多いです。明示的に0を指定することでフル活用を試みます。

例6: SRT形式での出力

認識結果をSRTファイルとして出力します。これは動画の字幕作成などに便利です。出力ファイル名は-ofで指定します。

bash
./build/main -m models/ggml-small.bin -f video_audio.wav -l ja -osrt -of output_subtitle

このコマンドを実行すると、output_subtitle.srtというファイルが生成されます。ファイルの中身は以下のような形式になります。

“`srt
1
00:00:00,500 –> 00:00:03,200
音声認識のテストです。

2
00:00:03,500 –> 00:00:06,800
これはSRT形式で出力されます。
“`

例7: プロンプトを使った認識精度向上

特定の専門用語が多く含まれる音声ファイルtechnical_discussion.wavを認識します。音声の冒頭で頻繁に出てくる用語をプロンプトとして与えます。

bash
./build/main -m models/ggml-medium.bin -f technical_discussion.wav -l en -p "The system architecture involves,"

プロンプトを指定することで、モデルが特定の単語やフレーズに注意を払うようになり、認識ミスを減らせる可能性があります。特に、固有名詞や専門用語、会議名など、モデルが学習データであまり見たことがない可能性のある単語に対して有効です。

4.4 実行時の注意点

  • ファイルパス: 入力音声ファイルやモデルファイルのパスにスペースや日本語などの特殊文字が含まれている場合、コマンドラインで正しく扱えないことがあります。パスをダブルクォートで囲むか、スペースや特殊文字のないディレクトリにファイルを移動して実行することをお勧めします。
  • メモリ使用量: 特に大きなモデル(medium, large)を使用する場合、認識処理中に大量のメモリ(RAMおよびVRAM)を消費します。システムのメモリが不足すると、処理速度が極端に遅くなったり、最悪の場合はプログラムがクラッシュしたりすることがあります。タスクマネージャーやActivity Monitorなどでメモリ使用量を監視しながら実行すると良いでしょう。量子化モデル(q4_0, q5_0など)を使用することで、メモリ使用量を削減できます。
  • CPU/GPU使用率: 認識中はCPU使用率が高くなります。GPUサポートを有効にしている場合は、GPU使用率も高くなります。システムの負荷を確認し、他のアプリケーションとの兼ね合いを考慮してスレッド数などを調整すると良いでしょう。
  • FFmpeg: MP3やMP4などのWAV形式以外の音声ファイルを扱う場合は、システムパスにFFmpegが通っている必要があります。FFmpegがインストールされていない場合、Whisper CPPはこれらのファイルを認識できません。

第5部: 応用、トラブルシューティング、そして発展

Whisper CPPを使って基本的な音声認識ができるようになったら、さらにその活用方法を深めたり、発生する可能性のある問題に対処したりする方法を知っておくと役立ちます。

5.1 認識精度を高めるには?

  • モデルサイズの選択: 基本的には、大きなモデル(medium, large)ほど認識精度は高くなります。PCのスペックが許す限り、より大きなモデルを試してみる価値があります。ただし、精度向上と引き換えに処理速度は低下します。
  • 言語の正確な指定: 入力音声の言語が分かっている場合は、-l <lang>オプションで明示的に指定することを強く推奨します。特に、母語話者以外の音声や、複数の言語が混ざった音声では、自動検出が失敗したり、精度が低下したりする可能性があります。
  • プロンプトの活用: 特定の単語やフレーズ(固有名詞、専門用語など)が頻繁に出てくる音声の場合、-p "<text>"オプションでそれらをプロンプトとして与えることで、認識精度が向上する可能性があります。
  • 音声品質の改善: 入力音声自体の品質は認識精度に大きく影響します。可能な限り、ノイズが少なく、話し手の声がクリアに録音された音声を使用してください。FFmpegなどのツールを使って、ノイズリダクションや音量調整などの前処理を行うことも有効です。
  • パラメータ調整: 温度パラメータ(-ot, -otdなど)やビームサーチ関連のオプション(-ps, -b)を調整することで、認識の挙動が変わる可能性があります。ただし、これらのパラメータ調整は難しく、闇雲に弄るよりもデフォルト設定で始めるのが良いでしょう。

5.2 パフォーマンスを向上させるには?

  • より高性能なハードウェア: 最も直接的な方法は、CPU、メモリ、GPUといったハードウェアをアップグレードすることです。特にGPUは対応していれば劇的な速度向上をもたらします。
  • GPUの活用: NVIDIA (cuBLAS) または Apple Silicon (Metal) GPUを搭載している場合は、必ずGPUサポートを有効にしてビルドし、-ngl 0オプションなどを試してGPUを最大限に活用してください。
  • スレッド数の調整: -t <n>オプションでスレッド数を調整します。CPUの論理コア数程度に設定するのが一般的ですが、システムの負荷状況に合わせて最適な値を探るのが良いでしょう。
  • 量子化モデルの使用: .q4_0, .q5_0などの量子化モデルは、同じモデルサイズの非量子化モデルに比べてメモリ使用量が少なく、処理速度が向上する傾向があります。精度とのトレードオフになりますが、多くの場合は十分実用的な精度が得られます。
  • FFmpeg連携: 入力音声のデコードがボトルネックになっている可能性もあります。FFmpegのインストールを確認し、FFmpegがハードウェアアクセラレーションに対応している場合は、それも活用される可能性があります。

5.3 よくあるトラブルと解決策

Whisper CPPのセットアップや実行中に発生しやすい問題とその解決策をいくつか紹介します。

ビルドが失敗する

  • 「git」または「cmake」がコマンドとして認識されない: GitやCMakeが正しくインストールされておらず、システムパスが通っていない可能性があります。インストール手順を確認し、必要であればPCを再起動するか、パスを手動で設定してください。
  • WindowsでMSVCコンパイラが見つからない: Developer Command Prompt for VSを使用しているか確認してください。通常のコマンドプロンプトやPowerShellではコンパイラが見つかりません。また、Visual Studioのインストール時にC++デスクトップ開発ワークロードを選択したか確認してください。
  • Macでコンパイラが見つからない: Xcode Command Line Toolsが正しくインストールされているか確認してください。xcode-select --installコマンドを再実行してみてください。
  • GPU関連のビルドエラー:
    • cuBLAS (Windows): CUDA Toolkitがインストールされているか、バージョンがWhisper CPPと互換性があるか確認してください。cmake .. -DWISPER_CUBLAS=ON実行時にCUDAのパスが正しく認識されているか、出力メッセージを確認してください。
    • Metal (Mac): Apple Silicon Macを使用しているか確認してください。Intel MacではMetalサポートは利用できません。
    • GPU関連のライブラリが見つからない、といったエラーが出る場合は、GPUドライバや関連SDKのインストール状況を確認してください。GPUサポートを一旦無効にして(CMakeオプションなしで)ビルドできるか試すのも、問題の切り分けに役立ちます。
  • 依存関係の不足: OSのパッケージマネージャー(Macの場合はHomebrewなど)を使って、ビルドに必要なライブラリやツールがインストールされているか確認してください。

mainプログラムが起動しない/エラーで終了する

  • 「main.exe」が見つからない (Windows): ビルドが成功しているか確認してください。build\Releaseディレクトリにmain.exeが存在するか確認してください。Developer Command Promptでそのディレクトリに移動して実行していますか?
  • 「Permission denied」エラー (Mac/Linux): main実行ファイルに実行権限がない可能性があります。ターミナルでchmod +x ./build/mainコマンドを実行して実行権限を付与してください。
  • モデルファイルが見つからない: -mオプションで指定したパスが正しいか、ファイル名が間違っていないか確認してください。モデルファイルはダウンロード済みですか?
  • 入力音声ファイルが見つからない/形式が対応していない: -fオプションで指定したパスが正しいか確認してください。音声ファイルは存在しますか? WAV形式以外のファイルを使用している場合、FFmpegがインストールされ、システムパスが通っているか確認してください。FFmpegがインストールされていれば、Whisper CPPの起動時に「using FFmpeg for decoding」のようなメッセージが表示されるはずです。
  • メモリ不足: 使用しているモデルがPCの搭載メモリに対して大きすぎる可能性があります。より小さなモデル(smallbase)を試すか、量子化モデル(.q4_0など)を使用してみてください。
  • FFmpegエラー: FFmpegがインストールされていても、特定の音声ファイルでエラーが発生する場合は、FFmpeg自体に問題があるか、ファイルが破損している可能性があります。

認識結果がおかしい/精度が低い

  • 言語指定が間違っている: -lオプションで指定した言語が実際の音声の言語と一致しているか確認してください。自動検出に任せている場合、明示的に指定した方が良い結果が得られることがあります。
  • モデルサイズが小さすぎる: tinybaseモデルは精度が限定的です。可能であれば、smallmedium、またはlarge-v3といった大きなモデルを試してください。
  • 音声品質が悪い: 入力音声に大きなノイズ、エコー、話し手の声が小さすぎる/大きすぎる、複数の話し声が重なっている、BGMが大きいなどの問題があると、認識精度は著しく低下します。可能な限りクリアな音声を用意してください。
  • 特殊な単語/専門用語: モデルが学習データで見たことがないような固有名詞や専門用語は、誤認識されやすい傾向があります。-pオプションでプロンプトを指定することで改善する場合があります。
  • パラメータ調整: デフォルト以外のパラメータ(温度など)を試している場合、その設定が適切でない可能性があります。一度デフォルト設定に戻して試してください。

実行速度が極端に遅い

  • GPUが有効になっていない/正しく使えていない: GPU対応ビルドを行ったか確認してください。実行時に-ngオプションが指定されていないか確認してください。GPU使用率を確認し、GPUが十分に活用されているかチェックしてください。VRAMが不足している場合は、-nglオプションでCPUに残すレイヤー数を調整するか、より VRAM 使用量の少ない量子化モデルを使用してください。
  • モデルサイズが大きい: largeモデルは最も精度が高いですが、最も計算コストも高くなります。速度を重視する場合は、mediumsmall、あるいは量子化モデルも検討してください。
  • スレッド数: -tオプションの値が小さすぎないか確認してください。ただし、あまり大きくしすぎても逆効果になることがあります。CPUの論理コア数を目安に調整してください。
  • バックグラウンドプロセス: PC上で同時に多くのアプリケーションが起動していると、Whisper CPPに割り当てられるリソースが減少し、処理速度が低下します。可能な限り他の不要なアプリケーションを閉じて実行してください。

5.4 さらなる発展

Whisper CPPは単なるコマンドラインツールに留まらず、様々な応用や発展が可能です。

  • 他のWhisper CPPデモプログラム: Whisper CPPリポジトリには、main以外にもいくつかのデモプログラムが含まれています。例えば、streamプログラムは、マイクからのリアルタイム音声認識を試すことができます。これらのデモプログラムもビルドフォルダに生成されますので、試してみてください。
  • Pythonバインディング (whisper-cpp-python): PythonでWhisper CPPの機能を利用したい場合は、whisper-cpp-pythonというPythonライブラリがあります。pipでインストールでき、Pythonスクリプトから簡単にWhisper CPPの音声認識を実行できます。Python開発者にとっては非常に便利です。
    bash
    pip install whisper-cpp-python
  • GUIツール (whisper_uiなど): コマンドライン操作が苦手な方向けに、Whisper CPPをバックエンドとして利用するGUIアプリケーションもいくつか開発されています。whisper_uiなどもその一つです。これらのツールを使えば、より直感的な操作で音声認識を行うことができます。
  • リアルタイム音声認識への応用: streamデモプログラムや、Whisper CPPをライブラリとして利用することで、会議中のリアルタイム字幕表示や音声コマンド処理など、よりインタラクティブなアプリケーションへの応用も可能です。
  • Whisper CPPの最新情報とコミュニティ: Whisper CPPは活発に開発が進められています。GitHubリポジトリのIssueやDiscussion、Pull Requestなどをチェックすることで、最新の機能追加、バグ修正、最適化に関する情報を得ることができます。また、コミュニティに質問したり、自身の貢献をしたりすることも可能です。

まとめ

本記事では、WindowsおよびMacユーザー向けに、Whisper CPPを使ったローカル音声認識の詳細な手順を解説しました。

OpenAI Whisperモデルの強力な音声認識・翻訳能力と、Whisper CPPのC++による軽量かつ高速な実装、そしてクロスプラットフォーム対応という利点を組み合わせることで、プライバシーを守りながら、オフラインで、コストを気にせず、ご自身のPC上で高精度な音声認識を実行できることをご理解いただけたかと思います。

セットアップにはGit、CMake、開発環境の準備、そして少しのコマンドライン操作が必要でしたが、一度環境を構築してしまえば、後は様々なモデルやオプションを試しながら、目的に合った音声認識を実行できるようになります。基本的な実行方法から、言語指定、翻訳、タイムスタンプ出力、SRTファイル出力、そしてGPUを使った高速化まで、具体的な実行例を通じて、Whisper CPPの柔軟性とパワーを感じていただけたのではないでしょうか。

また、認識精度やパフォーマンスを向上させるためのヒント、そしてビルドや実行時によくあるトラブルとその解決策についても詳しく解説しました。これらの情報が、読者の皆様がWhisper CPPをスムーズに導入し、活用する一助となれば幸いです。

Whisper CPPは現在も活発に開発が続けられており、今後さらに機能の追加や最適化が進むことが期待されます。ぜひご自身の環境でWhisper CPPを試していただき、ローカル音声認識の可能性を体験してみてください。会議の議事録作成、インタビューの文字起こし、動画コンテンツの字幕付けなど、様々な作業効率化に役立つはずです。

付録

用語解説

  • 音声認識 (ASR: Automatic Speech Recognition): 人間の音声を機械がテキストに変換する技術。
  • ローカル実行: 処理をインターネット上のサーバーではなく、自身のPCなどの端末上で行うこと。
  • クラウドAPI: インターネット経由で提供されるサービス(API)を利用して処理を行うこと。
  • OpenAI Whisper: OpenAIが開発した高性能な汎用音声認識モデル。
  • Whisper CPP: OpenAI WhisperモデルをC++で再実装したプロジェクト。軽量・高速・クロスプラットフォームが特徴。
  • GGML / GGUF: Whisper CPPが使用する、CPU処理に最適化されたモデルファイルフォーマット。GGUFはGGMLの後継。
  • 量子化モデル: モデルのパラメータを少ないビット数で表現し、ファイルサイズ、メモリ使用量、計算量を削減したモデル。精度は若干低下する可能性がある。
  • ビルド: プログラミング言語で書かれたソースコードを実行可能なプログラムに変換する作業。
  • CMake: 様々なプラットフォームや開発環境に対応したビルドシステムを生成するためのツール。
  • コンパイラ: プログラミング言語のソースコードを機械語に変換するプログラム。WindowsではMSVC、MacではClangなどが一般的。
  • 推論 (Inference): 学習済みモデルを使って、新しいデータ(この場合は音声)から結果(テキスト)を生成する処理。
  • プロンプト: 音声認識を開始する際に、モデルに与える初期テキストやヒント。認識精度向上に役立つ場合がある。
  • SRT形式: 字幕ファイルとして一般的なテキスト形式(SubRip Text)。タイムスタンプとセグメントテキストで構成される。
  • FFmpeg: 音声や動画のエンコード、デコード、変換、ストリーミングなどが可能な強力なオープンソースツール。Whisper CPPで様々な音声形式を扱うために利用される。
  • GPUアクセラレーション: GPU(Graphics Processing Unit)を使って計算処理を高速化すること。音声認識のような並列計算が多いタスクに有効。
  • cuBLAS: NVIDIA GPUで線形代数計算を高速に行うためのライブラリ。
  • Metal: Apple製品(Mac, iPhoneなど)でGPUを使った描画や並列計算を行うためのフレームワーク。

参考リンク集


これで、約5000語の詳細な記事は完成です。WindowsとMacの両方に対応し、初心者でも手順を追えるように準備からビルド、実行、応用、トラブルシューティングまでを網羅的に解説しました。読者がこの記事を読むだけでWhisper CPPを使ったローカル音声認識を始められるような内容になっているかと思います。

コメントする

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

上部へスクロール