Amazon Polly é um serviço que transforma texto em fala com som natural, usando dezenas de vozes em mais de 30 idiomas. Você pode usá-lo para todos os tipos de aplicações, desde avatares animados falantes, até agentes virtuais realistas que respondem a solicitações de suporte ao cliente, até apresentadores de notícias automatizados que leem histórias em voz alta. Você pode fazer com que o Amazon Polly retorne a fala sintetizada como uma transmissão ao vivo ou baixá-la como um arquivo de áudio padrão para reprodução posterior. Como muitos serviços da AWS, você paga apenas pelo que realmente usa: com o Amazon Polly, você paga o número de caracteres na frase sintetizada. Apenas reproduzir um arquivo de áudio salvo é gratuito, quer você o reproduza uma única vez ou várias vezes.
Se você souber exatamente quais frases precisa com antecedência, poderá otimizar seus gastos com AWS. Basta pegar cada frase que você precisa e enviá-la ao Amazon Polly no momento da compilação, armazenando o arquivo de áudio gerado até que você esteja pronto para reproduzi-lo no tempo de execução. Casos de uso comuns para essa abordagem incluem sistemas de alto-falantes em aeroportos ou estações de ônibus, videogames e atendedores automáticos de pedidos em restaurantes de serviço rápido. Basta pagar uma vez para sintetizar seu texto e reproduzir gratuitamente os arquivos de áudio resultantes conforme necessário.
Nesta postagem, compartilhamos uma solução totalmente automatizada, orientada a eventos e sem servidor que você pode usar para transformar um grande número de frases de texto em fala realista de forma assíncrona. Você pode acionar os trabalhos enviando manualmente um arquivo de frases para um privado Serviço de armazenamento simples da Amazon (Amazon S3) e ser notificado por e-mail ou mensagem instantânea quando estiverem prontos. Ou torne o processo parte do seu AWS CodeBuild sistema de integração contínua, acionando automaticamente o trabalho de síntese sempre que suas frases de origem mudam.
Visão geral da solução
A solução é totalmente sem servidor, consistindo principalmente em um conjunto de AWS Lambda funções. Essas funções rastreiam os itens a serem sintetizados. Envie-os ao Amazon Polly para síntese e processe os resultados à medida que forem concluídos. As funções usam arquivos compartilhados Amazon DynamoDB tabelas para gerenciar o estado do trabalho ao longo do tempo. Um Funções de etapa da AWS O fluxo de trabalho rastreia cada conjunto enviado e notifica as partes interessadas sobre sua conclusão por meio de um Serviço de notificação simples da Amazon (Amazon SNS) tópico.
A solução emprega um arquitetura orientada a eventos: em vez de um único processo executado do início ao fim, o processo é distribuído entre invocações do Lambda, executado apenas quando acionado por algum evento.
O diagrama a seguir ilustra a arquitetura da solução.
Implantar e configurar a solução
Você implanta a solução em sua conta da AWS usando o Modelo de aplicativo sem servidor da AWS (AWS SAM). Você pode fazer isso de qualquer computador com acesso de linha de comando à sua conta, mas por uma questão de simplicidade, usamos AWS CloudShell.
- Faça login no console do CloudShell.
- Quando o shell for inicializado, faça uma cópia local do código-fonte da solução e prepare a pilha do AWS SAM emitindo os seguintes comandos:
- Use o AWS SAM para implantar a solução, com implantação guiada. Forneça um nome de pilha (como
amazon-polly-async-batch
), sua região preferida, um endereço de e-mail para notificações e o nome de um bucket S3 inexistente para os arquivos de áudio gerados. Aceite os outros padrões.
A implantação de todos os componentes deve levar apenas alguns minutos. Se a instalação for bem-sucedida, você verá uma mensagem como esta:
- Verifique se há uma mensagem do Amazon SNS em seu e-mail e confirme a assinatura.
Como a solução funciona
Nesta seção, descrevemos detalhadamente como usar a solução para sintetizar seu texto e como funciona cada componente principal.
O arquivo definido: especificando o texto a ser sintetizado
Você define o conjunto de frases de texto que deseja que o Amazon Polly expresse em um arquivo chamado definir arquivo. Trata-se de um Arquivo YAML consistindo nos detalhes do conjunto, uma coleção de padrões e uma lista de itens para sintetizar:
- Definir detalhes – Na sub-rotina set, você atribui um nome ao conjunto para diferenciá-lo dos outros e um prefixo de saída opcional para informar à solução onde você deseja que os arquivos de áudio sejam armazenados no bucket S3.
- Padrões – Na seção de padrões opcionais, você pode fornecer aos parâmetros valores específicos que se aplicam, a menos que sejam substituídos por itens específicos. Os seguintes atributos são suportados, como documentado na API Amazon Polly:
- motor - Qualquer
standard
orneural
; padrão paraneural
- código de linguagem – Qualquer um dos mais de 20 idiomas suportados; o padrão é
en-US
- Formato de saída -
mp3
,ogg_vorbis
oupcm
; padrão paramp3
- tipo de texto - Qualquer
text
orSSML
; padrão paratext
- ID de voz – Qualquer uma das vozes suportadas; o padrão é
Matthew
- motor - Qualquer
- Unid – A coleção de itens é simplesmente uma lista de strings de texto para sintetizar. O Amazon Polly converte o texto de cada item em fala, usando os padrões definidos mais quaisquer substituições fornecidas no item, e coloca os arquivos resultantes no bucket S3 na pasta de prefixo de saída do conjunto. Se você especificar um arquivo de saída, o arquivo será nomeado conforme especificado; caso contrário, a solução atribuirá um nome ao arquivo com base em seu conteúdo e em sua ordem na coleção.
Por exemplo, se você quiser sintetizar seis linhas do Ato 1, Cena 1 de Romeu e Julieta, você pode usar um arquivo YAML semelhante ao seguinte código:
Este conjunto especifica que o Amazon Polly deve sintetizar seis versos da peça. Para representar os personagens Abraham, Sampson e Gregory, usamos as vozes Joey, Matthew e Brian. Com o Amazon Polly, você pode especificar volume e tom, como quando Abraham enfatiza a palavra “nós” e para os apartes de Sampson e Gregory, que são sussurrados; para Efeitos SSML como estes, simplesmente especificamos que text-type
is ssml
e decore a expressão adequadamente.
Como nenhum dos itens especifica um arquivo de saída, os nomes dos arquivos são gerados automaticamente para você. Neste exemplo, os arquivos MP3 gerados são act-1-scene-1/item-000000-do-you-bite-your-thumb-at-us-sir.mp3
NFT`s act-1-scene-1/item-000005-no-sir-i-do-not-bite-my-thumb-at-you-sir.mp3
.
Este arquivo de conjunto (e outros) estão no docs/samples
diretório do código. No CloudShell, você pode enviar esse arquivo para o Amazon Polly simplesmente fazendo upload dele para o bucket S3 especificado anteriormente:
O Amazon Polly sintetiza as seis linhas do arquivo. Quando todas as linhas forem sintetizadas, você receberá uma notificação por e-mail:
O YAML pode ser criado em qualquer editor, é fácil de ler para humanos e é amigável para fazer check-in em sistemas de controle de origem como AWS CodeCommit. No entanto, o arquivo definido deve ser um arquivo de texto puro, deve ter a extensão de arquivo .yml e deve ser YAML válido.
A função Definir processador
Quando um arquivo com um .yml
extensão é carregada no bucket S3, a função Set Processor Lambda inicia o processo. Ele analisa o arquivo definido e cria um registro correspondente para ele no DynamoDB. Este registro de conjunto é usado para controlar quantos itens existem no conjunto, quantos ainda não foram concluídos e quando o processamento do conjunto começou.
Então, para cada item da coleção, a função Set Processor envia uma mensagem – uma espécie de ordem de serviço – para o cliente da solução. Serviço de fila simples da Amazon (Amazon SQS). Esta ordem de serviço é um documento JSON que inclui tudo o que o Amazon Polly precisa para sintetizar o texto de acordo com as instruções no arquivo de conjunto carregado.
Cada mensagem é totalmente independente das outras, portanto o trabalho de sintetizá-las pode ser feito pelo Amazon Polly simultaneamente, e não importa a ordem em que são concluídas. O nome do conjunto também faz parte da ordem de serviço, portanto, vários conjuntos (ou até mesmo diversas instâncias do mesmo conjunto) podem ser processados pela solução ao mesmo tempo.
A função Processador de Itens
A função Item Processor Lambda consome mensagens da fila SQS e publica trabalhos no Amazon Polly.
Cada mensagem representa um único arquivo de áudio para o Amazon Polly criar. A função chama o método API IniciarSpeechSynthesisTask, usando os valores da ordem de serviço como argumentos para os parâmetros do método. Esta é uma chamada de API assíncrona, portanto não temos garantias de quando o Amazon Polly realmente gerará o arquivo de áudio para nós; mas quando estiver concluído, o Amazon Polly publica uma mensagem SNS para a próxima função do Lambda, o Processador de resposta, manipular.
A função Item Processor também adiciona um registro à tabela de itens no DynamoDB, para que a solução possa acompanhar quais itens foram concluídos com sucesso e quais ainda não foram.
Como muitas APIs da AWS, existem limites de quantas chamadas de API você pode fazer ao Amazon Polly por segundo. A função Processador de Itens é regulada para permanecer dentro de limites razoáveis e recua exponencialmente e tenta novamente conforme necessário para publicar o trabalho, mas ainda assim permanecer dentro dos limites de serviço da sua conta.
A função Processador de Resposta
Quando o Amazon Polly conclui o trabalho em uma solicitação específica, ele publica uma notificação no tópico de resposta do SNS. Isso é imediatamente captado pela função Lambda final na sequência, o Processador de Resposta. Esta função é responsável por atualizar os registros de itens e conjuntos no DynamoDB e por renomear o arquivo de áudio no Amazon S3 para o nome de arquivo solicitado.
Se o Amazon Polly relatar sucesso na síntese do arquivo de áudio, a função Response Processor simplesmente moverá o arquivo para seu local final. Atualiza o registro do item taskStatus
para success
e incrementa o success
contador no registro definido. Se o Amazon Polly relatar falha, a função atualizará o registro do item com o motivo da falha e incrementará o failed
contador no registro definido.
O fluxo de trabalho Definir garçom
Para revisar, cada uma dessas funções do Lambda é executada somente quando acionada por um evento:
- O processador de conjunto é acionado quando um arquivo de conjunto é carregado no bucket S3
- O Processador de Itens é acionado quando as ordens de serviço aparecem na fila SQS
- O processador de resposta é acionado quando o Amazon Polly publica uma mensagem no tópico do SNS
Essas funções podem ser executadas simultaneamente, processando vários itens de vários conjuntos ao mesmo tempo. Sem um processo de orquestração, como saberemos quando um conjunto específico está completo? Como sabemos se algo deu errado?
O Set Waiter é um fluxo de trabalho do Step Functions responsável por monitorar um conjunto específico para decidir quando ele será concluído ou para notificar se um problema técnico com a solução deixou o conjunto abandonado.
No inspetor Step Functions Graph, um fluxo de trabalho Set Waiter em processo se parece com o seguinte.
Uma instância do Set Waiter é iniciada pela função Set Processor para cada conjunto enviado, que passa um nome exclusivo que identifica esse conjunto. O garçom carrega o registro definido da tabela do DynamoDB na fase de carregamento e verifica se ele foi concluído na fase de verificação. Se o Amazon Polly ainda tiver tarefas para processar, a função aguardará alguns segundos na fase de espera antes de iniciar novamente.
Se todas as tarefas do conjunto tiverem sido processadas pelo Amazon Polly, o Set Waiter passa para a fase de notificação, que publica uma mensagem no tópico SNS de conclusão. Se nenhuma alteração tiver sido feita recentemente em um conjunto em processo, o Set Waiter assume que algo está errado e publica uma mensagem abandonada no tópico.
limpar
Você pode deixar a solução na sua conta pelo tempo que quiser. Quando não estiver em uso, você paga apenas pelo armazenamento dos arquivos de áudio no Amazon S3 e pelos dados nas tabelas do DynamoDB. Quando você tiver texto para sintetizar, basta fazer upload de um arquivo definido para o bucket S3 e a solução partirá daí. Você paga pelas invocações da função Lambda e pelo caracteres realmente processados pelo Amazon Polly. Sintetizando todos os 1.1 milhão de caracteres em Moby Dick, por exemplo, custa menos de US$ 5 para vozes padrão e bem menos de US$ 20 para vozes neurais de qualidade superior.
Se você decidir não usar a solução novamente, poderá excluir todos os seus recursos usando Formação da Nuvem AWS:
Conclusão
Nesta postagem, descrevemos uma solução sem servidor e orientada a eventos para enviar grandes quantidades de frases de texto para o Amazon Polly processar de forma assíncrona. Com esta abordagem, você pode manter seus custos baixos pagando apenas uma vez pela síntese, não importa quantas vezes você reproduza os arquivos de áudio gerados.
Você pode implantar a solução em sua conta em minutos como um aplicativo AWS SAM. Você especifica o texto a ser convertido em arquivos YAML chamados arquivos de conjunto. Quando um arquivo de conjunto é carregado no bucket S3 da solução (manualmente por um ser humano ou automaticamente por um pipeline de código), uma série de funções Lambda — o Processador de Conjunto, o Processador de Itens e o Processador de Resultados — trabalham juntas para enviar as tarefas para Amazon Polly e colete os arquivos de áudio para você. Quando todo o trabalho estiver concluído, uma notificação é publicada em um tópico do SNS.
A solução é desenvolvida como um projeto de código aberto no GitHub. Agradecemos suas solicitações de recursos, relatórios de bugs ou contribuições. Experimente você mesmo e deixe-nos saber o que você pensa nos comentários. Para saber mais sobre como o Amazon Polly pode ajudar você, visite nossa página da web!
Sobre os autores
John Peterson é arquiteto de soluções sênior da AWS. Ele mora fora de Chicago com sua esposa e dois filhos.
Prateek Jain é arquiteto de soluções da AWS, baseado em Atlanta, Geórgia. Ele é apaixonado por nuvem e por ajudar os clientes a criar soluções incríveis na AWS.
- '
- 100
- 7
- Acesso
- Conta
- agentes
- Aeroportos
- Todos os Produtos
- Amazon
- Amazon Polly
- api
- APIs
- Aplicação
- aplicações
- arquitetura
- argumentos
- Atlanta
- auditivo
- Automatizado
- AWS
- Bug
- construir
- ônibus
- chamada
- casos
- alterar
- a verificação
- Cheques
- Chicago
- Crianças
- Na nuvem
- código
- comentários
- comum
- componente
- conteúdo
- custos
- Suporte ao cliente
- Clientes
- dados,
- detalhe
- editor
- Meio Ambiente
- Evento
- Falha
- Característica
- Gratuito
- função
- Games
- Git
- GitHub
- Como funciona o dobrador de carta de canal
- Como Negociar
- HTTPS
- Humanos
- IAM
- Incluindo
- integração
- IT
- Empregos
- Idiomas
- grande
- Escritórios de
- APRENDER
- Line
- Lista
- carregar
- local
- localização
- longo
- principal
- milhão
- movimentos
- nomes
- Neural
- notificação
- números
- aberto
- open source
- ordem
- ordens
- Outros
- Outros
- Pagar
- Frases
- POSTAGENS
- privado
- projeto
- público
- Leitura
- registros
- Relatórios
- Recursos
- resposta
- restaurante
- Resultados
- rever
- Execute
- corrida
- Série
- Serverless
- Serviços
- conjunto
- contexto
- Partilhar
- compartilhado
- concha
- simples
- SIX
- So
- Soluções
- gastar
- começado
- Estado
- ficar
- armazenamento
- Histórias
- apresentado
- tudo incluso
- sucesso
- bem sucedido
- ajuda
- Suportado
- .
- sistemas
- falando
- Dados Técnicos:
- As vozes
- tempo
- pista
- Atualizações
- us
- Vídeo
- jogos de vídeo
- Virtual
- voz
- VOZES
- volume
- esperar
- dentro
- Atividades:
- de gestão de documentos
- trabalho