speech recognition - tutorial - Código fuente abierto para detección y discriminación de voz.
speech to text android (8)
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 mostró. No quiero escuchar 20 horas de cinta para encontrarla. Es posible que la ubicación no esté al principio de una de las cintas. La mayoría del contenido parece caer en tres categorías: en orden de longitud total, primero la más larga: silencio, radio hablado y música.
Planeo convertir todas las cintas a formato digital, y luego buscar nuevamente la grabación. La forma obvia es reproducirlas todas en el fondo mientras hago otras cosas. Eso es demasiado sencillo para mí, así que: ¿Hay alguna biblioteca de código abierto u otro código que me permita encontrar, en orden creciente de sofisticación y utilidad?
- Regiones no silenciosas
- Regiones que contienen el habla humana
- Regiones que contienen mi propio discurso (y el de mi abuela)
Mi preferencia es para Python, Java o C.
Respuestas fallidas, se agradecerían sugerencias sobre 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.
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 #. Puedes echar un vistazo here
La mejor opción sería encontrar un módulo de código abierto que haga reconocimiento de voz o identificación de orador (no reconocimiento de voz). La identificación del hablante se usa para identificar un hablante particular, mientras que el reconocimiento de voz está convirtiendo el audio hablado en texto. Puede haber paquetes de identificación de oradores de código abierto, puede intentar buscar en "SourceForge.net" la "identificación del orador" o "voz y biometría". Como no he usado uno, no puedo recomendar nada.
Si no puede encontrar nada pero está interesado en crear uno propio, entonces hay muchas bibliotecas FFT de código abierto para cualquier idioma popular. La técnica sería:
- Obtenga una grabación típica de usted hablando normalmente y su abuela hablando normalmente en forma digital, algo con el menor ruido de fondo posible
- Toma la FFT de cada segundo de audio en las grabaciones de destino.
- Del conjunto de perfiles FFT que ha creado, filtre cualquiera por debajo de un cierto umbral de energía promedio, ya que es muy probable que sean ruidos.
- Cree un perfil FFT maestro promediando las instantáneas FFT no filtradas
- Luego repita la técnica de muestreo FFT anterior en el audio objetivo digitalizado (las 20 horas de material)
- Marque cualquier área en los archivos de audio de destino donde la instantánea de FFT en cualquier momento el índice sea similar a su perfil maestro de FFT para que usted y su abuela hablen. Deberá jugar con la configuración de similitud para que no obtenga demasiados falsos positivos. También tenga en cuenta que es posible que tenga que limitar la comparación de la bandeja de frecuencia FFT a solo las ubicaciones de 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, eliminará su función de similitud.
- Haga una lista de índices de tiempo para la inspección manual.
Tenga en cuenta que la cantidad de horas para completar este proyecto podría superar fácilmente las 20 horas de escuchar las grabaciones manualmente. Pero será mucho más divertido que pasar 20 horas de audio y puede usar el software que vuelva a crear en el futuro.
Por supuesto, si el audio no es sensible desde un punto de vista de privacidad, podría subcontratar la tarea de audición de audio a algo como el turco mecánico de Amazon.
Lo que probablemente te ahorre la mayor parte del tiempo es la diarización del hablante. Esto funciona al anotar la grabación con ID de orador, que luego puede mapear manualmente a personas reales con muy poco esfuerzo. Las tasas de errores suelen ser aproximadamente del 10 al 15% de la longitud del registro, lo que suena horrible, pero esto incluye detectar demasiados oradores y asignar dos ID a la misma persona, lo que no es tan difícil de reparar.
Una buena herramienta es el kit de herramientas SHoUT (C ++), aunque es un poco delicado en cuanto al formato de entrada. Ver uso para esta herramienta del autor . Da salida a los metadatos de detección de actividad de voz / voz Y a la diarización de los altavoces , lo que significa que obtiene el primer y segundo puntos (VAD / SAD) y un poco más, ya que anota cuándo está el mismo altavoz activo en una grabación.
La otra herramienta útil es la spkdiarization de LIUM (Java), que básicamente hace lo mismo, excepto que todavía no he puesto el suficiente esfuerzo para averiguar cómo obtener metadatos VAD. Cuenta con un paquete descargable listo para usar.
Con un poco de compilación, esto debería funcionar en menos de una hora.
Prueba audacity + ve la pista como espectrograma (logf) + entrena tus ojos (!) Para reconocer el habla. Tendrá que ajustar la escala de tiempo y la ventana FFT.
Si está familiarizado con Java, puede intentar alimentar los archivos de audio a través de minim y calcular algunos espectros FFT. El silencio podría detectarse definiendo un nivel mínimo para la amplitud de las muestras (para descartar el ruido). Para separar el habla de la música, se puede utilizar el espectro FFT de una ventana de tiempo. El habla usa algunas bandas de frecuencia muy distintas llamadas formantes, especialmente para las voces, la música se distribuye de manera más uniforme entre el espectro de frecuencias.
Es probable que no obtengas una separación del 100% de los bloques de voz / música, pero debería ser lo suficientemente bueno como para etiquetar los archivos y solo escuchar las partes interesantes.
También pyAudioAnalysis probar pyAudioAnalysis para:
- 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 de no silencio.
- Clasificación: Discriminación del habla frente a la música: pyAudioAnalysis también incluye clasificadores pyAudioAnalysis - pyAudioAnalysis , que se pueden usar para clasificar segmentos desconocidos para el habla o la música.
Yo empezaria aqui
http://www-lium.univ-lemans.fr/diarization/doku.php/quick_start
codeblocks :: es bueno para gcc