Localize conteúdo em vários idiomas usando os serviços de machine learning da AWS PlatoBlockchain Data Intelligence. Pesquisa Vertical. Ai.

Localize conteúdo em vários idiomas usando os serviços de machine learning da AWS

Nos últimos anos, as plataformas de educação on-line viram um aumento na adoção e um aumento na demanda por aprendizados baseados em vídeo porque oferecem um meio eficaz para envolver os alunos. Para expandir para mercados internacionais e atender a uma população cultural e linguísticamente diversificada, as empresas também estão buscando diversificar suas ofertas de aprendizado, localizando o conteúdo em vários idiomas. Essas empresas estão procurando maneiras confiáveis ​​e econômicas de resolver seus casos de uso de localização.

A localização de conteúdo inclui principalmente a tradução de vozes originais para novos idiomas e a adição de recursos visuais, como legendas. Tradicionalmente, esse processo tem um custo proibitivo, é manual e leva muito tempo, incluindo o trabalho com especialistas em localização. Com o poder dos serviços de machine learning (ML) da AWS, como Amazon Transcribe, Amazon Tradutor e Amazon Polly, você pode criar uma solução de localização viável e econômica. Você pode usar o Amazon Transcribe para criar uma transcrição de seus fluxos de áudio e vídeo existentes e, em seguida, traduzir essa transcrição para vários idiomas usando o Amazon Translate. Você pode usar o Amazon Polly, um serviço de conversão de texto em fala, para converter o texto traduzido em fala humana com som natural.

A próxima etapa da localização é adicionar legendas ao conteúdo, o que pode melhorar a acessibilidade e a compreensão e ajudar os espectadores a entender melhor os vídeos. A criação de legendas no conteúdo de vídeo pode ser um desafio porque a fala traduzida não corresponde ao tempo da fala original. Essa sincronização entre áudio e legendas é uma tarefa crítica a ser considerada, pois pode desconectar o público do seu conteúdo se eles não estiverem sincronizados. O Amazon Polly oferece uma solução para esse desafio por meio da habilitação Marcas de discurso, que você pode usar para criar um arquivo de legenda que pode ser sincronizado com a saída de fala gerada.

Neste post, analisamos uma solução de localização usando serviços AWS ML em que usamos um vídeo original em inglês e o convertemos em espanhol. Também nos concentramos no uso de marcas de fala para criar um arquivo de legenda sincronizado em espanhol.

Visão geral da solução

O diagrama a seguir ilustra a arquitetura da solução.

A solução usa um arquivo de vídeo e as configurações de idioma de destino como entrada e usa o Amazon Transcribe para criar uma transcrição do vídeo. Em seguida, usamos o Amazon Translate para traduzir a transcrição para o idioma de destino. O texto traduzido é fornecido como uma entrada para o Amazon Polly para gerar o fluxo de áudio e as marcas de fala no idioma de destino. Amazon Polly retorna saída de marca de fala em um fluxo JSON delimitado por linha, que contém os campos como hora, tipo, início, fim e valor. O valor pode variar dependendo do tipo de marca de fala solicitada na entrada, como SSML, visema, palavra ou frase. Para fins de nosso exemplo, solicitamos o tipo de marca de fala as word. Com essa opção, o Amazon Polly divide uma frase em suas palavras individuais na frase e seus horários de início e término no fluxo de áudio. Com esses metadados, as marcas de fala são processadas para gerar as legendas para o fluxo de áudio correspondente gerado pelo Amazon Polly.

Finalmente, usamos AWS Elemental MediaConvert para renderizar o vídeo final com o áudio traduzido e legendas correspondentes.

O vídeo a seguir demonstra o resultado final da solução:

Fluxo de trabalho do AWS Step Functions

Usamos Funções de etapa da AWS orquestrar esse processo. A figura a seguir mostra uma visão de alto nível do fluxo de trabalho do Step Functions (algumas etapas são omitidas do diagrama para maior clareza).

