GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Was ist ein guter Ansatz, um Sprachteile aus einer beliebigen Audiodatei zu extrahieren?

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.


Linux
  1. Was definiert einen erstklassigen Open-Source-Musikplayer für Linux?

  2. Wofür sind Inodes gut?

  3. Wozu dient die .la-Datei von libtool?

  4. Was ist eine .so.2-Datei?

  5. Was bedeutet ein + am Ende der Berechtigungen von ls -l?

Was ist eine .sh-Datei?

Wie höre ich auf, IP von EC2 zu known_hosts für ssh hinzuzufügen?

Was ist das Äquivalent zum Linux-Dateibefehl für Windows?

Was ist eine Alternative zur Everything-Suche für Linux?

Wozu dient Linux test -a command test?

Was ist die Standarddatei für „hostname“?