2011-04-22 16 views
24

Tengo 15 cintas de audio, una de las cuales creo que contiene una vieja grabación de mi abuela y yo hablando. Un intento rápido de encontrar el lugar correcto no lo subió. No quiero escuchar 20 horas de cinta para encontrarlo. La ubicación puede no estar al comienzo de una de las cintas. La mayor parte del contenido parece pertenecer a tres categorías, en orden de duración total, la más larga primero: silencio, voz de radio y música.Código fuente abierto para detección y discriminación de voz

Planeo convertir todas las cintas al formato digital, y luego buscar nuevamente la grabación. La forma obvia es jugarlos todos en el fondo mientras hago otras cosas. Eso es demasiado sencillo para mí, así: ¿Hay bibliotecas de código abierto, u otro código, que permitirían que encuentre, con el fin de aumentar la sofisticación y utilidad: regiones

  1. no silencioso
  2. Las regiones que contienen el habla humana
  3. Las regiones que contienen mi propia voz (y la de mi abuela)

mi preferencia es para Python, Java o C

respuestas fallando, h Se apreciarán los términos de búsqueda ya que no sé nada sobre el campo.

Entiendo que fácilmente podría pasar más de 20 horas en esto.

+9

1 para "entiendo que fácilmente podría pasar más de 20 horas en esto ". –

+1

Su última línea hace referencia a [este cómic] (https://xkcd.com/1319/) tan apropiado aquí. – jjj

Respuesta

2

dos ideas:

  • Buscar en el campo "reconocimiento de voz", por ejemplo CMUSphinx
  • Audacity tiene una función "truncar el silencio" que podrían ser útiles.
3

si está familiarizado con Java podría tratar de alimentar los archivos de audio a través de minimizar y calcular algunos espectros de FFT. El silencio podría detectarse definiendo un nivel mínimo para la amplitud de las muestras (para descartar ruido). Para separar el habla de la música, se puede usar el espectro de FFT de una ventana de tiempo. Speech utiliza bandas de frecuencia muy distintas llamadas formantes , especialmente para vovels, la música se distribuye de manera más uniforme entre el espectro de frecuencias.

Probablemente no obtendrá una separación del 100% de los bloques de voz/música, pero debería ser lo suficientemente bueno para etiquetar los archivos y solo escuchar las partes interesantes.

http://code.compartmental.net/tools/minim/

http://en.wikipedia.org/wiki/Formant

5

La mejor opción sería encontrar un módulo de código abierto que hace reconocimiento de voz o la identificación del hablante (no reconocimiento de voz). La identificación de los altavoces se usa para identificar un hablante particular, mientras que el reconocimiento de voz convierte el audio hablado en texto. Puede haber paquetes de identificación de hablantes de fuente abierta, puede intentar buscar algo como SourceForge.net para "identificación de locutor" o "voz Y datos biométricos". Como no he usado uno, no puedo recomendar nada.

Si no puede encontrar nada pero está interesado en rodar uno propio, hay muchas librerías FFT de código abierto para cualquier idioma popular.La técnica sería:

  • Obtener una grabación típica de ustedes hablando normalmente y su abuela hablando normalmente en forma digital, algo con tan poco ruido de fondo como sea posible
    • Tome la FFT de cada segundo de audio o por lo en las grabaciones de destino
    • de la serie de perfiles de FFT que ha creado, filtrar cualquier debajo de un determinado umbral de energía media, ya que son más propensos ruido
    • Construir un perfil FFT maestro calculando un promedio de las instantáneas sin filtro FFT
    • Luego repita la técnica de muestreo FFT anterior en el audio digitalizado objetivo (las 20 horas de material)
    • Marque las áreas en los archivos de audio de destino donde la instantánea FFT en cualquier momento es similar a su perfil FFT maestro para usted y su abuela hablando. Tendrá que jugar con la configuración de similitud para que no obtenga demasiados falsos positivos. También tenga en cuenta que puede que tenga que limitar su comparación de bin de frecuencia FFT a solo aquellos compartimientos de frecuencia en su perfil maestro de FFT que tienen energía. De lo contrario, si el audio de destino de usted y su abuela hablando contiene un ruido de fondo significativo, arrojará su función de similitud.
    • poner hacia fuera una lista de índices de tiempo para la inspección manual de

Tenga en cuenta, el número de horas para completar este proyecto podría superar fácilmente las 20 horas de escucha de las grabaciones de forma manual. Pero será mucho más divertido que procesar 20 horas de audio y puede usar el software que construya nuevamente en el futuro.

Por supuesto, si el audio no es delicado desde el punto de vista de la privacidad, podría externalizar la tarea de audición de audio a algo parecido al turk mecánico de Amazon.

+2

Gracias por el término de búsqueda - MARF tiene un módulo de identificación del hablante http://marf.sourceforge.net/ –

2

Escribí un artículo de blog sobre el uso del reconocimiento de voz de Windows. Tengo un tutorial básico sobre la conversión de archivos de audio a texto en C#. Puede consultar here.

+0

Parece que Wordpress mutiló mis bloques de código en algún momento. Trataré de arreglarlos este fin de semana. Sin embargo, si quiere relanzar su propio procesador de voz, creo que este es un gran lugar para comenzar. – mrtsherman

+0

Quizás, curiosamente, el enfoque de usar el reconocimiento de voz no se me había ocurrido, así que gracias por activar ese pensamiento aunque su respuesta sugiera usar un software que no es de código abierto (yendo en una búsqueda rápida, no parece haberlo) una implementación mono de System.Speech). –

