ESPNet2を使った音声とテキストのアライメント処理

開発環境

ライブラリのインストール

以下で必要なライブラリを入れます

pip install soundfile espnet_model_zoo torch
sudo pip install soundfile espnet_model_zoo torch

アライメント処理

以下を参考にコードを書いていきます。

github.com

モデルは reazon-research/reazonspeech-espnet-v2を使用します

espnet_model_zooを使用する場合は、以下から任意のモデルを指定してください

github.com

import soundfile
from espnet_model_zoo.downloader import ModelDownloader
from espnet2.bin.asr_align import CTCSegmentation
d = ModelDownloader(cachedir="./modelcache")
# esp model zooの場合
# model = d.download_and_unpack("Shinji Watanabe/laborotv_asr_train_asr_conformer2_latest33_raw_char_sp_valid.acc.ave")

# hfの場合
model = d.download_and_unpack("reazon-research/reazonspeech-espnet-v2")
speech, rate = soundfile.read("VOICEACTRESS100_001.wav")

duration = len(speech) / rate

print(f"音声ファイルの長さ: {duration:.2f}秒")

aligner = CTCSegmentation(**model, kaldi_style_text=False)

text = ["また、東寺のように、五大明王と呼ばれる、主要な明王の中央に配されることも多い。"]

segments = aligner(speech, text)

print(segments)

実行結果は以下です

音声ファイルの長さ: 6.91秒
WARNING:root:No RNN model detected; memory consumption may be high.
utt_0000 utt 0.02 41.39 -4.9689 また、東寺のように、五大明王と呼ばれる、主要な明王の中央に配されることも多い。

音声の長さを正確には取れていないですが、アライメントの精度は取得できそうです