Amazon Polly är en tjänst som förvandlar text till naturligt klingande tal, med hjälp av dussintals röster på mer än 30 språk. Du kan använda den för alla möjliga applikationer, allt från pratande animerade avatarer, till verklighetstrogna virtuella agenter som svarar på kundsupportförfrågningar, till automatiserade nyhetsuppläsare som läser berättelser högt. Du kan låta Amazon Polly returnera syntetiserat tal som en liveström, eller ladda ner den som en standardljudfil för uppspelning senare. Som många AWS-tjänster betalar du bara för det du faktiskt använder: med Amazon Polly betalar du för antalet tecken i den syntetiserade frasen. Att bara spela en sparad ljudfil är gratis, oavsett om du spelar den en gång eller flera gånger.
Om du vet exakt vilka fraser du behöver i förväg kan du optimera dina AWS-utgifter. Ta bara varje fras du behöver uttrycka och skicka den till Amazon Polly vid byggtiden, och lagra den genererade ljudfilen tills du är redo att spela upp den under körning. Vanliga användningsfall för detta tillvägagångssätt inkluderar högtalarsystem på flygplatser eller busstationer, videospel och snabbservicerestauranger med automatiserade ordertagare. Betala bara en gång för att syntetisera din text och spela sedan om de resulterande ljudfilerna efter behov gratis.
I det här inlägget delar vi en helautomatisk, händelsedriven, serverlös lösning som du kan använda för att asynkront omvandla ett stort antal textfraser till verklighetstroget tal. Du kan utlösa jobben genom att manuellt ladda upp en fil med fraser till en privatperson Amazon enkel lagringstjänst (Amazon S3) och sedan meddelas via e-post eller snabbmeddelande när de är redo. Eller gör processen till en del av din AWS CodeBuild kontinuerligt integrationssystem, genom att automatiskt utlösa syntesarbetet närhelst dina källfraser ändras.
Översikt över lösningen
Lösningen är helt serverlös och består huvudsakligen av en uppsättning av AWS Lambda funktioner. Dessa funktioner spårar objekten som ska syntetiseras. Skicka in dem till Amazon Polly för syntes och bearbeta resultaten när de är klara. Funktionerna använder delad Amazon DynamoDB tabeller för att hantera tillståndet i arbetet över tid. En AWS stegfunktioner arbetsflöde spårar varje inlämnat set och meddelar berörda parter om dess slutförande via en Amazon enkel meddelandetjänst (Amazon SNS) ämne.
Lösningen använder en händelsedriven arkitektur: snarare än en enda process som löper från början till slut, är processen fördelad över Lambda-anrop, körs endast när den utlöses för att göra det från någon händelse.
Följande diagram illustrerar lösningsarkitekturen.
Distribuera och konfigurera lösningen
Du distribuerar lösningen till ditt AWS-konto med hjälp av AWS serverlös applikationsmodell (AWS SAM). Du kan göra detta från vilken dator som helst med kommandoradsåtkomst till ditt konto, men för enkelhetens skull använder vi AWS CloudShell.
- Logga in på CloudShell-konsolen.
- När ditt skal har initierats, gör en lokal kopia av lösningens källkod och förbered AWS SAM-stacken genom att utfärda följande kommandon:
- Använd AWS SAM för att distribuera lösningen, med deploy –guided. Ange ett stacknamn (som
amazon-polly-async-batch
), din föredragna region, en e-postadress för aviseringar och namnet på en icke-existerande S3-hink för de genererade ljudfilerna. Acceptera de andra standardinställningarna.
Installationen av alla komponenter bör ta bara några minuter. Om installationen lyckas bör du se ett meddelande som följande:
- Kontrollera din e-post efter ett meddelande från Amazon SNS och bekräfta prenumerationen.
Hur lösningen fungerar
I det här avsnittet beskriver vi i detalj hur du använder lösningen för att syntetisera din text, och hur varje huvudkomponent fungerar.
Uppsättningsfilen: Anger texten som ska syntetiseras
Du definierar uppsättningen textfraser som du vill att Amazon Polly ska rösta i en fil som heter a ställa in filen. Detta är en YAML-fil bestående av uppsättningsdetaljerna, en samling standardvärden och en lista över objekt att syntetisera:
- Ange detaljer – I set strofen ger du setet ett namn för att skilja det från andra, och ett valfritt utdataprefix för att tala om för lösningen var i din S3-hink du vill att ljudfilerna ska lagras.
- Standardvärden – I avsnittet för valfria standardinställningar kan du ge parametrar specifika värden som gäller om de inte åsidosätts av specifika objekt. Följande attribut stöds, som dokumenterad i Amazon Polly API:
- motor – Antingen
standard
orneural
; standard tillneural
- språkkod – Något av de över 20 språken som stöds; standard till
en-US
- Utmatningsformat -
mp3
,ogg_vorbis
, ellerpcm
; standard tillmp3
- texttyp – Antingen
text
orSSML
; standard tilltext
- röst-id – Någon av de röster som stöds; standard till
Matthew
- motor – Antingen
- objekt – Objektsamlingen är helt enkelt en lista över textsträngar att syntetisera. Amazon Polly konverterar varje objekts text till tal, med hjälp av de inställda standardinställningarna plus eventuella åsidosättanden som ges i objektet, och placerar de resulterande filerna i S3-hinken i setets utdataprefixmapp. Om du anger en utdatafil, namnges filen som specificerat; Annars tilldelar lösningen filen ett namn baserat på dess innehåll och dess ordning i samlingen.
Till exempel, om du vill syntetisera sex rader från akt 1, scen 1 av Romeo och Juliet, kan du använda en YAML-fil som ser ut som följande kod:
Denna uppsättning anger att Amazon Polly ska syntetisera sex rader från pjäsen. För att representera karaktärerna Abraham, Sampson och Gregory använder vi rösterna Joey, Matthew och Brian. Med Amazon Polly kan du specificera volym och ton, som när Abraham betonar ordet "oss" och för Sampsons och Gregorys åsido, som viskas; för SSML-effekter som dessaanger vi helt enkelt att text-type
is ssml
, och dekorera yttrandet på lämpligt sätt.
Eftersom inget av objekten anger en utdatafil, genereras filnamnen automatiskt åt dig. I det här exemplet är de genererade MP3-filerna act-1-scene-1/item-000000-do-you-bite-your-thumb-at-us-sir.mp3
dig genom act-1-scene-1/item-000005-no-sir-i-do-not-bite-my-thumb-at-you-sir.mp3
.
Den här uppsättningsfilen (och andra) finns i docs/samples
katalogen för koden. I CloudShell kan du skicka den här filen till Amazon Polly helt enkelt genom att ladda upp den till S3-hinken som du angav tidigare:
Amazon Polly syntetiserar de sex raderna från filen. När alla rader har syntetiserats får du ett e-postmeddelande:
YAML kan skapas i vilken redigerare som helst, är lätt för människor att läsa och är vänlig för att checka in i källkontrollsystem som AWS CodeCommit. Uppsättningsfilen måste dock vara en ren textfil, måste ha filtillägget .yml och måste vara giltig YAML.
Funktionen Ställ in processor
När en fil med en .yml
förlängning laddas upp till S3-hinken, funktionen Set Processor Lambda startar processen. Den analyserar uppsättningsfilen och skapar en motsvarande post för den i DynamoDB. Denna uppsättningspost används för att hålla reda på hur många objekt som finns i uppsättningen, hur många som ännu inte har slutförts och när uppsättningsbearbetningen började.
Sedan, för varje objekt i samlingen, skickar funktionen Set Processor ett meddelande – en slags arbetsorder – till lösningens Amazon enkel kötjänst (Amazon SQS) kö. Denna arbetsorder är ett JSON-dokument som inkluderar allt som Amazon Polly behöver för att syntetisera texten enligt instruktionerna i den uppladdade uppsättningsfilen.
Varje meddelande är helt oberoende av de andra, så arbetet med att syntetisera dem kan utföras av Amazon Polly samtidigt, och det spelar ingen roll i vilken ordning de slutförs. Namnet på uppsättningen är också en del av arbetsordern, så flera uppsättningar (eller till och med flera instanser av samma uppsättning) kan bearbetas av lösningen samtidigt.
Objektprocessorfunktionen
Item Processor Lambda-funktionen förbrukar meddelanden från SQS-kön och inlägg fungerar till Amazon Polly.
Varje meddelande representerar en enda ljudfil som Amazon Polly kan skapa. Funktionen anropar API-metoden Starta SpeechSynthesisTask, med värdena i arbetsordern som argument till metodens parametrar. Detta är ett asynkront API-anrop, så vi har inga garantier för när Amazon Polly faktiskt genererar ljudfilen åt oss; men när det är klart publicerar Amazon Polly ett SNS-meddelande som nästa Lambda-funktion, Response Processor, ska hantera.
Funktionen Item Processor lägger också till en post i objekttabellen i DynamoDB, så att lösningen kan hålla reda på vilka objekt som har slutförts och vilka som ännu inte har gjorts.
Liksom många AWS API:er finns det gränser för hur många API-anrop du kan göra till Amazon Polly per sekund. Item Processor-funktionen är strypt för att hålla sig inom rimliga gränser, och det backar exponentiellt och försöker igen efter behov för att lägga upp arbetet men ändå hålla dig inom gränserna för ditt kontoservice.
Funktionen Response Processor
När Amazon Polly har slutfört arbetet med en specifik förfrågan, skickar den ett meddelande till SNS-svarsämnet. Detta plockas omedelbart upp av den sista lambdafunktionen i sekvensen, svarsprocessorn. Denna funktion är ansvarig för att uppdatera objektet och sätta poster i DynamoDB, och för att byta namn på ljudfilen i Amazon S3 till det begärda filnamnet.
Om Amazon Polly rapporterade framgång med att syntetisera ljudfilen, flyttar Response Processor-funktionen helt enkelt filen till sin slutliga plats. Den uppdaterar artikelposten taskStatus
till success
och ökar success
räknare i det satta rekordet. Om Amazon Polly rapporterar fel, uppdaterar funktionen artikelposten med orsaken till felet och ökar den failed
räknare i det satta rekordet.
Arbetsflödet för Set Waiter
För att granska, var och en av dessa Lambda-funktioner körs endast när de utlöses av en händelse:
- Set-processorn utlöses när en set-fil laddas upp till S3-bucket
- Artikelbehandlaren utlöses när arbetsorder visas i SQS-kön
- Svarsprocessorn utlöses när Amazon Polly publicerar ett meddelande till SNS-ämnet
Dessa funktioner kan köras samtidigt och bearbeta flera objekt från flera uppsättningar samtidigt. Utan en orkestreringsprocess, hur vet vi när en specifik uppsättning är klar? Hur vet vi om något gick fel?
Set Waiter är ett Step Functions-arbetsflöde som ansvarar för att titta på en specifik uppsättning för att bestämma när den är klar, eller för att meddela om ett tekniskt problem med lösningen har lämnat setet övergivet.
I inspektören Step Functions Graph ser ett pågående Set Waiter-arbetsflöde ut som följande.
En instans av Set Waiter startas av Set Processor-funktionen för varje inlämnad uppsättning, som skickar ett unikt namn som identifierar den uppsättningen. Servitören laddar upp den inställda posten från DynamoDB-tabellen i laddningsfasen och kontrollerar om den är komplett i kontrollfasen. Om Amazon Polly fortfarande har uppgifter att bearbeta, väntar funktionen några sekunder i väntefasen innan den startar igen.
Om varje uppgift i setet har bearbetats av Amazon Polly, flyttar Set Waiter till aviseringsfasen, som publicerar ett meddelande till slutförandet av SNS-ämnet. Om inga ändringar nyligen har gjorts i en pågående uppsättning, antar Set Waiter att något är fel och skickar ett övergivet meddelande till ämnet.
Städa upp
Du kan lämna lösningen på ditt konto så länge du vill. När den inte används betalar du bara för lagringen av ljudfilerna i Amazon S3 och för data i DynamoDB-tabellerna. När du har text att syntetisera laddar du bara upp en uppsatt fil till S3-hinken, så tar lösningen den därifrån. Du betalar för Lambdafunktionsanrop och tecken som faktiskt bearbetats av Amazon Polly. Syntetiserar alla 1.1 miljoner tecken in Moby Dick, till exempel, kostar mindre än $5 för standardrösterna och långt under $20 för de neurala rösterna av högre kvalitet.
Om du bestämmer dig för att inte använda lösningen igen kan du ta bort alla dess resurser med hjälp av AWS molnformation:
Slutsats
I det här inlägget beskrev vi en serverlös, händelsedriven lösning för att skicka in stora mängder textfraser för Amazon Polly att behandla asynkront. Med detta tillvägagångssätt kan du hålla dina kostnader låga genom att bara betala en gång för syntes, oavsett hur många gånger du spelar upp de genererade ljudfilerna.
Du kan distribuera lösningen till ditt konto på några minuter som en AWS SAM-applikation. Du anger texten som ska konverteras i YAML-filer som kallas uppsättningsfiler. När en uppsättningsfil laddas upp till lösningens S3-bucket (antingen manuellt av en människa eller automatiskt av en kodpipeline), samarbetar en serie lambdafunktioner – Set Processor, Item Processor och Result Processor – för att skicka uppgifterna till Amazon Polly och samla ljudfilerna åt dig. När allt arbete är slutfört publiceras ett meddelande till ett SNS-ämne.
Lösningen är utvecklad som ett öppen källkodsprojekt på GitHub. Vi välkomnar dina funktionsförfrågningar, buggrapporter eller bidrag. Prova detta på egen hand och låt oss veta vad du tycker i kommentarerna. För att lära dig mer om hur Amazon Polly kan hjälpa dig, besök vår webbsida!
Om författarna
Jon Peterson är Senior Solutions Architect med AWS. Han bor utanför Chicago med sin fru och två barn.
Prateek Jain är en lösningsarkitekt med AWS, baserat från Atlanta Georgia. Han brinner för molnet och hjälper kunder att bygga fantastiska lösningar på AWS.
- '
- 100
- 7
- tillgång
- Konto
- medel
- Flygplatser
- Alla
- amason
- Amazon Polly
- api
- API: er
- Ansökan
- tillämpningar
- arkitektur
- argument
- Atlanta
- audio
- Automatiserad
- AWS
- Bug
- SLUTRESULTAT
- Bussen
- Ring
- fall
- byta
- kontroll
- Kontroller
- chicago
- Barn
- cloud
- koda
- kommentarer
- Gemensam
- komponent
- innehåll
- Kostar
- Helpdesk
- Kunder
- datum
- detalj
- redaktör
- Miljö
- händelse
- Misslyckande
- Leverans
- Fri
- fungera
- Games
- georgien
- gå
- GitHub
- Hur ser din drömresa ut
- How To
- HTTPS
- Människa
- IAM
- Inklusive
- integrering
- IT
- Lediga jobb
- Språk
- Large
- Lag
- LÄRA SIG
- linje
- Lista
- läsa in
- lokal
- läge
- Lång
- större
- miljon
- förflyttar
- namn
- neural
- anmälan
- nummer
- öppet
- öppen källkod
- beställa
- ordrar
- Övriga
- Övrigt
- Betala
- fraser
- inlägg
- privat
- projektet
- allmän
- Läsning
- register
- Rapport
- Resurser
- respons
- restaurang
- Resultat
- översyn
- Körning
- rinnande
- Serier
- Server
- Tjänster
- in
- inställning
- Dela
- delas
- Shell
- Enkelt
- SEX
- So
- Lösningar
- spendera
- igång
- Ange
- bo
- förvaring
- Upplevelser för livet
- lämnats
- prenumeration
- framgång
- framgångsrik
- stödja
- Som stöds
- system
- System
- tala
- Teknisk
- Rösterna
- tid
- spår
- Uppdateringar
- us
- Video
- videospel
- Virtuell
- Röst
- RÖSTER
- volym
- vänta
- inom
- Arbete
- arbetsflöde
- fungerar