🎤

【完全無料の音声認識ソフトで文字起こし】Juliusのインストール方法と使用方法

2024/11/15に公開

こんにちは、dotDのエンジニアの前田です。

音声認識ソフトを使って文字起こししたいと思い、どんなソフトがあるのか調べたところ、
完全無料で利用できるJuliusという音声認識ソフトを見つけました。

早速Juliusをインストールして、「リアルタイム文字起こし」と「音声ファイルを読み込んでの文字起こし」ができることを確認しました。(音声認識精度は高いと感じました)

完全無料の音声認識ソフトを使いたい方や、Juliusのインストール・使用方法がよくわからなくて苦戦している方に向けて記事を書きました!

※macOS向けの記事ですが、WindowsやLinuxを利用されている方も参考になると思います

Juliusとは

Juliusについて簡単に説明します。

Juliusとは、京都大学や名古屋工業大学が中心になって研究・開発を行っている、オープンソースの高性能な汎用大語彙連続音声認識エンジンです。

Juliusは、音響モデルと言語モデルを使用し、音声を「これかな?」と推定した単語に変換して文字出力します。
・音響モデル:音声データから音の特徴を取り出し、音素で表現する
・言語モデル:音素の繋がりからどんな単語を話しているかを推定する

そして、Juliusでは、音響モデルと言語モデルを自分で準備する必要がありますが、モデルの組み合わせを自分で好きなように決められるので、汎用性が高いことが特徴です。

詳細については、JuliusのREADMEをご覧ください。
https://github.com/julius-speech/julius/blob/master/README.md

インストール手順

1. サウンドサーバーをインストール

まずは、音声認識精度の向上のために、サウンドサーバーをインストールします。
JuliusのGitHubのインストール手順ドキュメントに、pulseaudio を使用していたため、pulseaudio をbrewでインストールしました。(お好みのサウンドサーバーでよいです)

brew install pulseaudio

2. リポジトリをクローン

Juliusのリポジトリをクローンして、作業ディレクトリを変更します。
https://github.com/julius-speech/julius

git clone https://github.com/julius-speech/julius.git
cd julius/

3. ビルドとインストール

以下のコマンドを順次実行して、ビルドしてJuliusをシステムにインストールします。

./configure --with-mictype=pulseaudio
make
sudo make install

--with-mictype=pulseaudioオプションを指定して設定を行うと、PulseAudio がサンプリングレートをJuliusが期待する16kHzに変換して、Juliusが期待するフォーマット(16kHz)で音声認識処理を行なってくれるので、認識精度が上がります。

./configure --with-mictype=pulseaudio

configure: error: no PulseAudio header!
configure: error: ./configure failed for libsent

上記のエラーが発生したら、PulseAudio のヘッダーファイルとライブラリを明示的に指定してconfigureを実行します。

CPPFLAGS="-I$(brew --prefix pulseaudio)/include" \
LDFLAGS="-L$(brew --prefix pulseaudio)/lib" \
./configure --with-mictype=pulseaudio

CPPFLAGSで、ヘッダーファイルがあるディレクトリ(include)を指定
  brew --prefix pulseaudioは、Homebrew がPulseAudio をインストールしたパス
LDFLAGSで、ライブラリディレクトリ(lib)を指定

make

src/phmm/calc_dnn.c:75:7: error: implicit declaration of function '__get_cpuid' is invalid in C99 [-Werror,-Wimplicit-function-declaration]
  if (__get_cpuid(1, &eax, &ebx, &ecx, &edx) == 0)
      ^
