Etiqueta: asr

  • Whisper: el reconocedor de audio local definitivo

    Whisper: el reconocedor de audio local definitivo

    Whisper es una herramienta gratuita y software libre que utiliza inteligencia artificial local de nuestros sistemas para reconocer palabras en un archivo de audio y convertirlas a texto (lo que se conoce normalmente como ASR: Automatic Speech Recognizer) y que ha sido desarrollada por los creadores de Dall-E2 y ChatGPT: OpenAI.

    Ya conocéis VOSK y vimos sus ventajas y sus inconvenientes, en la mayoría de los casos esta herramienta es más que suficiente para lo que necesita la mayoría que no tenga muchos requisitos. No obstante, cuando apareció Whisper decidimos echarle un vistazo y su resultado nos sorprendió más de lo que pudieramos imaginar. Reconoce nombres, fechas, matrículas, números de ID, y prácticamente cualquier cosa que se dijera, incluso puede reconocer a distintas personas y escribir la conversación como si fuera un guión de una película. Whisper de OpenAI había vuelto a hacerlo aunque no tuviera mucha publicidad de los grandes medios, es una herramienta fabulosa y que merecía la pena probarla en serio.

    Whisper utiliza como «motor de inteligencia artificial» la librería PyTorch, una librería muy conocida y que, aunque lleva muchos años funcionando, es una de las mejores, aunque como tal, requiere de hardware especial.

    Whisper requiere una GPU compatible

    Ahí es donde empezamos a pensar en probarla en local y nos encontramos con algo que ya esperábamos: al trabajar con inteligencia artificial requiere de una gran potencia de cálculo, lo que implica que allá donde queramos ejecutarla necesitaba de una GPU (una tarjeta gráfica potente) que soporte CUDA porque sin esto, reconocer 1 minuto de conversación podía llevar más de 2 horas de cómputo.

    No obstante, entramos en su web e instalamos Whisper para probarlo en un ordenador con una tarjeta gráfica con CUDA y vemos qué tal funciona y los resultados son espectaculares, además de que, a diferencia de otros servicios de OpenAI, Whisper no requiere de conexiones remotas a servidores externos, por lo que el reconocimiento es local.

    Reconocimiento multi-idioma y diferentes modelos

    Reconoce prácticamente cualquier idioma: Español, Inglés, Francés, Catalán, Gallego, y 50 idiomas más.
    Tiene varios modelos separados en función de la calidad del reconocimiento:

    SizeParametersEnglish-only modelMultilingual modelRequired VRAMRelative speed
    tiny39 Mtiny.entiny~1 GB~32x
    base74 Mbase.enbase~1 GB~16x
    small244 Msmall.ensmall~2 GB~6x
    medium769 Mmedium.enmedium~5 GB~2x
    large1550 MN/Alarge~10 GB1x

    Como veis, un reconocimiento mínimo apenas consume 39Mb y 1Gb de RAM, además de ser muy rápido, pero en este caso Vosk es incluso mejor.
    Para que Whisper reconozca medianamente bien, el modelo recomendado es small o medium, y con esto, una conversación telefónica podría ser perfectamente reconocida y procesada, mucho mejor que Vosk.

    Demo gratuito de Whisper

    Como lo mejor es una demo para que lo probéis, aquí hay una web que tiene un procesador especial para probar Whisper remotamente: https://huggingface.co/spaces/anzorq/openai_whisper_stt

  • AEAP: El protocolo de aplicaciones externas de Asterisk

    AEAP: El protocolo de aplicaciones externas de Asterisk

    El equipo de desarrollo de Asterisk acaba de anunciar que ya está listo el AEAP (Asterisk External Application Protocol), un protocolo que llevaba más de un año siendo desarrollado y que por fin ha visto la luz a partir de las versiones de Asterisk 18.12.0 y Asterisk 19.4.0 y que nos permitirá conectar con aplicaciones externas para enviarles audio y datos y obtener resultados sobre estos.

    Un ejemplo básico que están utilizando como demostración para entender cómo funciona el AEAP es un módulo para convertir VOZ a TEXTO (speech-to-text) y que utiliza la API de Google para hacer la conversión, pero que podríamos utilizar otros motores y crear nuestro propio conector gracias a este protocolo.

    El protocolo AEAP nos permite crear un «subsistema» para dar de alta aplicaciones nativas de Asterisk que recibirán datos de entrada y generarán datos de respuesta. Para hacer estos «subsistemas» hay que conocer cómo funciona la arquitectura de Asterisk y utilizar los módulos res_aeap.h y res_aeap_message.h desde donde generaremos un nuevo «motor» al que podremos enviar los datos y que devolverá el resultado que éste nos devuelva.

    Como ejemplo de uso, han creado un «subsistema para hacer el reconocimiento de voz a texto» y lo han incorporado a Asterisk en el módulo res_speech_aeap.c lo que generará un nuevo motor de reconocimiento que podremos utilizar con los comandos estándar de Asterisk SpeechCreate, SpeechStart y SpeechDestroy para enviarle el audio y que el motor nos devuelva el resultado:

    exten => 550,1,NoOp()
    	same => n,Answer()
    	same => n,SpeechCreate(my-speech-to-text)
    	same => n,SpeechStart()
    	same => n,SpeechBackground(hello-world)
    	same => n,Verbose(0,${SPEECH_TEXT(0)})
    	same => n,SpeechDestroy()
    	same => n,Hangup()

    Ese «my-speech-to-text» es un motor «custom» que hemos creado gracias a un servidor websocket que recibe el audio y lo envía a la API de reconocimiento de Google para que nos devuelva en la variable ${SPEECH_TEXT} el resultado del reconocimiento, pero que con algo de maña, se puede adaptar para que, en lugar de Google, utilicemos otros sistemas diferentes, e incluso que el resultado, en lugar de devolvernos el texto, nos devuelva otra información (identificación de la persona que habla, estado de humor, edad aproximada de la persona, etc. por poner un ejemplo)

    Ese «my-speech-to-text» se configura en el archivo de configuración ‘aeap.conf‘ que tendría algo como esto:

    [my-speech-to-text]
    type=client
    codecs=!all,ulaw
    url=ws://127.0.0.1:9099
    protocol=speech_to_text

    y en el puerto 9099, tendríamos un servidor websocket que sería quien recibiría el audio y generaría las variables de resultado.

    En esta URL podéis encontrar el servidor websocket que usan como ejemplo:
    https://github.com/asterisk/aeap-speech-to-text

    Este sistema no es algo orientado al usuario final de Asterisk, quizá requiere de conocimientos algo más avanzados, pero los resultados son verdaderamente interesantes y prometedores.

    Mas información:
    Introducción al AEAP (protocolo)
    Introducción al uso del AEAP orientado a Reconocimiento de voz
    Interfaz API de Asterisk para el reconocimiento de voz
    Ejemplo de servidor y configuración básica para el reconocimiento de voz

  • Probamos Vosk: un ASR gratuito, libre y que no necesita Internet

    Probamos Vosk: un ASR gratuito, libre y que no necesita Internet

    Hace unos días recibo por parte de el canal de anuncios de Issabel, la compatibilidad con Vosk, un ASR gratuito, libre y offline (no necesita internet para funcionar). Issabel vuelve a adelantarse a todas las distribuciones de comunicaciones esta vez con algo que mucha gente quiere y lo han incluido ya en sus sistemas.

    Leo el comunicado y pienso… ¿Cómo??? debe tener truco…
    Conozco varios sistemas que, aprovechando el boom de la inteligencia artificial y las redes neuronales, se han lanzado a crear modelos de reconocimiento de audio muy interesantes. Hace un par de años estuvimos en el Stand de Mozilla leyendo unos textos para ayudar a enseñar al motor. No obstante, este proyecto nos había pasado desapercibido y eso que posteriormente parecía haber pasado por delante en varias ocasiones sin haberme percatado de la joya que era.

    Efectivamente, no tiene truco, la gente de Issabel no solo ha estado muy atenta si no que ha incorporado, además de muchas herramientas con las que ya cuenta, un reconocedor de audio (ASR) completamente libre y gratuito y que, a diferencia de muchos otros, no depende de terceros como Google, Amazon, Microsoft, etc.

    Vosk es el motor, una aplicación escrita en Python y basada en redes neuronales que reconoce palabras en varios idiomas (según el diccionario que le cargues) y que funciona de forma independiente (no requiere conexiones a otros sistemas) por lo que instalas el servidor, cargas el diccionario del idioma que deseas, lo ejecutas y ya está el puerto listo para enviarle audio y que el motor lo convierta a texto.

    Investigando, me di cuenta que lo presentaron en la ClueCon 2020 (el año pasado) donde explicaron cómo funciona y qué ventajas tiene. Podéis ver la presentación aquí:

    He probado varios sistemas similares y por lo general, los ASR libres, en comparación con los sistemas comerciales, no eran muy competitivos, entiendo que un ASR es un sistema super-complejo y crear uno que funcione bien requiere de un gran esfuerzo económico que muchas veces sólo es posible si hay una empresa detrás, pero en esta ocasión la sorpresa ha sido mayúscula.

    Echándole un vistazo a su web, el proyecto es completamente transparente… publican todas las presentaciones, todas las fórmulas, ecuaciones y sistemas que utilizan para el entrenamiento y análisis de la voz y posterior conversión en palabras.

    También publican ejemplos y demos para que cualquiera pueda probarlo con varios comandos. Esto también lo conocía en otros sistemas, funciona muy bien en sus ejemplos pero luego uno prueba una conversación normal y no da con una traducción medianamente aceptable.

    Así que sin más… me he puesto manos a la obra y por probar una grabación mía:

    ejemplo de audio para comprobar la calidad del reconocedor de audio

    Ejecuto el comando que se conecta al servidor y devuelve lo siguiente:

    {
       "result" : [{
           "conf" : 0.572926,
           "end" : 0.900000,
           "start" : 0.660000,
           "word" : "hola"
         }, {
           "conf" : 0.976447,
           "end" : 1.427432,
           "start" : 1.151597,
           "word" : "hola"
         }, {
           "conf" : 0.841578,
           "end" : 1.830000,
           "start" : 1.530000,
           "word" : "esto"
         }, {
           "conf" : 0.998902,
           "end" : 1.890000,
           "start" : 1.830000,
           "word" : "es"
         }, {
           "conf" : 1.000000,
           "end" : 2.070000,
           "start" : 1.890000,
           "word" : "una"
         }, {
           "conf" : 1.000000,
           "end" : 2.460000,
           "start" : 2.070000,
           "word" : "prueba"
         }],
       "text" : "hola hola esto es una prueba"
     }

    Como podéis ver, aunque falta el primer «hola» (en la grabación eran 3 ‘hola’) el reconocimiento es perfecto y tampoco es que sea una conversación muy difícil.

    Probando algo más complejo:

    El resultado ha sido este:

     "text" : "una aplicación escrita en país y basada en redes neuronales que reconoce palabras en varios idiomas",
    "text" : "y que funciona de forma independiente por lo que instala servidor cargas en diccionario idioma que deseas lo ejecutas y ya hasta el puerto listo para enviarle el audio"
    }

    Como podéis ver… el reconocimiento es prácticamente perfecto. (si, fallan algunas palabras… pero ¿qué esperabas?)

    Instalación

    La instalación del servidor no puede ser más sencilla:

    docker run -d -p 2700:2700 alphacep/kaldi-es:latest

    Ejecutamos este docker que corre en background y nos abre el puerto 2700 para que nos conectemos vía websocket y enviarle el audio.

    Conectándonos al servidor Vosk

    Luego tan solo hay que descargar un cliente websocket para enviarle el archivo wav (formateado a 8Khz y mono)

    git clone https://github.com/alphacep/vosk-server
    cd vosk-server/websocket
    ./test.py test.wav

    Y si le pasáis el archivo wav que tengáis… veréis cómo lo reconoce.

    Usando Asterisk para conectar el ASR de Vosk

    La gente de AlphaCep ha publicado un módulo para Asterisk, FreeSwitch y Jigasi (el módulo que utiliza Jitsi)

    https://github.com/alphacep/vosk-asterisk

    De esta manera, podéis utilizar el reconocedor de audio directamente desde el Dialplan de Asterisk:

    [internal]
    exten = 1,1,Answer 
    same = n,Wait(1) 
    same = n,SpeechCreate 
    same = n,SpeechBackground(hello) 
    same = n,Verbose(0,Result was ${SPEECH_TEXT(0)})

    Eso sí, nos avisan en varios sitios que el sistema de reconocimiento requiere de un sistema potente, ya que consume bastante memoria y procesador cada vez que tiene que hacer un reconocimiento, pero eso es algo común en cualquier ASR hospedado por nosotros, así que a tenerlo en cuenta si queremos instalarlo en nuestro sistema de comunicaciones.

    Toda la información en la página de Vosk: https://alphacephei.com/vosk/
    Su página para estar al día: https://alphacephei.com/en/news.html
    Y la guía para configurarlo en Issabel: https://t.me/Issabel_channel/4

  • Skype presenta al mundo un traductor automático de conferencias

    Skype-translator-wbHoy, Skype anuncia la disponibilidad de su nuevo servicio de traducción automática de conferencias Skype Translator, permitiendo a cualquiera que se inscriba en su programa beta, probar una versión especial de Skype en la que se pueden hacer llamadas entre dos idiomas, y el sistema traducirá en tiempo real del español al inglés y del inglés al español.

    https://www.youtube.com/watch?v=zmYBJM8mwcg

    El objetivo final es ir añadiendo idiomas hasta los 40 idiomas más importantes, aunque de momento, los inscritos en el programa beta de Skype, podrán probar la traducción automática entre español e inglés.

    El proceso que realiza esta versión de Skype es mucho más compleja de lo que cabría suponer, ya que no tienen a profesionales traductores que traducen lo que estás diciendo al otro interlocutor como hacen servicios profesionales como Byvox, si no que utilizan un software ASR para convertir el audio en texto, el traductor de Bing para traducir el texto y volver a utilizar un software TTS para convertir el texto traducido en audio, pero muy rápido, permitiendo conversaciones más o menos fluidas siempre y cuando el reconocedor, el traductor y el TTS funcione correctamente.

    (más…)

  • Cómo utilizar el ASR de Google en Asterisk

    En un anterior artículo, enseñamos cómo utilizar el servicio TextToSpeech de Google (que esta empresa utiliza en su servicio de traducción), y se nos quedó en el tintero escribir cómo configurar otro servicio «interno» de Google para nuestro propio beneficio y, si podemos conectarlo a nuestro Asterisk, mejor que mejor.

    En este caso, el servicio «interno» a utilizar llamará mucho la atención, ya que es un servicio muy útil y no precisamente económico: Reconocimiento de Voz (ASR)

    El reconocedor de voz de Google es, en mi opinión, uno de los mejores que existen (no únicamente por ser gratuito) si no porque es capaz de reconocer una gramática abierta (no limitada a ciertas palabras), varios idiomas y prácticamente con cualquier acento. Sin duda, lo que lo hace un firme candidato a ser uno de los mejores, es que «es gratis» (mientras no se abuse y Google lo permita).

    Vamos a ver cómo podemos hacer uso de este ASR gratuito en Google para un Asterisk «personal» o «no profesional«, ya que al depender de un servicio no oficial de Google, no podemos asegurar que vaya a funcionar dentro de unas horas, unos días o unas semanas… por lo que no sirve para ofrecerlo como un servicio de cara a una empresa, ya que para eso, yo recomendaría otros servicios más profesionales como el ASR de Verbio que ya ha demostrado su valía en cientos de instalaciones.

    (más…)

  • i6net ofrecerá el motor VoiceXML para Asterisk

    i6neti6net es una empresa española que desarrolla el navegador VXI* VoiceXML para ofrecer a desarrolladores, operadores y proveedores de servicios basados en Asterisk la capacidad desarrollar rápidamente aplicaciones controladas por voz y vídeo utilizando tanto VoIP, como redes telefónicas e incluso redes 3G.

    Para los que no sepan muy bien qué es esto del VoiceXML, tan solo contar que esta tecnología permite especificar dialogos entre personas y el sistema, lo que permite desarrollar gracias a un sistema TTS y ASR manejar una conversación algo a lo que actualmente no estamos aún muy acostumbrados salvo cuando llamamos a algún soporte técnico de alguna empresa de telefonía donde nos pregunta los datos, la consulta y busca entre sus sistemas la mejor respuesta (claro que generalmente, la consulta suele ser: -«Quiero hablar con un operador!»).

    Un ejemplo muy básico sobre un sistema VoiceXML podeis verlo aquí:
    http://www.w3c.es/Presentaciones/2005/0314-estandares-JA/26.html

    El navegador VXI* cumple completamente con el estandar W3C VoiceXML 2.0 y algunas especificaciones 2.1, y puede ser fácilmente integrada en sistemas de reconocimiento de voz (ASR) y text-to-speech (TTS).

    Podeis ver la nota oficial aquí:
    http://www.i6net.com/

  • Vodafone inaugura su servicio ASR + SMS

    VodafoneASR son las siglas de automatic speech recognition o reconocimiento automático del habla, y Vodafone acaba de lanzar un servicio que permite a un cliente, dejar un mensaje en un buzón de voz y el servicio reconocerá lo que ha dicho, lo convertirá a texto y lo enviará por SMS al destinatario.

    La verdad es que este mecanismo es bastante sencillo de implementar en Asterisk siempre que utilicemos un software ASR de calidad y algún sistema de envío de SMS.

    Que sea sencillo de implementar no quita que la idea es curiosa aunque no sé si tendrá mucho éxito, quizá en las personas mayores…

    Más información: http://www.vodafone.es/

  • Text-to-Speech y reconocedor de voz para Asterisk

    Verbio acaba de lanzar el soporte para conectar su sistema de Text-to-Speech y reconocimiento de voz a Asterisk en Español (España y Latino América) como ayer anunció LumenVox.

    Una de las diferencias con LumenVox es quizá que Verbio es una empresa de habla española, por lo que será bastante más crítica para este idioma y por lo tanto creo que de mejor calidad.

    Pero la principal diferencia es que, por fín existen estos servicios para nuevos idiomas:

    – Español de España
    – Español de México
    – Catalán (Català)
    – Gallego
    – Portugués (Portugûes)
    – Euskera
    – Valenciano (Valencià)
    Otro factor importante es su «speech recognizer» reconocedor de voz, de manera que por fín se puede integrar con Asterisk, algo que estaba en pañales.

    Ya comentaré algo más sobre esto cuando lo pruebe.

    Enlace: http://www.verbio.com