Localize conteúdo em vários idiomas usando os serviços de machine learning da AWS PlatoBlockchain Data Intelligence. Pesquisa Vertical. Ai.

As etapas do fluxo de trabalho são as seguintes:

  1. Um usuário carrega o arquivo de vídeo de origem para um Serviço de armazenamento simples da Amazon (Amazon S3).
  2. A Notificação de evento S3 desencadeia o AWS Lambda função state_machine.py (não mostrado no diagrama), que invoca a máquina de estado do Step Functions.
  3. O primeiro passo, Transcrever áudio, invoca a função Lambda transcrever.py, que usa o Amazon Transcribe para gerar uma transcrição do áudio do vídeo de origem.

O código de exemplo a seguir demonstra como criar um trabalho de transcrição usando o Amazon Transcribe boto3 SDK do Python:

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

Após a conclusão do trabalho, os arquivos de saída são salvos no bucket do S3 e o processo continua para a próxima etapa de tradução do conteúdo.

  1. A Traduzir transcrição step invoca a função Lambda tradutor.py que usa o Amazon Translate para traduzir a transcrição para o idioma de destino. Aqui, usamos a tradução síncrona/em tempo real usando o traduzir_texto função:
    # Real-time translation
    response = translate.translate_text(
        Text=transcribe_text,
        SourceLanguageCode=source_language_code,
        TargetLanguageCode=target_language_code,
    )
    

    A tradução síncrona tem limites no tamanho do documento que pode traduzir; a partir desta escrita, está definido para 5,000 bytes. Para tamanhos de documentos maiores, considere usar uma rota assíncrona de criação do trabalho usando start_text_translation_job e verificar o estado através description_text_translation_job.

  2. O próximo passo é um Step Functions Paralelo state, onde criamos ramificações paralelas em nossa máquina de estado.
    1. Na primeira ramificação, invocamos a função Lambda a função Lambda gerar_polly_audio.py para gerar nosso fluxo de áudio do 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']

      Aqui usamos o start_speech_synthesis_task do Amazon Polly Python SDK para acionar a tarefa de síntese de fala que cria o áudio do Amazon Polly. Nós definimos o OutputFormat para mp3, que instrui o Amazon Polly a gerar um fluxo de áudio para essa chamada de API.

    2. Na segunda ramificação, invocamos a função Lambda gerar_speech_marks.py para gerar a saída de marcas de fala:
      ....
      # 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 novamente o start_speech_synthesis_task método, mas especifique OutputFormat para json, que instrui o Amazon Polly a gerar marcas de fala para essa chamada de API.

Na próxima etapa da segunda ramificação, invocamos a função Lambda gerar_subtítulos.py, que implementa a lógica para gerar um arquivo de legenda a partir da saída das marcas de fala.

Ele usa o módulo Python no arquivo webvtt_utils.py. Este módulo possui múltiplas funções utilitárias para criar o arquivo de legenda; um desses métodos get_phrases_from_speechmarks é responsável por analisar o arquivo de marcas de fala. A estrutura JSON das marcas de fala fornece apenas a hora de início para cada palavra individualmente. Para criar o tempo de legenda necessário para o arquivo SRT, primeiro criamos frases de cerca de n (onde n=10) palavras da lista de palavras no arquivo de marcas de fala. Em seguida, os escrevemos no formato de arquivo SRT, tomando a hora de início da primeira palavra na frase e, para a hora de término, usamos a hora de início da palavra (n+1) e subtraímos por 1 para criar a entrada sequenciada . A função a seguir cria as frases em preparação para gravá-las no arquivo 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. A etapa final, Media Convert, invoca a função Lambda create_mediaconvert_job.py para combinar o fluxo de áudio do Amazon Polly e o arquivo de legenda com o arquivo de vídeo de origem para gerar o arquivo de saída final, que é armazenado em um bucket do S3. Esta etapa usa MediaConvert, um serviço de transcodificação de vídeo baseado em arquivo com recursos de nível de transmissão. Ele permite que você crie facilmente conteúdo de vídeo sob demanda e combina recursos avançados de vídeo e áudio com uma interface web simples. Aqui novamente usamos o Python boto3 SDK para criar um MediaConvert trabalho:
    ……
    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"])

