GNU/Linux >> Belajar Linux >  >> Linux

Apa pendekatan yang baik untuk mengekstrak bagian ucapan dari file audio arbitrer?

Detektor Energi

Untuk Deteksi Aktivitas Suara, saya telah menggunakan program EnergyDetector dari perangkat pengenalan speaker MISTRAL (sebelumnya LIA_RAL), berdasarkan perpustakaan ALIZE.

Ini bekerja dengan file fitur, bukan dengan file audio, jadi Anda harus mengekstraksi energi sinyal. Saya biasanya mengekstrak fitur cepstral (MFCC) dengan parameter log-energy, dan saya menggunakan parameter ini untuk VAD. Anda dapat menggunakan sfbcep`, bagian utilitas dari perangkat pemrosesan sinyal SPro dengan cara berikut:

sfbcep -F PCM16 -p 19 -e -D -A input.wav output.prm

Ini akan mengekstrak 19 MFCC + koefisien log-energi + koefisien delta urutan pertama dan kedua. Koefisien energi adalah yang ke-19, Anda akan menentukannya di file konfigurasi EnergyDetector.

Anda kemudian akan menjalankan EnergyDetector dengan cara ini:

EnergyDetector --config cfg/EnergyDetector.cfg --inputFeatureFilename output 

Jika Anda menggunakan file konfigurasi yang Anda temukan di akhir jawaban, Anda perlu memasukkan output.prm di prm/ , dan Anda akan menemukan segmentasi di lbl/ .

Sebagai referensi, saya lampirkan file konfigurasi EnergyDetector saya:

*** EnergyDetector Config File
***

loadFeatureFileExtension        .prm
minLLK                          -200
maxLLK                          1000
bigEndian                       false
loadFeatureFileFormat           SPRO4
saveFeatureFileFormat           SPRO4
saveFeatureFileSPro3DataKind    FBCEPSTRA
featureServerBufferSize         ALL_FEATURES
featureServerMemAlloc           50000000
featureFilesPath                prm/
mixtureFilesPath                gmm/
lstPath                         lst/
labelOutputFrames               speech
labelSelectedFrames             all
addDefaultLabel                 true
defaultLabel                    all
saveLabelFileExtension          .lbl
labelFilesPath                  lbl/    
frameLength                     0.01
segmentalMode                   file
nbTrainIt                       8       
varianceFlooring                0.0001
varianceCeiling                 1.5     
alpha                           0.25
mixtureDistribCount             3
featureServerMask               19      
vectSize                        1
baggedFrameProbabilityInit      0.1
thresholdMode                   weight

Sphinx CMU

Perangkat lunak pengenalan suara CMU Sphinx berisi VAD bawaan. Itu ditulis dalam C, dan Anda mungkin dapat meretasnya untuk menghasilkan file label untuk Anda.

Tambahan yang sangat baru adalah dukungan GStreamer. Ini berarti Anda dapat menggunakan VAD-nya di pipeline media GStreamer. Lihat Menggunakan PocketSphinx dengan GStreamer dan Python -> Elemen 'vader'

VAD lainnya

Saya juga telah menggunakan versi modifikasi dari AMR1 Codec yang menghasilkan file dengan klasifikasi ucapan/bukan ucapan, tetapi saya tidak dapat menemukan sumbernya secara online, maaf.


webrtcvad adalah pembungkus Python di sekitar kode Deteksi Aktivitas Suara WebRTC Google yang luar biasa.

Muncul dengan file, example.py, yang berfungsi persis seperti yang Anda cari:Dengan file .wav, ia menemukan setiap contoh seseorang berbicara dan menuliskannya ke file .wav baru yang terpisah.

API webrtcvad sangat sederhana, seandainya example.py tidak melakukan apa yang Anda inginkan:

import webrtcvad

vad = webrtcvad.Vad()
# sample must be 16-bit PCM audio data, either 8KHz, 16KHz or 32Khz,
# and 10, 20, or 30 milliseconds long.
print vad.is_voiced(sample)

Hai pyAudioAnalysis memiliki fungsi penghilangan senyap.

Di perpustakaan ini, penghapusan senyap bisa sesederhana itu:

from pyAudioAnalysis import audioBasicIO as aIO from pyAudioAnalysis import audioSegmentation as aS [Fs, x] = aIO.readAudioFile("data/recording1.wav") segments = aS.silenceRemoval(x, Fs, 0.020, 0.020, smoothWindow = 1.0, Weight = 0.3, plot = True)

Heningkan secara internal removal() mengikuti pendekatan semi-diawasi:pertama model SVM dilatih untuk membedakan antara kerangka jangka pendek berenergi tinggi dan berenergi rendah. Menjelang akhir ini, 10% dari kerangka energi tertinggi bersama dengan 10% dari yang terendah digunakan. Kemudian, SVM diterapkan (dengan keluaran probabilistik) pada seluruh rekaman dan ambang batas dinamis digunakan untuk mendeteksi segmen aktif.


Linux
  1. Apa Arti "rc" Dalam .bashrc?

  2. Untuk Apa Inode Baik?

  3. Apa itu file .so.2?

  1. Apa yang mendefinisikan pemutar musik open source tingkat atas untuk Linux?

  2. Apa solusi yang bagus untuk penandaan file di linux?

  3. Apa penampil file CHM yang bagus untuk (Fedora) Linux?

  1. Perintah apa yang hilang dari file bashrc Anda?

  2. Membaca Baris Dari File Dengan Bash:Untuk Vs. Ketika?

  3. Apa buku Linux/Unix yang bagus untuk pengguna tingkat lanjut?