EnergyDetector
Pro detekci hlasové aktivity jsem používal program EnergyDetector sady nástrojů pro rozpoznávání reproduktorů MISTRAL (byl LIA_RAL), založený na knihovně ALIZE.
Pracuje se soubory funkcí, nikoli se zvukovými soubory, takže budete muset extrahovat energii signálu. Obvykle extrahuji kepstrální rysy (MFCC) pomocí parametru log-energie a tento parametr používám pro VAD. Sfbcep`, obslužnou součást sady nástrojů pro zpracování signálu SPro, můžete použít následujícím způsobem:
sfbcep -F PCM16 -p 19 -e -D -A input.wav output.prm
Získá 19 MFCC + logaritmický energetický koeficient + delta koeficienty prvního a druhého řádu. Energetický koeficient je 19., určíte jej v konfiguračním souboru EnergyDetector.
Poté spustíte EnergyDetector tímto způsobem:
EnergyDetector --config cfg/EnergyDetector.cfg --inputFeatureFilename output
Pokud používáte konfigurační soubor, který najdete na konci odpovědi, musíte zadat output.prm
v prm/
a segmentaci najdete v lbl/
.
Jako odkaz přikládám konfigurační soubor 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
Sfinga CMU
Software pro rozpoznávání řeči CMU Sphinx obsahuje vestavěný VAD. Je napsán v C a možná ho budete moci hacknout a vytvořit pro vás soubor štítku.
Velmi nedávným přírůstkem je podpora GStreamer. To znamená, že můžete použít jeho VAD v kanálu médií GStreamer. Viz Použití PocketSphinx s GStreamer a Python -> Element 'vader'
Další VAD
Také jsem používal upravenou verzi kodeku AMR1, který vydává soubor s klasifikací řeči/nemluvy, ale nemohu najít její zdroje online, omlouvám se.
webrtcvad je obal Pythonu kolem vynikajícího kódu detekce hlasové aktivity WebRTC od Googlu.
Dodává se se souborem example.py, který dělá přesně to, co hledáte:Díky souboru .wav najde každý výskyt někoho mluvícího a zapíše ho do nového samostatného souboru .wav.
Webrtcvad API je extrémně jednoduché, pro případ, že example.py nedělá přesně to, co chcete:
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)
Ahoj pyAudioAnalysis má funkci odstranění ticha.
V této knihovně může být odstranění ticha tak jednoduché:
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)
Interně ztišit removal()
následuje částečně kontrolovaný přístup:nejprve je trénován model SVM, aby rozlišoval mezi vysokoenergetickými a nízkoenergetickými krátkodobými snímky. K tomuto účelu se využívá 10 % rámců s nejvyšší energií spolu s 10 % rámců s nejnižšími energiemi. Poté je SVM aplikován (s pravděpodobnostním výstupem) na celý záznam a k detekci aktivních segmentů je použito dynamické prahování.