+0

Eso es muy malo. ¡Ojalá tuviera una alternativa de código abierto para ti! – mrtsherman

-2

Pruebe audacity + ver la pista como espectrograma (logf) + entrena los ojos (!) Para reconocer el habla. Tendrá que ajustar la escala de tiempo y la ventana de FFT.

+0

Esta no es una sugerencia tan mala si tiene un monitor enorme y un montón de espacio en la pantalla; y un humano dispuesto a mirar una pantalla. – Kickaha

14

Lo que probablemente le salve la mayoría del tiempo es la diarización del hablante. Esto funciona anotando la grabación con las ID de los altavoces, que luego puede asignar manualmente a personas reales con muy poco esfuerzo. Las tasas de errores suelen ser de alrededor del 10-15% de la longitud de registro, lo que suena horrible, pero esto incluye detectar demasiados altavoces y asignar dos ID a la misma persona, lo cual no es tan difícil de corregir.

Una de esas buenas herramientas es SHoUT toolkit (C++), aunque es un poco exigente con el formato de entrada. Consulte el uso de esta herramienta from author. Emite detección de actividad de voz/voz metadata Y diarización de altavoz, lo que significa que obtiene 1er y 2do punto (VAD/SAD) y un poco más, ya que anota cuando el mismo altavoz está activo en una grabación.

La otra herramienta útil es LIUM spkdiarization (Java), que básicamente hace lo mismo, excepto que todavía no he puesto suficiente esfuerzo para averiguar cómo obtener los metadatos VAD. Cuenta con un agradable y listo para usar downloadable package.

Con un poco de compilación, esto debería funcionar en menos de una hora.

4

También puede probar a pyAudioAnalysis:

  1. eliminación de silencio:

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)

segments contiene los puntos finales de los segmentos no silencio.

  1. Clasificación: Speech vs discriminación música: pyAudioAnalysis también incluye clasificadores pretrained, que pueden ser utilizados para clasificar los segmentos desconocidos para ya sea habla o la música.
+0

Archivo "/Library/Python/2.7/site-packages/pyAudioAnalysis/audioFeatureExtraction.py", línea 572, en stFeatureExtraction curFV [2] = stEnergyEntropy (x) # entropía de energía a corto plazo Archivo "/ Library/Python /2.7/site-packages/pyAudioAnalysis/audioFeatureExtraction.py ", línea 48, en stEnergyEntropy subWindows = frame.reshape (subWinLength, numOfShortBlocks, order = 'F'). Copy() ValueError: no se puede remodelar la matriz de tamaño 1920 en forma (96,10) – baswaraj

+0

no se pueden extraer las características – baswaraj

Cuestiones relacionadas