src/phmm/calc_dnn.c:77:13: error: use of undeclared identifier 'bit_SSE'
  if (edx & bit_SSE) {
            ^
src/phmm/calc_dnn.c:80:13: error: use of undeclared identifier 'bit_AVX'
  if (ecx & bit_AVX) {
            ^
src/phmm/calc_dnn.c:83:13: error: use of undeclared identifier 'bit_FMA'
  if (ecx & bit_FMA) {
            ^

上記エラーの発生原因は、__get_cpuid(CPUがサポートしている命令セットを取得する関数)がインテルベースのアーキテクチャ向けの関数で、ARMベースのmacでは使えないためです。
また、SSE、AVX、FMAというインテルベースのアーキテクチャでサポートされている命令セットが、ARMベースのmacではサポートされておらず存在しないためエラーが発生しています。

ARMベースのmacを利用されている方は、以下のようにソースコードを修正する必要があります。(2024/10時点のリポジトリでは、__cpuidと検索すれば、libsent/src/phmm/calc_dnn.cに修正対象のコードがあります。)

  • 修正前のコード
libsent/src/phmm/calc_dnn.c
#ifdef _WIN32
  __cpuid(cpuinfo, 0x00000001);
  if(cpuinfo[3] & (1 << 25)) {
    sse = TRUE;
  }
  if(cpuinfo[2] & (1 << 28)) {
    avx = TRUE;
  }
  if(cpuinfo[2] & (1 << 12)) {
    fma = TRUE;
  }
#else  /* ~_WIN32 */
  unsigned int eax, ebx, ecx, edx;

  if (__get_cpuid(1, &eax, &ebx, &ecx, &edx) == 0)
    return;
  if (edx & bit_SSE) {
    sse = TRUE;
  }
  if (ecx & bit_AVX) {
    avx = TRUE;
  }
  if (ecx & bit_FMA) {
    fma = TRUE;
  }
#endif	/* _WIN32 */
  • 修正後のコード
libsent/src/phmm/calc_dnn.c
#ifdef _WIN32
  __cpuid(cpuinfo, 0x00000001);
  if (cpuinfo[3] & (1 << 25)) {
    sse = TRUE;
  }
  if (cpuinfo[2] & (1 << 28)) {
    avx = TRUE;
  }
  if (cpuinfo[2] & (1 << 12)) {
    fma = TRUE;
  }
#else  /* ~_WIN32 */
  // 修正箇所
  /* --ここから--------------------------------------------- */
  #if defined(__x86_64__) || defined(__i386__)
    unsigned int eax, ebx, ecx, edx;

    if (__get_cpuid(1, &eax, &ebx, &ecx, &edx) == 0)
      return;
    if (edx & bit_SSE) {
      sse = TRUE;
    }
    if (ecx & bit_AVX) {
      avx = TRUE;
    }
    if (ecx & bit_FMA) {
      fma = TRUE;
    }
  #else
    // ARMやその他のアーキテクチャでは、デフォルトでFALSEに設定
    sse = FALSE;
    avx = FALSE;
    fma = FALSE;
  #endif
  /* --ここまで--------------------------------------------- */
#endif /* _WIN32 */

上記では、インテルベースのアーキテクチャ以外ではSSE、AVX、FMAの命令セットのサポート状況フラグをFALSEに設定しています。

ソースコードを修正した後、再度makeを実行して、問題なく通ればsudo make installを実行してJuliusをシステムにインストールします。

4. インストールの確認

以下コマンドを実行して、Juliusのバージョンや利用可能なオプションが表示されれば、インストールが成功しています。

julius -help

5. 日本語対応の音響モデルと言語モデルを準備

Juliusで音声認識するために、音響モデルと言語モデルの設定ファイルを準備する必要があります。
Juliusの研究・開発チーム側で、日本語対応の音響モデルと言語モデルのソースコードを公開しているのでそちらを利用します。
https://github.com/julius-speech/dictation-kit

5-1. Git LFSのインストール

Git Large File Storage (Git LFS)を利用しているリポジトリのため、大容量ファイルを含むリポジトリを完全に取得するために、Git LFSをインストールして初期化します。

brew install git-lfs
git lfs install

5-2. リポジトリをクローン

Git LFSのインストールと初期化が完了したら、リポジトリをクローンします。

git clone https://github.com/julius-speech/dictation-kit.git

使用方法

1. リアルタイム文字起こし

以下コマンドを実行して、クローンしたdictation-kitリポジトリに作業ディレクトリを変更して、音声認識スタートのスクリプトを実行します。

cd dictation-kit/
./run-osx-dnn.sh

実行してしばらくすると<<< please speak >>>と表示されるので、何か話すと話した内容がリアルタイムで文字起こしされます。

dictation-kitにはGMMベースのスクリプトもありますが、DNNベースの方がリソースは多く消費するものの精度が高いということで、DNNベースのスクリプトを使用しています
※ Windowsユーザはrun-winを、Linuxユーザはrun-linuxのスクリプトファイルを使用します。

実行例

  • インプット
あいうえお
かきくけこ
さしすせそ
こんにちは
これはテストです
おはようございます。朝のニュースです
Juliusで音声認識するために、音響モデルと言語モデルの設定ファイルを準備する必要があります
  • アウトプット
ア 夢 を 。
カキコ けっこう 。
車種 です よ 。
こんにちは
これ は テスト です 。
おはよう ござい ます 朝 の ニュース です 。
ジュリア 数 で 音声 認識 する ため に 、 音響 モデル と 言語 モデル の 設定 ファイル を 準備 する 必要 が あり ます 。

テストしてみて、「あいうえお」等の単語以外はうまく認識されないことがわかりました。
色々な単語を含む長文はテストしていませんが、認識精度は結構高そうです。

2. 音声ファイルを読み込んでの文字起こし

音声ファイルは、音声データが16kHz、16ビット、モノラル の形式のwavファイルを用意する必要があります。

brewでインストールできるffmpegを使えば、以下のコマンド実行で簡単に上記形式に変換できます。

ffmpeg -i [形式変換したい音声ファイルを指定] -ar 16000 -ac 1 -sample_fmt s16 [形式変換後の音声ファイル名].wav

Julius指定の形式の音声ファイルを用意できたら、以下のコマンドを実行して、音声認識をスタートさせます。

cd dictation-kit/
./bin/osx/julius -C main.jconf -C am-dnn.jconf -dnnconf julius.dnnconf -input rawfile

上記実行したら、以下のように入力待ち状態になるので、認識させたい音声ファイルを指定して実行すると、音声ファイルの内容が文字起こしされます。

enter filename->

実行例

  • インプット
こんにちは、dotDのエンジニアの前田です。
音声認識ソフトを使って文字起こししたいと思い、どんなソフトがあるのか調べたところ、
完全無料で利用できるJuliusという音声認識ソフトを見つけました。
早速Juliusをインストールして、「リアルタイム文字起こし」と「音声ファイルを読み込んでの文字起こし」ができることを確認しました。
完全無料の音声認識ソフトを使いたい方や、Juliusのインストール・使用方法がよくわからなくて苦戦している方に向けて記事を書きました!
  • アウトプット
こんにちは 、 どっぷり の エンジニア の 前田 です 、
音声 認識 ソフト 使っ て 文字 を 起こし し たい と 思い 、 どんな ソフト が ある の か 調べ た ところ 、
完全 無料 で 利用 できる 、 より 奴 と いう 音声 認識 ソフト を 見つけ まし た 、
早速 、 ジョン 安 を インストール し て 、 リアル タイム も 持ち おこし と 、 音声 ファイル を 読み込ん で の 催し が できる こと を 確認 し まし た 、
完全 無料 の 音声 認識 ソフト を 使い たい 方 や 、 より 夏 の インストール 、 使用 方法 が よく わから なく て 苦戦 し て いる 方 に 向け て 記事 を 書き まし た 。

「dotD」「Julius」「文字起こし」の単語が認識されると、音声をほぼ完璧に文字起こしできています。

さいごに

Juliusを使ってみて、なかなか音声認識精度が高かったです。
以下のように改善すれば、より実用的になると思うので、チャレンジしたいと思います。

  • Juliusが認識できる単語数を増やす
  • アウトプットの文字間の空白を除去して出力されるようにする

Juliusは導入のハードルが高いものの、完全無料で音声認識の精度も高いので、文字起こしを行いたい方はぜひ利用を検討してみてください!

dotDTechBlog

Discussion