Determinar qué tan similar es el audio al habla humana

12

Mientras buscaba una respuesta a este problema, encontré este tablero, así que decidí publicar esta pregunta mía en Stack Overflow.


Estoy buscando un método para determinar la similitud entre un segmento de audio y una voz humana, que se expresa numéricamente.

He buscado bastante, pero lo que he encontrado hasta ahora (detallado a continuación) realmente no se ajusta a lo que necesito:

  • Un método es usar un software de reconocimiento de voz para obtener palabras de un segmento de audio. Sin embargo, este método no puede determinar cuán "similar" es el audio al habla humana; a menudo puede decir si hay palabras en el audio o no, pero si no hay palabras definidas, no puede decir que el audio es tener esas palabras.
    Ejemplos: CMU Sphinx , Dragonfly , SHoUT

  • El método más prometedor se conoce como Detección de actividad de voz (VAD). Sin embargo, esto tiende a tener los mismos problemas: los algoritmos / programas que usan VAD tienden a devolver simplemente si se ha alcanzado o no el umbral de actividad, y ningún valor de "similitud" antes o después de dicho umbral. Alternativamente, muchos solo buscan volumen, no similitud con el habla humana.
    Ejemplos: Speex , Listener , FreeSWITCH


¿Algunas ideas?

Jeff Gortmaker
fuente
1
De su pregunta no está claro si su problema es A / tomar una grabación de audio y dice si contiene o no un discurso humano (ejemplo de aplicación: detectar y eliminar la conversación de DJ de una grabación de un programa de radio); o B / toma entrada de voz y dice cuán similar suena a un segmento de audio de referencia. En el caso de que sea B, ¿en qué criterios desea medir la similitud? ¿En el contorno de la melodía? (por ejemplo: emparejar una voz cantada con una canción). ¿En ritmo y clases de grupo? (por ejemplo: hacer coincidir beatboxing / onomatopeya con un loop de batería). En el timbre? (haciendo coincidir una voz con un efecto de sonido). Por favor díganos su solicitud.
pichenettes
Lo siento, mi problema es lo que detallaste en A. Deseo determinar si un segmento de audio es o no un discurso humano.
Jeff Gortmaker
1
He estado trabajando en un problema relacionado: tratar de determinar cuándo los sonidos de los ronquidos / respiración han sido "contaminados" por el habla o la música. Es frustrantemente difícil de hacer con cualquier fiabilidad, y sin recurrir a algoritmos de reconocimiento de voz "avanzados" (si de hecho, incluso funcionarían). Mi única observación sería que el habla tiende a tener un ritmo irregular, mientras que la música es (generalmente) regular. Vale la pena comprobar eso y tal vez la "planitud espectral" (todavía estoy evaluando sus méritos para mis propósitos).
Daniel R Hicks
(Un poco más de detalle: encuentro que la desviación estándar normalizada de la planitud espectral calculada a partir de la FFT del audio parece reflejar algo de calidad de audio.)
Daniel R Hicks

Respuestas:

6

Este tipo de problema generalmente se resuelve utilizando técnicas de aprendizaje automático.

Divide la señal en una secuencia de cuadros de 20 ms o 50 ms. Extraer características en cada cuadro. Los MFCC son generalmente buenos para este tipo de aplicación, aunque hay características más específicas para la detección de voz (energía de modulación de 4 Hz, que es aproximadamente la velocidad a la que la gente habla; tasa de cruce por cero).

Luego, utilizando un conjunto de audio de entrenamiento que haya etiquetado manualmente como voz / no voz, entrene un clasificador (modelos de mezcla gaussiana, SVM ...) en las características de los cuadros.

Esto le permitirá clasificar los marcos no etiquetados en clases de habla / no habla. El último paso consiste en suavizar las decisiones (es probable que un marco clasificado como sin voz rodeado de cientos de marcos de voz sea un error de clasificación), por ejemplo, utilizando HMM o simplemente un filtro de mediana.

Algunas referencias:

Clasificación sólida de voz / música en documentos de audio (Pinquier y otros) Discriminación de voz / música para aplicaciones multimedia (El-Maleh y otros) Una comparación de características para la discriminación de voz y música (Carey y otros)

Tenga en cuenta que las características y las técnicas de clasificación que describen también son relevantes para el problema de 1 clase de detectar el habla (en lugar de discriminar el discurso frente a otra cosa). En este caso, puede utilizar técnicas de modelado de 1 clase, como SVM de 1 clase, o simplemente tomar la puntuación de probabilidad de un GMM capacitado en datos de voz como una medida de "habla".

Si, por otro lado, su problema es realmente discriminar el discurso frente a otra cosa (por ejemplo, música), también podría usar enfoques no supervisados que se centran en detectar los límites entre contenido de audio similar, en lugar de identificar este contenido en sí mismo.

pichenettes
fuente
Gracias, esto ayuda mucho! ¿Cuál es el beneficio de descomponer la señal en ventanas pequeñas? Debido a que la salida que busco es un valor numérico que describe todo el segmento de audio, ¿sería mejor extraer funciones para toda la señal y no solo para ventanas específicas?
Jeff Gortmaker
Calcular las características (particularmente las espectrales o cepstrales) en ventanas muy largas promediaría o cancelaría algunas de las propiedades que hacen que el discurso se destaque. Puede verificar esto usted mismo mezclando muchos fragmentos breves del discurso; será difícil reconocer el resultado como discurso. Por lo tanto, es mejor realizar la clasificación en segmentos pequeños; y, en su caso, agregue los puntajes (por ejemplo, calcule el promedio del puntaje de probabilidad dado por un GMM; o calcule el% de cuadros clasificados como habla por un clasificador binario).
pichenettes
Para ser más precisos, tenga en cuenta que la dimensión temporal está "colapsada" cuando observa un espectro. Por ejemplo, el espectro de potencia de un tono de 500 Hz seguido en el tiempo por un tono de 1 kHz es similar al espectro de potencia de esos dos tonos reproducidos simultáneamente; Por lo tanto, el espectro de potencia, en una ventana larga, de una señal que cambia mucho podría no ser muy representativo del contenido de la señal.
pichenettes