whisper.cpp 使い方:簡単ステップで音声データをテキスト化

whisper.cpp 使い方:簡単ステップで音声データをテキスト化

近年、AI技術の進化は目覚ましく、音声認識の分野においても、その恩恵を享受できるようになりました。特に、OpenAIが開発した「Whisper」は、高精度な音声認識モデルとして注目を集めています。そして、そのWhisperをC++で実装し、より軽量で高速に動作するように設計されたのが「whisper.cpp」です。

この記事では、whisper.cppの基本的な使い方から、具体的なステップ、そしてさらに活用するためのヒントまで、詳細に解説します。プログラミング初心者の方でも理解できるように、できる限り平易な言葉で説明していきますので、ぜひ最後までお読みください。

1. whisper.cppとは?

whisper.cppは、OpenAIのWhisperモデルをC++で実装したものです。オリジナルのPython版Whisperと比較して、以下のようなメリットがあります。

  • 軽量性: C++で記述されているため、Python版よりもメモリ消費量が少なく、より小さなデバイスでも動作させることができます。
  • 高速性: ネイティブコードで実行されるため、Python版よりも処理速度が向上します。
  • 移植性: 様々なプラットフォームで動作させることができます。

これらのメリットにより、whisper.cppは、Raspberry Piのような組み込み機器や、ローカル環境での高速な音声認識処理に最適です。

2. 事前準備:環境構築

whisper.cppを使用する前に、いくつかの準備が必要です。

  • C++コンパイラ: C++のコードをコンパイルするために、コンパイラが必要です。

    • Windows: Visual Studio、MinGWなどが利用できます。Visual Studioは、Microsoftが提供する統合開発環境で、無償版のCommunityエディションがあります。MinGWは、Windows上でGCC(GNU Compiler Collection)を利用できるようにする環境です。
    • macOS: Xcodeが必要です。Xcodeは、Appleが提供する統合開発環境で、App Storeから無料でダウンロードできます。
    • Linux: GCC(GNU Compiler Collection)が必要です。ほとんどのLinuxディストリビューションに標準でインストールされています。インストールされていない場合は、sudo apt-get install build-essential (Debian/Ubuntu)などのコマンドでインストールできます。
  • Git: ソースコードをダウンロードするために、Gitが必要です。

    • Windows: Git for Windowsをインストールします。
    • macOS: Xcodeをインストールすると、Gitもインストールされます。別途インストールする場合は、Homebrewなどを利用します。
    • Linux: sudo apt-get install git (Debian/Ubuntu)などのコマンドでインストールできます。
  • CMake: プロジェクトをビルドするために、CMakeが必要です。

    • CMakeは、クロスプラットフォームに対応したビルドシステムジェネレータです。CMakeLists.txtという設定ファイルに基づいて、各プラットフォームに適したビルドファイル(Makefileなど)を生成します。
    • 公式サイトからダウンロードしてインストールするか、sudo apt-get install cmake (Debian/Ubuntu)などのコマンドでインストールできます。

3. whisper.cppのダウンロードとビルド

必要なツールが揃ったら、whisper.cppのソースコードをダウンロードしてビルドします。

  1. ソースコードのダウンロード:

    ターミナルまたはコマンドプロンプトを開き、以下のコマンドを実行して、whisper.cppのソースコードをGitHubからクローンします。

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

  2. ビルド:

    whisper.cppをビルドするには、まずビルド用のディレクトリを作成し、そのディレクトリに移動します。

    bash
    mkdir build
    cd build

    次に、CMakeを実行してビルドファイルを生成します。

    bash
    cmake ..

    最後に、makeを実行してコンパイルします。

    bash
    make

    makeの実行には、CPUの性能にもよりますが、数分から数十分かかる場合があります。-j<コア数>オプションを指定することで、並列処理を行い、コンパイル時間を短縮できます。例えば、4コアのCPUを使用している場合は、make -j4のように指定します。

    ビルドが正常に完了すると、mainなどの実行ファイルがwhisper.cppディレクトリに生成されます。

