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.