Pré-requisitos

Antes de começar, você deve ter os seguintes pré-requisitos:

Implante a solução

Para implantar a solução usando o AWS CDK, conclua as etapas a seguir:

  1. Clone o repositório:
    git clone https://github.com/aws-samples/localize-content-using-aws-ml-services.git 

  2. Para certificar-se de que o AWS CDK está inicializado, execute o comando cdk bootstrap da raiz do repositório:
    $ 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. Altere o diretório de trabalho para a raiz do repositório e execute o seguinte comando:
    cdk deploy

Por padrão, as configurações de áudio de destino são definidas como espanhol dos EUA (es-US). Se você planeja testá-lo com um idioma de destino diferente, use o seguinte comando:

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

O processo leva alguns minutos para ser concluído, após o que ele exibe um link que você pode usar para visualizar o arquivo de vídeo de destino com o áudio traduzido e as legendas traduzidas.

Localize conteúdo em vários idiomas usando os serviços de machine learning da AWS PlatoBlockchain Data Intelligence. Pesquisa Vertical. Ai.

Teste a solução

Para testar esta solução, usamos uma pequena parte do seguinte Vídeo AWS re:Invent 2017 do YouTube, onde o Amazon Transcribe foi introduzido pela primeira vez. Você também pode testar a solução com seu próprio vídeo. O idioma original do nosso vídeo de teste é o inglês. Ao implantar esta solução, você pode especificar as configurações de áudio de destino ou pode usar as configurações de áudio de destino padrão, que usam espanhol para gerar áudio e legendas. A solução cria um bucket do S3 que pode ser usado para fazer upload do arquivo de vídeo.

  1. No console do Amazon S3, navegue até o bucket PollyBlogBucket.
    Localize conteúdo em vários idiomas usando os serviços de machine learning da AWS PlatoBlockchain Data Intelligence. Pesquisa Vertical. Ai.
  2. Escolha o bucket, navegue até o /inputVideo diretório e faça o upload do arquivo de vídeo (a solução é testada com vídeos do tipo mp4). Nesse ponto, uma notificação de evento do S3 aciona a função Lambda, que inicia a máquina de estado.
  3. No console do Step Functions, navegue até a máquina de estado (ProcessAudioWithSubtitles).
  4. Escolha uma das execuções da máquina de estado para localizar o Inspetor de gráfico.

Isso mostra os resultados da execução para cada estado. O fluxo de trabalho do Step Functions leva alguns minutos para ser concluído, após o qual você pode verificar se todas as etapas foram concluídas com êxito.

Localize conteúdo em vários idiomas usando os serviços de machine learning da AWS PlatoBlockchain Data Intelligence. Pesquisa Vertical. Ai.

Revise a saída

Para revisar a saída, abra o console do Amazon S3 e verifique se o arquivo de áudio (.mp3) e o arquivo de marca de fala (.marks) estão armazenados no bucket do S3 em <ROOT_S3_BUCKET>/<UID>/synthesisOutput/.

Localize conteúdo em vários idiomas usando os serviços de machine learning da AWS PlatoBlockchain Data Intelligence. Pesquisa Vertical. Ai.

Veja a seguir uma amostra do arquivo de marca de fala gerado a partir do texto traduzido:

{"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"}

Nesta saída, cada parte do texto é dividida em termos de marcas de fala:

  • tempo – O carimbo de data/hora em milissegundos desde o início do fluxo de áudio correspondente
  • tipo – O tipo de marca de fala (frase, palavra, visema ou SSML)
  • começo – O deslocamento em bytes (não caracteres) do início do objeto no texto de entrada (não incluindo marcas de visema)
  • final – O deslocamento em bytes (não caracteres) do final do objeto no texto de entrada (não incluindo marcas de visema)
  • valor – Palavras individuais na frase

