Localice el contenido en varios idiomas con los servicios de aprendizaje automático de AWS PlatoBlockchain Data Intelligence. Búsqueda vertical. Ai.

Localice el contenido en varios idiomas mediante los servicios de aprendizaje automático de AWS

En los últimos años, las plataformas de educación en línea han visto un aumento en la adopción y un aumento en la demanda de aprendizaje basado en videos porque ofrece un medio efectivo para involucrar a los estudiantes. Para expandirse a los mercados internacionales y dirigirse a una población cultural y lingüísticamente diversa, las empresas también buscan diversificar sus ofertas de aprendizaje mediante la localización del contenido en varios idiomas. Estas empresas buscan formas fiables y rentables de resolver sus casos de uso de localización.

La localización de contenido incluye principalmente traducir las voces originales a nuevos idiomas y agregar ayudas visuales como subtítulos. Tradicionalmente, este proceso tiene un costo prohibitivo, es manual y lleva mucho tiempo, incluido el trabajo con especialistas en localización. Con el poder de los servicios de aprendizaje automático (ML) de AWS, como Amazon Transcribe, Traductor de Amazony Amazon Polly, puede crear una solución de localización viable y rentable. Puede usar Amazon Transcribe para crear una transcripción de sus transmisiones de audio y video existentes y luego traducir esta transcripción a varios idiomas usando Amazon Translate. A continuación, puede utilizar Amazon Polly, un servicio de conversión de texto a voz, para convertir el texto traducido en voz humana con sonido natural.

El siguiente paso de la localización es agregar subtítulos al contenido, lo que puede mejorar la accesibilidad y la comprensión, y ayudar a los espectadores a comprender mejor los videos. La creación de subtítulos en contenido de video puede ser un desafío porque el discurso traducido no coincide con el tiempo del discurso original. Esta sincronización entre el audio y los subtítulos es una tarea crítica a considerar porque podría desconectar a la audiencia de su contenido si no están sincronizados. Amazon Polly ofrece una solución a este desafío al permitir comillas, que puede usar para crear un archivo de subtítulos que se puede sincronizar con la salida de voz generada.

En esta publicación, revisamos una solución de localización que usa los servicios de ML de AWS donde usamos un video original en inglés y lo convertimos al español. También nos enfocamos en usar marcas de voz para crear un archivo de subtítulos sincronizados en español.

Resumen de la solución

El siguiente diagrama ilustra la arquitectura de la solución.

La solución toma un archivo de video y la configuración del idioma de destino como entrada y utiliza Amazon Transcribe para crear una transcripción del video. Luego usamos Amazon Translate para traducir la transcripción al idioma de destino. El texto traducido se proporciona como entrada a Amazon Polly para generar la transmisión de audio y las marcas de voz en el idioma de destino. Vuelve Amazon Polly salida de marca de voz en una secuencia JSON delimitada por líneas, que contiene campos como la hora, el tipo, el inicio, el final y el valor. El valor puede variar según el tipo de marca de voz solicitada en la entrada, como SSML, visema, palabra u oración. Para el propósito de nuestro ejemplo, solicitamos la tipo de marca de voz as word. Con esta opción, Amazon Polly divide una oración en sus palabras individuales en la oración y sus horas de inicio y finalización en la transmisión de audio. Con estos metadatos, las marcas de voz se procesan para generar los subtítulos para la transmisión de audio correspondiente generada por Amazon Polly.

Finalmente, usamos AWS Elemental MediaConversión para renderizar el video final con el audio traducido y los subtítulos correspondientes.

El siguiente video muestra el resultado final de la solución:

Flujo de trabajo de AWS Step Functions

Utilizamos Funciones de paso de AWS orquestar este proceso. La siguiente figura muestra una vista de alto nivel del flujo de trabajo de Step Functions (algunos pasos se omiten del diagrama para mayor claridad).

Localice el contenido en varios idiomas con los servicios de aprendizaje automático de AWS PlatoBlockchain Data Intelligence. Búsqueda vertical. Ai.

