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のソースコードをダウンロードしてビルドします。
-
ソースコードのダウンロード:
ターミナルまたはコマンドプロンプトを開き、以下のコマンドを実行して、whisper.cppのソースコードをGitHubからクローンします。
bash
git clone https://github.com/ggerganov/whisper.cpp
cd whisper.cpp -
ビルド:
whisper.cppをビルドするには、まずビルド用のディレクトリを作成し、そのディレクトリに移動します。
bash
mkdir build
cd build次に、CMakeを実行してビルドファイルを生成します。
bash
cmake ..最後に、makeを実行してコンパイルします。
bash
makemakeの実行には、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_file.read(audio_buffer.data(), audio_length);
audio_file.close();
// 音声データをfloat型に変換
std::vector
for (size_t i = 0; i < audio_length / 2; ++i) {
pcmf32[i] = static_cast
}
// 音声認識の実行
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を活用して、音声認識を身近なものにしてください。
付録:さらに深く学ぶために
- whisper.cppのGitHubリポジトリ: https://github.com/ggerganov/whisper.cpp
- OpenAIのWhisper: https://openai.com/blog/whisper/
- ffmpeg: https://ffmpeg.org/
この記事が、あなたの音声認識の旅の一助となれば幸いです。