GNU/Linux >> Tutoriels Linux >  >> Linux

Quelle est une bonne approche pour extraire des portions de parole d'un fichier audio arbitraire ?

Détecteur d'énergie

Pour la détection d'activité vocale, j'ai utilisé le programme EnergyDetector de la boîte à outils de reconnaissance du locuteur MISTRAL (anciennement LIA_RAL), basé sur la bibliothèque ALIZE.

Il fonctionne avec des fichiers de fonctionnalités, pas avec des fichiers audio, vous devrez donc extraire l'énergie du signal. J'extrait généralement les caractéristiques cepstrales (MFCC) avec le paramètre log-energy, et j'utilise ce paramètre pour VAD. Vous pouvez utiliser sfbcep`, un utilitaire faisant partie de la boîte à outils de traitement du signal SPro de la manière suivante :

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

Il extraira 19 MFCC + coefficient log-énergie + coefficients delta du premier et du second ordre. Le coefficient énergétique est le 19ème, vous le préciserez dans le fichier de configuration EnergyDetector.

Vous exécuterez ensuite EnergyDetector de cette manière :

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

Si vous utilisez le fichier de configuration que vous trouvez à la fin de la réponse, vous devez mettre output.prm en prm/ , et vous trouverez la segmentation dans lbl/ .

En guise de référence, je joins mon fichier de configuration EnergyDetector :

*** 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

Le logiciel de reconnaissance vocale CMU Sphinx contient un VAD intégré. Il est écrit en C, et vous pourrez peut-être le pirater pour produire un fichier d'étiquette pour vous.

Un ajout très récent est le support GStreamer. Cela signifie que vous pouvez utiliser son VAD dans un pipeline multimédia GStreamer. Voir Utiliser PocketSphinx avec GStreamer et Python -> L'élément 'vader'

Autres VAD

J'utilise également une version modifiée du codec AMR1 qui produit un fichier avec une classification parole/non parole, mais je ne trouve pas ses sources en ligne, désolé.


webrtcvad est un wrapper Python autour de l'excellent code de détection d'activité vocale WebRTC de Google.

Il est livré avec un fichier, example.py, qui fait exactement ce que vous recherchez :étant donné un fichier .wav, il trouve chaque instance de quelqu'un qui parle et l'écrit dans un nouveau fichier .wav distinct.

L'API webrtcvad est extrêmement simple, au cas où example.py ne ferait pas tout à fait ce que vous vouliez :

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)

Salut pyAudioAnalysis a une fonctionnalité de suppression de silence.

Dans cette bibliothèque, la suppression des silences peut être aussi simple que cela :

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)

Silence interne removal() suit une approche semi-supervisée :un modèle SVM est d'abord formé pour distinguer les cadres à court terme à haute énergie et à basse énergie. À cette fin, 10 % des cadres d'énergie les plus élevés ainsi que les 10 % des plus faibles sont utilisés. Ensuite, le SVM est appliqué (avec une sortie probabiliste) sur l'ensemble de l'enregistrement et un seuillage dynamique est utilisé pour détecter les segments actifs.


Linux
  1. Qu'est-ce qui définit un lecteur de musique open source de premier plan pour Linux ?

  2. Quelles commandes manquent dans votre fichier bashrc ?

  3. Que signifie "rc" dans .bashrc ?

  4. Lecture de lignes à partir d'un fichier avec Bash :pour Vs. Tandis que?

  5. A quoi sert le fichier .la de libtool ?

Quels sont les bons livres Linux/Unix pour un utilisateur avancé ?

Besoin d'un bon éditeur hexadécimal pour Linux

Quelle est une bonne approche pour extraire des portions de parole d'un fichier audio arbitraire ?

Qu'est-ce qu'un fichier .sh ?

Quelle est une bonne solution pour le marquage de fichiers sous Linux ?

Qu'est-ce qu'un bon visualiseur de fichiers CHM pour (Fedora) Linux ?