Los pasos del flujo de trabajo son los siguientes:

  1. Un usuario sube el archivo de vídeo de origen a un Servicio de almacenamiento simple de Amazon (Amazon S3) cubo.
  2. El Notificación de eventos S3 desencadena el AWS Lambda función state_machine.py (no se muestra en el diagrama), que invoca la máquina de estado de Step Functions.
  3. El primer paso, Transcribir audio, invoca la función Lambda transcribir.py, que utiliza Amazon Transcribe para generar una transcripción del audio del video de origen.

El siguiente código de muestra demuestra cómo crear un trabajo de transcripción utilizando Amazon Transcribe boto3 SDK de Python:

response = transcribe.start_transcription_job(
    TranscriptionJobName = jobName,
    MediaFormat=media_format,
    Media = {"MediaFileUri": "s3://"+bucket+"/"+mediaconvert_video_filename},
    OutputBucketName=bucket,
    OutputKey=outputKey,
    IdentifyLanguage=True
)

Una vez que se completa el trabajo, los archivos de salida se guardan en el depósito S3 y el proceso continúa con el siguiente paso de traducción del contenido.

  1. El Traducir transcripción paso invoca la función Lambda traducir.py que utiliza Amazon Translate para traducir la transcripción al idioma de destino. Aquí, usamos la traducción síncrona/en tiempo real usando el traducir texto función:
    # Real-time translation
    response = translate.translate_text(
        Text=transcribe_text,
        SourceLanguageCode=source_language_code,
        TargetLanguageCode=target_language_code,
    )
    

    La traducción síncrona tiene límites en el tamaño del documento que puede traducir; a partir de este escrito, se establece en 5,000 bytes. Para tamaños de documentos más grandes, considere usar una ruta asíncrona para crear el trabajo usando start_text_translation_job y comprobar el estado a través de describir_texto_traducción_trabajo.

  2. El siguiente paso es un Paso Funciones Paralelo state, donde creamos ramas paralelas en nuestra máquina de estado.
    1. En la primera rama, invocamos la función Lambda la función Lambda generar_polly_audio.py para generar nuestra transmisión de audio de Amazon Polly:
      # Set up the polly and translate services
      client = boto3.client('polly')
      
      # Use the translated text to create the synthesized speech
      response = client.start_speech_synthesis_task(
                   Engine="standard", LanguageCode="es", OutputFormat="mp3",
                   SampleRate="22050", Text=polly_text, VoiceId="Miguel",
                   TextType="text",
                   OutputS3BucketName="S3-bucket-name",
                   OutputS3KeyPrefix="-polly-recording")
      audio_task_id = response['SynthesisTask']['TaskId']

      Aquí usamos el tarea_iniciar_síntesis_del_voz del SDK de Python de Amazon Polly para activar la tarea de síntesis de voz que crea el audio de Amazon Polly. Configuramos el OutputFormat a mp3, que le indica a Amazon Polly que genere una transmisión de audio para esta llamada a la API.

    2. En la segunda rama, invocamos la función Lambda generar_marcas_de_voz.py para generar salida de marcas de voz:
      ....
      # Use the translated text to create the speech marks
      response = client.start_speech_synthesis_task(
                   Engine="standard", LanguageCode="es", OutputFormat="json",
                   SampleRate="22050", Text=polly_text, VoiceId="Miguel",
                   TextType="text", SpeechMarkTypes=['word'],
                   OutputS3BucketName="S3-bucket-name", 
                   OutputS3KeyPrefix="-polly-speech-marks")
      speechmarks_task_id = response['SynthesisTask']['TaskId']

  • Usamos de nuevo el tarea_iniciar_síntesis_del_voz método pero especificar OutputFormat a json, que le indica a Amazon Polly que genere marcas de voz para esta llamada a la API.

En el siguiente paso de la segunda rama, invocamos la función Lambda generar_subtitulos.py, que implementa la lógica para generar un archivo de subtítulos a partir de la salida de marcas de voz.

