linux audio signal-processing voice voice-detection

linux - ¿Cuál es un buen enfoque para extraer partes de voz de un archivo de audio arbitrario?



signal-processing voice (4)

EnergyDetector

Para la detección de actividad de voz, he estado usando el programa EnergyDetector del kit de herramientas de reconocimiento de altavoces MISTRAL (era LIA_RAL), basado en la biblioteca ALIZE.

Funciona con archivos de características, no con archivos de audio, por lo que deberá extraer la energía de la señal. Por lo general, extraigo características cepstral (MFCC) con el parámetro log-energy, y uso este parámetro para VAD. Puede usar sfbcep`, una parte de utilidad del kit de herramientas de procesamiento de señales SPro de la siguiente manera:

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

Extraerá 19 coeficientes MFCC + log-energy + coeficientes delta de primer y segundo orden. El coeficiente de energía es el 19, usted lo especificará en el archivo de configuración de EnergyDetector.

A continuación, ejecutará EnergyDetector de esta manera:

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

Si usa el archivo de configuración que encuentra al final de la respuesta, debe poner output.prm en prm/ , y encontrará la segmentación en lbl/ .

Como referencia, adjunto mi archivo de configuración de 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

El software de reconocimiento de voz CMU Sphinx contiene un VAD incorporado. Está escrito en C y es posible que pueda piratearlo para producir un archivo de etiqueta para usted.

Una adición muy reciente es el soporte de GStreamer. Esto significa que puede usar su VAD en un canal de medios de GStreamer. Consulte Uso de PocketSphinx con GStreamer y Python -> El elemento ''vader''

Otros VADs

También he estado usando una versión modificada del códec AMR1 que genera un archivo con clasificación de voz / no voz, pero no puedo encontrar sus fuentes en línea, lo siento.

Tengo un conjunto de archivos de audio que los usuarios cargan, y no se sabe qué contienen.

Me gustaría tomar un archivo de audio arbitrario y extraer cada una de las instancias en las que alguien está hablando en archivos de audio separados. No quiero detectar las palabras reales, solo los puntos "comenzó a hablar", "dejó de hablar" y genera nuevos archivos en estos puntos.

(Estoy apuntando a un entorno Linux y desarrollando en una Mac)

Encontré a Sox , que parece prometedor, y tiene un modo ''vad'' (Detección de actividad de voz). Sin embargo, esto parece encontrar la primera instancia de voz y tiras de audio hasta ese punto, por lo que está cerca, pero no del todo bien.

También he mirado la biblioteca ''wave'' de Python, pero luego tendría que escribir mi propia implementación de ''vad'' de los Sox.

¿Hay alguna herramienta de línea de comandos que haría lo que yo quisiera? Si no, ¿se acerca algún buen Python o Ruby?


Hola pyAudioAnalysis tiene una funcionalidad de eliminación de silencio.

En esta biblioteca, la eliminación de silencio puede ser tan simple como eso:

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)

La removal() silencio interno removal() sigue un enfoque semi-supervisado: primero, un modelo SVM está entrenado para distinguir entre marcos de corto plazo de alta energía y de baja energía. Con este fin, se utiliza el 10% de los cuadros de energía más alta junto con el 10% de los cuadros más bajos. Luego, se aplica la SVM (con una salida probabilística) en toda la grabación y se utiliza un umbral dinámico para detectar los segmentos activos.



webrtcvad es un envoltorio de Python alrededor del excelente código de detección de actividad de voz de WebRTC Google.

Viene con un archivo, example.py , que hace exactamente lo que está buscando: dado un archivo .wav, encuentra cada instancia de alguien que habla y lo escribe en un nuevo archivo .wav separado.

La API webrtcvad es extremadamente simple, en caso de que example.py no haga lo que usted quiere:

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)