4. モデルファイルのダウンロード

whisper.cppは、OpenAIのWhisperモデルを読み込んで使用します。モデルファイルは、事前にダウンロードしておく必要があります。

whisper.cppのディレクトリに、modelsというディレクトリを作成し、その中にモデルファイルをダウンロードします。

bash
mkdir models
cd models

モデルファイルは、以下の種類があります。

  • tiny.en.bin: 英語のみの最小モデル
  • tiny.bin: 最小モデル(多言語対応)
  • base.en.bin: 英語のみの基本モデル
  • base.bin: 基本モデル(多言語対応)
  • small.en.bin: 英語のみの小規模モデル
  • small.bin: 小規模モデル(多言語対応)
  • medium.en.bin: 英語のみの中規模モデル
  • medium.bin: 中規模モデル(多言語対応)
  • large-v1.bin: 大規模モデル(多言語対応)
  • large-v2.bin: 大規模モデル(多言語対応)
  • large-v3.bin: 大規模モデル(多言語対応、より高精度)

モデルのサイズが大きいほど、精度が高くなりますが、処理時間も長くなります。用途や環境に合わせて、適切なモデルを選択してください。

モデルファイルは、https://huggingface.co/ggerganov/whisper.cpp/tree/main からダウンロードできます。

ダウンロードするには、wgetコマンドを使用します。例えば、tiny.binをダウンロードするには、以下のコマンドを実行します。

bash
wget https://huggingface.co/ggerganov/whisper.cpp/resolve/main/ggml-tiny.bin
mv ggml-tiny.bin tiny.bin

5. 音声データの準備

whisper.cppで処理できる音声データの形式は、WAV形式、16kHz、16bit、モノラルです。

手持ちの音声データが、これらの条件を満たしていない場合は、ffmpegなどのツールを使って変換する必要があります。

例えば、input.mp3という音声ファイルを、output.wavというWAV形式、16kHz、16bit、モノラルに変換するには、以下のコマンドを実行します。

bash
ffmpeg -i input.mp3 -acodec pcm_s16le -ac 1 -ar 16000 output.wav

6. 音声認識の実行

準備が整ったら、いよいよ音声認識を実行します。

ターミナルまたはコマンドプロンプトを開き、whisper.cppのディレクトリに移動します。

bash
cd whisper.cpp

そして、以下のコマンドを実行します。

bash
./main -m models/tiny.bin -f your_audio_file.wav

  • -mオプションは、使用するモデルファイルを指定します。
  • -fオプションは、音声ファイルを指定します。

your_audio_file.wavは、実際に音声認識したい音声ファイルのパスに置き換えてください。

音声認識が開始されると、ターミナルに認識結果が表示されます。

7. オプションの活用

whisper.cppには、様々なオプションが用意されており、音声認識の精度や処理速度を調整することができます。

  • -l <language>: 認識する言語を指定します。デフォルトは英語です。日本語の場合は、jaを指定します。例:./main -m models/tiny.bin -f your_audio_file.wav -l ja
  • -t <threads>: 使用するスレッド数を指定します。デフォルトはCPUのコア数です。スレッド数を増やすことで、処理速度を向上させることができます。例:./main -m models/tiny.bin -f your_audio_file.wav -t 4
  • -p <prompt>: プロンプトを指定します。プロンプトは、音声認識の開始時に、モデルに与えるテキストです。プロンプトを指定することで、特定の単語やフレーズを認識しやすくすることができます。例:./main -m models/tiny.bin -f your_audio_file.wav -p "こんにちは"
  • --translate: 音声を英語に翻訳します。例:./main -m models/tiny.bin -f your_audio_file.wav --translate
  • --no-timestamps: タイムスタンプを表示しません。例:./main -m models/tiny.bin -f your_audio_file.wav --no-timestamps
  • --beam-size <beam_size>: ビームサーチのビームサイズを指定します。ビームサイズが大きいほど、精度が高くなりますが、処理時間も長くなります。例:./main -m models/tiny.bin -f your_audio_file.wav --beam-size 5