Utiliza el módulo de Python en el archivo. webvtt_utils.py. Este módulo tiene múltiples funciones de utilidad para crear el archivo de subtítulos; uno de esos métodos get_phrases_from_speechmarks es responsable de analizar el archivo de marcas de voz. La estructura JSON de marcas de voz proporciona solo la hora de inicio para cada palabra individualmente. Para crear la temporización de subtítulos necesaria para el archivo SRT, primero creamos frases de aproximadamente n (donde n=10) palabras de la lista de palabras en el archivo de marcas de voz. Luego, los escribimos en el formato de archivo SRT, tomando la hora de inicio de la primera palabra de la frase y, para la hora de finalización, usamos la hora de inicio de la palabra (n+1) y la restamos de 1 para crear la entrada secuenciada. . La siguiente función crea las frases en preparación para escribirlas en el archivo SRT:

def get_phrases_from_speechmarks(words, transcript):
.....

    for item in items:
        # if it is a new phrase, then get the start_time of the first item
        if n_phrase:
            phrase["start_time"] = get_time_code(words[c]["start_time"])
            n_phrase = False

        else:
            if c == len(words) - 1:
                phrase["end_time"] = get_time_code(words[c]["start_time"])
            else:
                phrase["end_time"] = get_time_code(words[c + 1]["start_time"] - 1)

        # in either case, append the word to the phrase...
        phrase["words"].append(item)
        x += 1

        # now add the phrase to the phrases, generate a new phrase, etc.
        if x == 10 or c == (len(items) - 1):
            # print c, phrase
            if c == (len(items) - 1):
                if phrase["end_time"] == '':
                    start_time = words[c]["start_time"]
                    end_time = int(start_time) + 500
                    phrase["end_time"] = get_time_code(end_time)

            phrases.append(phrase)
            phrase = new_phrase()
            n_phrase = True
            x = 0

        .....

    return phrases

  1. El último paso, Media Convert, invoca la función Lambda create_mediaconvert_job.py para combinar la transmisión de audio de Amazon Polly y el archivo de subtítulos con el archivo de video de origen para generar el archivo de salida final, que luego se almacena en un depósito S3. Este paso utiliza MediaConvert, un servicio de transcodificación de video basado en archivos con características de grado de transmisión. Le permite crear fácilmente contenido de video a pedido y combina capacidades avanzadas de video y audio con una interfaz web simple. Aquí nuevamente usamos Python boto3 SDK para crear un MediaConvert trabajo:
    ……
    job_metadata = {'asset_id': asset_id, 'application': "createMediaConvertJob"}
    mc_client = boto3.client('mediaconvert', region_name=region)
    endpoints = mc_client.describe_endpoints()
    mc_endpoint_url = endpoints['Endpoints'][0]['Url']
    
    mc = boto3.client('mediaconvert', region_name=region, endpoint_url=mc_endpoint_url, verify=True)
    
    mc.create_job(Role=mediaconvert_role_arn, UserMetadata=job_metadata, Settings=mc_data["Settings"])

Requisitos previos

Antes de comenzar, debe tener los siguientes requisitos previos:

Implementar la solución

Para implementar la solución con el CDK de AWS, complete los siguientes pasos:

  1. Clona el repositorio:
    git clone https://github.com/aws-samples/localize-content-using-aws-ml-services.git 

  2. Para asegurarse de que el CDK de AWS esté arrancado, ejecuta el comando cdk bootstrap desde la raíz del repositorio:
    $ cdk bootstrap
    ⏳ Bootstrapping environment aws://<acct#>/<region>...
    Trusted accounts for deployment: (none)
    Trusted accounts for lookup: (none)
    Using default execution policy of 'arn:aws:iam::aws:policy/AdministratorAccess'. Pass '--cloudformation-execution-policies' to customize.
    ✅ Environment aws://<acct#>/<region> bootstrapped (no changes).

  3. Cambie el directorio de trabajo a la raíz del repositorio y ejecute el siguiente comando:
    cdk deploy

De manera predeterminada, la configuración de audio de destino está configurada en español de EE. UU. (es-US). Si planea probarlo con un idioma de destino diferente, use el siguiente comando:

cdk deploy --parameters pollyLanguageCode=<pollyLanguageCode> 
           --parameters pollyVoiceId=<pollyVoiceId>
           --parameters pollyEngine=<pollyEngine> 
           --parameters mediaConvertLangShort=<mediaConvertLangShort>
           --parameters mediaConvertLangLong=<mediaConvertLangLong>
           --parameters targetLanguageCode=<targetLanguageCode>

