Package: kaldifeat
kaldifeatDocumentation:https://csukuangfj.github.io/kaldifeatNote: If you are looking for a version that does not depend on PyTorch,
please seehttps://github.com/csukuangfj/kaldi-native-fbankCommentsOptionsFeature ComputerUsageFBANKkaldifeat.FbankOptionskaldifeat.Fbankopts = kaldifeat.FbankOptions()
opts.device = torch.device('cuda', 0)
opts.frame_opts.window_type = 'povey'
fbank = kaldifeat.Fbank(opts)
features = fbank(wave)Streaming FBANKkaldifeat.FbankOptionskaldifeat.OnlineFbankSee./kaldifeat/python/tests/test_fbank.pyMFCCkaldifeat.MfccOptionskaldifeat.Mfccopts = kaldifeat.MfccOptions();
opts.num_ceps = 13
mfcc = kaldifeat.Mfcc(opts)
features = mfcc(wave)Streaming MFCCkaldifeat.MfccOptionskaldifeat.OnlineMfccSee./kaldifeat/python/tests/test_mfcc.pyPLPkaldifeat.PlpOptionskaldifeat.Plpopts = kaldifeat.PlpOptions();
opts.mel_opts.num_bins = 23
plp = kaldifeat.Plp(opts)
features = plp(wave)Streaming PLPkaldifeat.PlpOptionskaldifeat.OnlinePlpSee./kaldifeat/python/tests/test_plp.pySpectorgramkaldifeat.SpectrogramOptionskaldifeat.Spectrogramopts = kaldifeat.SpectrogramOptions();
print(opts)
spectrogram = kaldifeat.Spectrogram(opts)
features = spectrogram(wave)Feature extraction compatible withKaldiusing PyTorch, supporting
CUDA, batch processing, chunk processing, and autograd.The following kaldi-compatible commandline tools are implemented:compute-fbank-featscompute-mfcc-featscompute-plp-featscompute-spectrogram-feats(NOTE: We will implement other types of features, e.g., Pitch, ivector, etc, soon.)HINT: It supports also streaming feature extractors for Fbank, MFCC, and Plp.UsageLet us first generate a test wave using sox:# generate a wave of 1.2 seconds, containing a sine-wave# swept from 300 Hz to 3300 Hzsox-n-r16000-b16test.wavsynth1.2sine300-3300HINT: Downloadtest.wav.Fbankimporttorchaudioimportkaldifeatfilename="./test.wav"wave,samp_freq=torchaudio.load(filename)wave=wave.squeeze()opts=kaldifeat.FbankOptions()opts.frame_opts.dither=0# Yes, it has same options like `Kaldi`fbank=kaldifeat.Fbank(opts)features=fbank(wave)To compute features that are compatible withKaldi, wave samples have to be
scaled to the range[-32768, 32768].WARNING: You don't have to do this if
you don't care about the compatibility withKaldi.The following is an example:wave*=32768fbank=kaldifeat.Fbank(opts)features=fbank(wave)print(features[:3])The output is:tensor([[15.0074, 21.1730, 25.5286, 24.4644, 16.6994, 13.8480, 11.2087, 11.7952,
         10.3911, 10.4491, 10.3012,  9.8743,  9.6997,  9.3751,  9.3476,  9.3559,
          9.1074,  9.0032,  9.0312,  8.8399,  9.0822,  8.7442,  8.4023],
        [13.8785, 20.5647, 25.4956, 24.6966, 16.9541, 13.9163, 11.3364, 11.8449,
         10.2565, 10.5871, 10.3484,  9.7474,  9.6123,  9.3964,  9.0695,  9.1177,
          8.9136,  8.8425,  8.5920,  8.8315,  8.6226,  8.8605,  8.9763],
        [13.9475, 19.9410, 25.4494, 24.9051, 17.0004, 13.9207, 11.6667, 11.8217,
         10.3411, 10.7258, 10.0983,  9.8109,  9.6762,  9.4218,  9.1246,  8.7744,
          9.0863,  8.7488,  8.4695,  8.6710,  8.7728,  8.7405,  8.9824]])You can compute the fbank feature for the same wave withKaldiusing the following commands:echo"1 test.wav">test.scp
compute-fbank-feats--dither=0scp:test.scpark,t:test.txt
head-n4test.txtThe output is:1  [
  15.00744 21.17303 25.52861 24.46438 16.69938 13.84804 11.2087 11.79517 10.3911 10.44909 10.30123 9.874329 9.699727 9.37509 9.347578 9.355928 9.107419 9.00323 9.031268 8.839916 9.082197 8.744139 8.40221
  13.87853 20.56466 25.49562 24.69662 16.9541 13.91633 11.33638 11.84495 10.25656 10.58718 10.34841 9.747416 9.612316 9.39642 9.06955 9.117751 8.913527 8.842571 8.59212 8.831518 8.622513 8.86048 8.976251
  13.94753 19.94101 25.4494 24.90511 17.00044 13.92074 11.66673 11.82172 10.34108 10.72575 10.09829 9.810879 9.676199 9.421767 9.124647 8.774353 9.086291 8.74897 8.469534 8.670973 8.772754 8.740549 8.982433You can see thatkaldifeatproduces the same output asKaldi(within some tolerance due to numerical precision).HINT: Downloadtest.scpandtest.txt.To use GPU, you can use:importtorchopts=kaldifeat.FbankOptions()opts.device=torch.device("cuda",0)fbank=kaldifeat.Fbank(opts)features=fbank(wave.to(opts.device))MFCC, PLP, SpectrogramTo compute MFCC features, please replacekaldifeat.FbankOptionsandkaldifeat.Fbankwithkaldifeat.MfccOptionsandkaldifeat.Mfcc, respectively. The same goes
forPLPandSpectrogram.Please refer tokaldifeat/python/tests/test_fbank.pykaldifeat/python/tests/test_mfcc.pykaldifeat/python/tests/test_plp.pykaldifeat/python/tests/test_spectrogram.pykaldifeat/python/tests/test_frame_extraction_options.pykaldifeat/python/tests/test_mel_bank_options.pykaldifeat/python/tests/test_fbank_options.pykaldifeat/python/tests/test_mfcc_options.pykaldifeat/python/tests/test_spectrogram_options.pykaldifeat/python/tests/test_plp_options.pyfor more examples.HINT: In the examples, you can find thatkaldifeatsupports batch processing as well as chunk processingkaldifeatuses the same options asKaldi'scompute-fbank-featsandcompute-mfcc-featsUsage in other projectsicefallicefalluses kaldifeat to extract features for a pre-trained model.Seehttps://github.com/k2-fsa/icefall/blob/master/egs/librispeech/ASR/conformer_ctc/pretrained.py.k2k2uses kaldifeat's C++ API.Seehttps://github.com/k2-fsa/k2/blob/v2.0-pre/k2/torch/csrc/features.cu.lhotselhotseuses kaldifeat to extract features on GPU.Seehttps://github.com/lhotse-speech/lhotse/blob/master/lhotse/features/kaldifeat.py.sherpasherpauses kaldifeat for streaming feature
extraction.Seehttps://github.com/k2-fsa/sherpa/blob/master/sherpa/bin/pruned_stateless_emformer_rnnt2/decode.pyInstallationRefer tohttps://csukuangfj.github.io/kaldifeatfor installation.