O arquivo de legenda gerado é gravado de volta no bucket do S3. Você pode encontrar o arquivo em <ROOT_S3_BUCKET>/<UID>/subtitlesOutput/. Inspecione o arquivo de legenda; o conteúdo deve ser semelhante ao seguinte 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

Depois que o arquivo de legendas e o arquivo de áudio são gerados, o arquivo de vídeo de origem final é criado usando o MediaConvert. Verifique o console do MediaConvert para verificar se o status do trabalho é COMPLETE.

Quando o trabalho do MediaConvert é concluído, o arquivo de vídeo final é gerado e salvo de volta no bucket do S3, que pode ser encontrado em <ROOT_S3_BUCKET>/<UID>/convertedAV/.

Como parte dessa implantação, o vídeo final é distribuído por meio de um Amazon CloudFront (CDN) e exibido no terminal ou no Formação da Nuvem AWS console.

Abra o URL em um navegador para ver o vídeo original com opções adicionais de áudio e legendas. Você pode verificar se o áudio e as legendas traduzidos estão sincronizados.

Conclusão

Neste post, discutimos como criar novas versões de idioma de arquivos de vídeo sem a necessidade de intervenção manual. Os criadores de conteúdo podem usar esse processo para sincronizar o áudio e as legendas de seus vídeos e alcançar um público global.

Você pode integrar facilmente essa abordagem em seus próprios pipelines de produção para lidar com grandes volumes e dimensionar de acordo com suas necessidades. Usos do Amazon Polly TTS Neural (NTTS) para produzir vozes text-to-speech naturais e semelhantes às humanas. Ele também suporta gerando fala a partir de SSML, que oferece controle adicional sobre como o Amazon Polly gera fala a partir do texto fornecido. O Amazon Polly também oferece um variedade de vozes diferentes em vários idiomas para atender às suas necessidades.

Comece a usar os serviços de machine learning da AWS visitando o página do produto FlexSim, ou consulte o Laboratório de soluções de aprendizado de máquina da Amazon página onde você pode colaborar com especialistas para trazer soluções de machine learning para sua organização.

Recursos adicionais

Para obter mais informações sobre os serviços usados ​​nesta solução, consulte o seguinte:


Sobre os autores

Localize conteúdo em vários idiomas usando os serviços de machine learning da AWS PlatoBlockchain Data Intelligence. Pesquisa Vertical. Ai. Reagan Rosário trabalha como arquiteto de soluções na AWS com foco em empresas de tecnologia educacional. Ele adora ajudar os clientes a criar soluções escaláveis, altamente disponíveis e seguras na Nuvem AWS. Ele tem mais de uma década de experiência trabalhando em uma variedade de funções de tecnologia, com foco em engenharia e arquitetura de software.

Localize conteúdo em vários idiomas usando os serviços de machine learning da AWS PlatoBlockchain Data Intelligence. Pesquisa Vertical. Ai.Anil Kodali é arquiteto de soluções da Amazon Web Services. Ele trabalha com clientes AWS EdTech, orientando-os com as melhores práticas de arquitetura para migrar cargas de trabalho existentes para a nuvem e projetar novas cargas de trabalho com uma abordagem que prioriza a nuvem. Antes de ingressar na AWS, ele trabalhou com grandes varejistas para ajudá-los em suas migrações para a nuvem.

Localize conteúdo em vários idiomas usando os serviços de machine learning da AWS PlatoBlockchain Data Intelligence. Pesquisa Vertical. Ai.Prasana Saraswathi Krishnan é arquiteto de soluções da Amazon Web Services e trabalha com clientes EdTech. Ele os ajuda a conduzir sua arquitetura de nuvem e estratégia de dados usando as melhores práticas. Sua experiência é em computação distribuída, análise de big data e engenharia de dados. Ele é apaixonado por aprendizado de máquina e processamento de linguagem natural.

Carimbo de hora:

Mais de Aprendizado de máquina da AWS