top of page
  • Foto del escritorMaría Soto

Azure text to speech avatar

El pasado 15 de noviembre de 2023 la comunidad técnica de Microsoft anunciaba el lanzamiento de la preview pública Azure AI Speech text to speech avatar.


Esta nueva característica nos permite crear avatares 2D personalizados que pueden hablar mediante voces sintéticas neuronales y con los que podemos conversar en tiempo real conectándolos a Azure OpenAI de una forma muy sencilla y con un resultado muy impresionante y real.


Podemos crear dos tipos de avatares:

  • Avatares Prediseñados: Azure nos peremite seleccionar diferentes avatares, con diferentes estilos, diferentes voces e idiomas (inglés, español, chino, alemán, francés, portugués o italiano).

  • Avatares Customizados: donde será necesario subir una grabación de un vídeo de una persona hablando para entrenar un vídeo sintético del avatar correspondiente personalizado, utilizará la misma voz y la misma imagen para la voz neuronal personalizada.


Además, se pueden crear dos tipos de aplicaciones:

  • Creación de contenido para vídeos, en este caso el desarrollo consiste en darle un texto cerrado al servicio sobre el que se creará un vídeo con el avatar reproduciendo el contenido correspondiente. Muy útil para generar contenido de formación o vídeos de lanzamientos de productos.

  • Avatares interactivos, que permiten conversar con ellos en tiempo real. En este caso lserá necesario contectar el avatar a Azure OpenAI para poder dotarle de inteligencia, las respuestas del avatar pueden obtenerse directamente de un modelo de openAI como GPT4 | GPT 3.5 ( o cualquier otro modelo LLM) y dependiendo del caso de uso de negocio también, podemos complementarlo con conocimiento externo mediante un desarrollo con RAG. Muy útil para crear chatbots o asistentes virtuales inteligentes.


Esta arquitectura representa el flujo de trabajo para crear un avatar de vídeo fotorrealista a partir de texto o SSML (Speech Synthesis Markup Language).



  • Entrada de Texto/SSML: El proceso comienza con la entrada de texto o SSML, que es un estándar que define cómo debe ser la entrada de texto para poder convertirla en voz sintetizada.

  • Análisis de Texto: Este paso involucra el procesamiento del texto o SSML para entender su estructura, significado, y cómo debería ser expresado en lenguaje hablado (por ejemplo, con qué énfasis o entonación).

  • Síntesis de Audio TTS (Text-to-Speech)|Modelo TTS/CNV: La entrada de texto procesada es convertida en audio hablado por un modelo de TTS/CNV (Conversión de Texto a Voz). Este modelo genera una pista de audio que imita la voz humana.

  • Síntesis de Vídeo del Avatar TTS: Utilizando el audio sintetizado, este paso crea un vídeo de un avatar fotorrealista que parece hablar con la voz generada. Esto se hace mediante la animación de un modelo de avatar en base al audio generado.

  • Modelo de Avatar: Este modelo es el que define el aspecto del avatar, cómo serán sus movimientos faciales y cómo los labios deben sincronizarse con el audio TTS para crear un efecto de habla realista.

  • Archivo/Transmisión de Vídeo del Avatar Fotorrealista: Finalmente, el producto terminado es un archivo o una transmisión de vídeo que muestra al avatar fotorrealista hablando con sincronización labial precisa con la pista de audio TTS.



En este artículo vamos a ver los modelos y recursos de Azure que necesitaremos configurar para poder crear un avatar prediseñado conectado a Azure OpenAI que nos permitirá mantener una conversación en tiempo real.


  • Recurso de Voz de Azure. Necesitarás indicar desde código la región y la KEY para conectarte y usarlo.

  • Recurso Azure OpenAI. Necesitarás indicar en endpoint del recurso, API KEY y modelo para llamarlo desde código

  • Servidor ICE. Una vez creado el recurso desde Azure será necesario que ejecutes este código python llamando a su endpoint correspondiente para obtener el user name, credential y url que habrá que configurar en el código.

import os
from azure.communication.networktraversal import CommunicationRelayClient
from azure.identity import DefaultAzureCredential
from azure.communication.identity import CommunicationIdentityClient

try:
   print("Azure Communication Services - Access Relay Configuration  Quickstart")
   connection_str = "endpoint=https://resourcename.region.communication.azure.com/;accesskey=xxxxxxx"
   identity_client = CommunicationIdentityClient.from_connection_string(connection_str)
   relay_client = CommunicationRelayClient.from_connection_string(connection_str)

   user = identity_client.create_user()

   relay_configuration = relay_client.get_relay_configuration()

   for iceServer in relay_configuration.ice_servers:
        assert iceServer.username is not None
        print('Username: ' + iceServer.username)

        assert iceServer.credential is not None
        print('Credential: ' + iceServer.credential)
        
        assert iceServer.urls is not None
        for url in iceServer.urls:
            print('Url:' + url)


except Exception as ex:
   print("Exception:")
   print(ex)



Dejo en mi github el código en JavaScript adaptado que he utilizado para poder ejecutar en local con nodejs y lite-server un avatar que conecta con Azure OpenAI y te permite hablar con él en tiempo real.



Enlaces referenciados:

bottom of page