8. より高度な活用:APIの利用

whisper.cppは、APIとしても利用できます。APIを利用することで、他のプログラムからwhisper.cppの機能を呼び出すことができます。

APIを利用するには、whisper.hヘッダーファイルをインクルードし、whisper_init(), whisper_full(), whisper_free()などの関数を使用します。

以下は、APIを利用した簡単な音声認識の例です。

“`c++

include

include

include

include “whisper.h”

int main() {
// モデルファイルのパス
const char *model_path = “models/tiny.bin”;

// 音声ファイルのパス
const char *audio_path = “your_audio_file.wav”;

// Whisperコンテキストの初期化
whisper_context *ctx = whisper_init(model_path);
if (!ctx) {
std::cerr << “Failed to initialize whisper context” << std::endl;
return 1;
}

// 音声データの読み込み
std::ifstream audio_file(audio_path, std::ios::binary);
if (!audio_file.is_open()) {
std::cerr << “Failed to open audio file: ” << audio_path << std::endl;
whisper_free(ctx);
return 1;
}

// 音声データをバッファに読み込む
audio_file.seekg(0, std::ios::end);
size_t audio_length = audio_file.tellg();
audio_file.seekg(0, std::ios::beg);
std::vector audio_buffer(audio_length);
audio_file.read(audio_buffer.data(), audio_length);
audio_file.close();

// 音声データをfloat型に変換
std::vector pcmf32(audio_length / 2);
for (size_t i = 0; i < audio_length / 2; ++i) {
pcmf32[i] = static_cast(reinterpret_cast(audio_buffer.data())[i]) / 32768.0f;
}

// 音声認識の実行
whisper_full_params params = whisper_full_default_params(WHISPER_SAMPLING_RATE, 0);
params.print_realtime = false;
params.print_progress = false;
params.print_timestamps = false;
params.language = “ja”; // 日本語に設定

int n_segments = 0;

if (whisper_full(ctx, params, pcmf32.data(), pcmf32.size()) == 0) {
n_segments = whisper_full_n_segments(ctx);
for (int i = 0; i < n_segments; ++i) {
const char * text = whisper_full_get_segment_text(ctx, i);
std::cout << text << std::endl;
}
} else {
std::cerr << “Failed to process audio” << std::endl;
}

// Whisperコンテキストの解放
whisper_free(ctx);

return 0;
}
“`

この例では、音声ファイルを読み込み、float型の配列に変換した後、whisper_full()関数を使って音声認識を実行しています。そして、whisper_full_get_segment_text()関数を使って、認識結果を取得し、コンソールに出力しています。

9. トラブルシューティング

whisper.cppの使用中に、問題が発生した場合は、以下の点を確認してください。

  • モデルファイルのパス: モデルファイルのパスが正しいかどうかを確認してください。
  • 音声ファイルの形式: 音声ファイルの形式が、WAV形式、16kHz、16bit、モノラルであるかどうかを確認してください。
  • コンパイラのバージョン: コンパイラのバージョンが、whisper.cppの要件を満たしているかどうかを確認してください。
  • 依存関係: 必要な依存関係がインストールされているかどうかを確認してください。

10. まとめ:whisper.cppを活用して音声認識を身近に

この記事では、whisper.cppの基本的な使い方から、具体的なステップ、そしてさらに活用するためのヒントまで、詳細に解説しました。

whisper.cppは、高精度な音声認識モデルを、軽量かつ高速に利用できる非常に便利なツールです。

この記事を参考に、ぜひwhisper.cppを活用して、音声認識を身近なものにしてください。

付録:さらに深く学ぶために

この記事が、あなたの音声認識の旅の一助となれば幸いです。

コメントする

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

上部へスクロール