El proceso tarda unos minutos en completarse, después de lo cual muestra un enlace que puede usar para ver el archivo de video de destino con el audio traducido y los subtítulos traducidos.

Localice el contenido en varios idiomas con los servicios de aprendizaje automático de AWS PlatoBlockchain Data Intelligence. Búsqueda vertical. Ai.

Prueba la solución

Para probar esta solución, usamos una pequeña porción de lo siguiente Vídeo de AWS re: Invent 2017 de YouTube, donde se introdujo por primera vez Amazon Transcribe. También puede probar la solución con su propio video. El idioma original de nuestro video de prueba es el inglés. Cuando implementa esta solución, puede especificar la configuración de audio de destino o puede usar la configuración de audio de destino predeterminada, que usa español para generar audio y subtítulos. La solución crea un depósito S3 que se puede usar para cargar el archivo de video.

  1. En la consola de Amazon S3, vaya al depósito PollyBlogBucket.
    Localice el contenido en varios idiomas con los servicios de aprendizaje automático de AWS PlatoBlockchain Data Intelligence. Búsqueda vertical. Ai.
  2. Elija el depósito, navegue hasta el /inputVideo directorio y cargue el archivo de video (la solución está probada con videos de tipo mp4). En este punto, una notificación de evento de S3 activa la función Lambda, que inicia la máquina de estado.
  3. En la consola de Step Functions, vaya a la máquina de estado (ProcessAudioWithSubtitles).
  4. Elija una de las ejecuciones de la máquina de estado para ubicar el Inspector de gráfico.

Esto muestra los resultados de la ejecución para cada estado. El flujo de trabajo de Step Functions tarda unos minutos en completarse, después de lo cual puede verificar si todos los pasos se completaron correctamente.

Localice el contenido en varios idiomas con los servicios de aprendizaje automático de AWS PlatoBlockchain Data Intelligence. Búsqueda vertical. Ai.

Revisar la salida

Para revisar el resultado, abra la consola de Amazon S3 y compruebe si el archivo de audio (.mp3) y el archivo de marcas de voz (.marks) están almacenados en el depósito de S3 en <ROOT_S3_BUCKET>/<UID>/synthesisOutput/.

Localice el contenido en varios idiomas con los servicios de aprendizaje automático de AWS PlatoBlockchain Data Intelligence. Búsqueda vertical. Ai.

El siguiente es un ejemplo del archivo de marca de voz generado a partir del texto traducido:

{"time":6,"type":"word","start":2,"end":6,"value":"Qué"}
{"time":109,"type":"word","start":7,"end":10,"value":"tal"}
{"time":347,"type":"word","start":11,"end":13,"value":"el"}
{"time":453,"type":"word","start":14,"end":20,"value":"idioma"}
{"time":1351,"type":"word","start":22,"end":24,"value":"Ya"}
{"time":1517,"type":"word","start":25,"end":30,"value":"sabes"}
{"time":2240,"type":"word","start":32,"end":38,"value":"hablé"}
{"time":2495,"type":"word","start":39,"end":44,"value":"antes"}
{"time":2832,"type":"word","start":45,"end":50,"value":"sobre"}
{"time":3125,"type":"word","start":51,"end":53,"value":"el"}
{"time":3227,"type":"word","start":54,"end":59,"value":"hecho"}
{"time":3464,"type":"word","start":60,"end":62,"value":"de"}

En este resultado, cada parte del texto se divide en términos de marcas de voz:

  • equipo – La marca de tiempo en milisegundos desde el comienzo de la transmisión de audio correspondiente
  • tipo – El tipo de marca de voz (oración, palabra, visema o SSML)
  • comienzo – El desplazamiento en bytes (no caracteres) del inicio del objeto en el texto de entrada (sin incluir las marcas de visema)
  • final – El desplazamiento en bytes (no caracteres) del final del objeto en el texto de entrada (sin incluir las marcas de visema)
  • propuesta de – Palabras individuales en la oración

El archivo de subtítulos generado se vuelve a escribir en el depósito S3. Puede encontrar el archivo en <ROOT_S3_BUCKET>/<UID>/subtitlesOutput/. Inspeccione el archivo de subtítulos; el contenido debe ser similar al siguiente texto:

1
00:00:00,006 --> 00:00:03,226
¿Qué tal el idioma? Ya sabes, hablé antes sobre el

2
00:00:03,227 --> 00:00:06,065
hecho de que el año pasado lanzamos Polly y Lex,

3
00:00:06,066 --> 00:00:09,263
pero hay muchas otras cosas que los constructores quieren hacer

4
00:00:09,264 --> 00:00:11,642
con el lenguaje. Y una de las cosas que ha

5
00:00:11,643 --> 00:00:14,549
sido interesante es que ahora hay tantos datos que están

Una vez que se generan el archivo de subtítulos y el archivo de audio, el archivo de video fuente final se crea usando MediaConvert. Verifique la consola de MediaConvert para verificar si el estado del trabajo es COMPLETE.

Cuando se completa el trabajo de MediaConvert, el archivo de video final se genera y se vuelve a guardar en el depósito S3, que se puede encontrar en <ROOT_S3_BUCKET>/<UID>/convertedAV/.

Como parte de esta implementación, el video final se distribuye a través de un Amazon CloudFront (CDN) y se muestra en el terminal o en el Formación en la nube de AWS consola.

Abra la URL en un navegador para ver el video original con opciones adicionales para audio y subtítulos. Puede verificar que el audio y los subtítulos traducidos estén sincronizados.

Conclusión

En esta publicación, discutimos cómo crear nuevas versiones de idiomas de archivos de video sin la necesidad de intervención manual. Los creadores de contenido pueden usar este proceso para sincronizar el audio y los subtítulos de sus videos y llegar a una audiencia global.

Puede integrar fácilmente este enfoque en sus propios canales de producción para manejar grandes volúmenes y escalar según sus necesidades. Usos de Amazon Polly TTS neuronal (NTTS) para producir voces de texto a voz naturales y similares a las humanas. también es compatible generar voz desde SSML, que le brinda control adicional sobre cómo Amazon Polly genera voz a partir del texto proporcionado. Amazon Polly también proporciona una variedad de voces diferentes en varios idiomas para satisfacer sus necesidades.

Comience con los servicios de aprendizaje automático de AWS visitando el la página del producto, o consulte el Laboratorio de soluciones de aprendizaje automático de Amazon página donde puede colaborar con expertos para llevar soluciones de aprendizaje automático a su organización.

Recursos adicionales

Para obtener más información sobre los servicios utilizados en esta solución, consulte lo siguiente:


Sobre los autores

Localice el contenido en varios idiomas con los servicios de aprendizaje automático de AWS PlatoBlockchain Data Intelligence. Búsqueda vertical. Ai. reagan rosario trabaja como arquitecto de soluciones en AWS centrándose en empresas de tecnología educativa. Le encanta ayudar a los clientes a crear soluciones escalables, seguras y de alta disponibilidad en la nube de AWS. Tiene más de una década de experiencia trabajando en una variedad de roles tecnológicos, con un enfoque en ingeniería y arquitectura de software.

Localice el contenido en varios idiomas con los servicios de aprendizaje automático de AWS PlatoBlockchain Data Intelligence. Búsqueda vertical. Ai.anil kodali es un Arquitecto de Soluciones con Amazon Web Services. Trabaja con clientes de AWS EdTech, guiándolos con las mejores prácticas arquitectónicas para migrar cargas de trabajo existentes a la nube y diseñar nuevas cargas de trabajo con un enfoque de nube primero. Antes de unirse a AWS, trabajó con grandes minoristas para ayudarlos con sus migraciones a la nube.

Localice el contenido en varios idiomas con los servicios de aprendizaje automático de AWS PlatoBlockchain Data Intelligence. Búsqueda vertical. Ai.Prasanna Sarasvathi Krishnan es un Arquitecto de Soluciones con Amazon Web Services que trabaja con clientes de EdTech. Les ayuda a impulsar su arquitectura de nube y su estrategia de datos utilizando las mejores prácticas. Su experiencia es en computación distribuida, análisis de big data e ingeniería de datos. Le apasiona el aprendizaje automático y el procesamiento del lenguaje natural.

Sello de tiempo:

Mas de Aprendizaje automático de AWS