Energiedetektor
Für die Sprachaktivitätserkennung habe ich das EnergyDetector-Programm des MISTRAL (früher LIA_RAL) Sprechererkennungs-Toolkits verwendet, das auf der ALIZE-Bibliothek basiert.
Es funktioniert mit Feature-Dateien, nicht mit Audiodateien, daher müssen Sie die Energie des Signals extrahieren. Normalerweise extrahiere ich Cepstral Features (MFCC) mit dem Log-Energy-Parameter und verwende diesen Parameter für VAD. Sie können sfbcep`, einen Dienstprogrammteil des SPro-Signalverarbeitungs-Toolkits, auf folgende Weise verwenden:
sfbcep -F PCM16 -p 19 -e -D -A input.wav output.prm
Es wird 19 MFCC + Log-Energie-Koeffizient + Delta-Koeffizienten erster und zweiter Ordnung extrahieren. Der Energiekoeffizient ist der 19., den geben Sie in der EnergyDetector-Konfigurationsdatei an.
Anschließend führen Sie EnergyDetector folgendermaßen aus:
EnergyDetector --config cfg/EnergyDetector.cfg --inputFeatureFilename output
Wenn Sie die Konfigurationsdatei verwenden, die Sie am Ende der Antwort finden, müssen Sie output.prm
einfügen in prm/
, und Sie finden die Segmentierung in lbl/
.
Als Referenz hänge ich meine EnergyDetector-Konfigurationsdatei an:
*** 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
CMU-Sphinx
Die Spracherkennungssoftware CMU Sphinx enthält ein integriertes VAD. Es ist in C geschrieben und Sie können es möglicherweise hacken, um eine Etikettendatei für Sie zu erstellen.
Eine ganz neue Ergänzung ist die GStreamer-Unterstützung. Das bedeutet, dass Sie dessen VAD in einer GStreamer-Medienpipeline verwenden können. Siehe PocketSphinx mit GStreamer und Python verwenden -> Das 'vader'-Element
Andere VADs
Ich habe auch eine modifizierte Version des AMR1-Codecs verwendet, die eine Datei mit Sprache/Nicht-Sprache-Klassifizierung ausgibt, aber ich kann ihre Quellen online nicht finden, tut mir leid.
webrtcvad ist ein Python-Wrapper um Googles exzellenten WebRTC-Sprachaktivitätserkennungscode.
Es kommt mit einer Datei namens example.py, die genau das macht, wonach Sie suchen:Bei einer gegebenen .wav-Datei findet es jede Instanz von jemandem, der spricht, und schreibt es in eine neue, separate .wav-Datei.
Die webrtcvad-API ist extrem einfach, falls example.py nicht ganz das tut, was Sie wollen:
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)
Hallo pyAudioAnalysis hat eine Funktion zum Entfernen von Stille.
In dieser Bibliothek kann das Entfernen von Stille so einfach sein:
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)
removal()
intern stumm schalten folgt einem halbüberwachten Ansatz:Zuerst wird ein SVM-Modell trainiert, um zwischen hochenergetischen und niederenergetischen Kurzzeitrahmen zu unterscheiden. Zu diesem Zweck werden 10 % der Frames mit der höchsten Energie zusammen mit den 10 % der Frames mit der niedrigsten Energie verwendet. Dann wird die SVM (mit einer probabilistischen Ausgabe) auf die gesamte Aufzeichnung angewendet und ein dynamischer Schwellenwert wird verwendet, um die aktiven Segmente zu erkennen.