Amazon Polly er en tjeneste som gjør tekst til naturlig klingende tale, ved å bruke dusinvis av stemmer på mer enn 30 språk. Du kan bruke den til alle slags applikasjoner, alt fra snakkende animerte avatarer, til naturtro virtuelle agenter som svarer på kundestøtteforespørsler, til automatiserte nyhetsopplesere som leser historier høyt. Du kan få Amazon Polly til å returnere syntetisert tale som en direktestrøm, eller laste den ned som en standard lydfil for avspilling senere. Som mange AWS-tjenester betaler du bare for det du faktisk bruker: med Amazon Polly betaler du for antall tegn i den syntetiserte frasen. Bare å spille av en lagret lydfil er gratis, enten du spiller den én gang eller flere ganger.
Hvis du vet nøyaktig hvilke setninger du trenger på forhånd, kan du optimalisere AWS-forbruket ditt. Bare ta hver setning du trenger å stemme og send den til Amazon Polly ved byggetid, og lagre den genererte lydfilen til du er klar til å spille den av under kjøring. Vanlige brukstilfeller for denne tilnærmingen inkluderer høyttalersystemer på flyplasser eller busstasjoner, videospill og hurtigbetjente restaurantautomatiserte ordremottakere. Bare betal én gang for å syntetisere teksten din, og spill deretter de resulterende lydfilene på nytt etter behov gratis.
I dette innlegget deler vi en helautomatisert, hendelsesdrevet, serverløs løsning som du kan bruke til å gjøre et stort antall tekstfraser til naturtro tale asynkront. Du kan utløse jobbene ved å manuelt laste opp en fil med fraser til en privatperson Amazon enkel lagringstjeneste (Amazon S3)-bøtte, og deretter bli varslet via e-post eller direktemelding når de er klare. Eller gjør prosessen til en del av din AWS CodeBuild kontinuerlig integreringssystem, ved automatisk å utløse syntesearbeidet når kildefrasene dine endres.
Oversikt over løsningen
Løsningen er helt serverløs, og består hovedsakelig av et sett med AWS Lambda funksjoner. Disse funksjonene sporer elementene som skal syntetiseres. Send dem til Amazon Polly for syntese, og bearbeid resultatene etter hvert som de er fullført. Funksjonene bruker delt Amazon DynamoDB tabeller for å styre tilstanden til arbeidet over tid. An AWS trinnfunksjoner arbeidsflyt sporer hvert innsendt sett, og varsler interesserte parter om fullføringen via en Amazon enkel varslingstjeneste (Amazon SNS) emne.
Løsningen bruker en hendelsesdrevet arkitektur: i stedet for en enkelt prosess som kjører fra begynnelse til slutt, distribueres prosessen på tvers av Lambda-anrop, kjøres bare når den utløses for å gjøre det fra en eller annen hendelse.
Følgende diagram illustrerer løsningsarkitekturen.
Distribuer og konfigurer løsningen
Du distribuerer løsningen til AWS-kontoen din ved å bruke AWS-serverløs applikasjonsmodell (AWS SAM). Du kan gjøre dette fra hvilken som helst datamaskin med kommandolinjetilgang til kontoen din, men for enkelhets skyld bruker vi AWS CloudShell.
- Logg på CloudShell-konsollen.
- Når skallet er initialisert, lag en lokal kopi av løsningens kildekode og klargjør AWS SAM-stakken ved å utstede følgende kommandoer:
- Bruk AWS SAM til å distribuere løsningen, med deploy –guided. Oppgi et stabelnavn (som
amazon-polly-async-batch
), din foretrukne region, en e-postadresse for varsler og navnet på en ikke-eksisterende S3-bøtte for de genererte lydfilene. Godta de andre standardinnstillingene.
Distribusjon av alle komponentene bør ta bare noen få minutter. Hvis installasjonen er vellykket, bør du se en melding som følgende:
- Sjekk e-posten din for en melding fra Amazon SNS og bekreft abonnementet.
Hvordan løsningen fungerer
I denne delen beskriver vi i detalj hvordan du bruker løsningen til å syntetisere teksten din, og hvordan hver hovedkomponent fungerer.
Settfilen: Spesifiserer teksten som skal syntetiseres
Du definerer settet med tekstfraser du vil at Amazon Polly skal stemme i en fil som heter a sette fil. Dette er en YAML-fil bestående av de angitte detaljene, en samling standarder og en liste over elementer som skal syntetiseres:
- Angi detaljer – I settstrofen gir du settet et navn for å skille det fra andre, og et valgfritt utdataprefiks for å fortelle løsningen hvor i S3-bøtten du vil ha lydfilene lagret.
- Mislighold – I den valgfrie standardseksjonen kan du gi parametere spesifikke verdier som gjelder med mindre de overstyres av spesifikke elementer. Følgende attributter støttes, som dokumentert i Amazon Polly API:
- motor - Enten
standard
orneural
; standard tilneural
- språkkode – Hvilket som helst av de over 20 språkene som støttes; standard til
en-US
- Utgående format -
mp3
,ogg_vorbis
ellerpcm
; standard tilmp3
- teksttype - Enten
text
orSSML
; standard tiltext
- stemme-ID – Enhver av de støttede stemmene; standard til
Matthew
- motor - Enten
- elementer – Gjenstandssamlingen er ganske enkelt en liste over tekststrenger som skal syntetiseres. Amazon Polly konverterer teksten til hvert element til tale ved å bruke de angitte standardinnstillingene pluss eventuelle overstyringer gitt i elementet, og plasserer de resulterende filene i S3-bøtten i settets prefiks-mapp for settet. Hvis du angir en utdatafil, får filen navnet som spesifisert; Ellers tildeler løsningen filen et navn basert på innholdet og rekkefølgen i samlingen.
For eksempel, hvis du ønsker å syntetisere seks linjer fra Act 1 Scene 1 av Romeo og Juliet, kan du bruke en YAML-fil som ser ut som følgende kode:
Dette settet spesifiserer at Amazon Polly skal syntetisere seks linjer fra stykket. For å representere karakterene Abraham, Sampson og Gregory bruker vi stemmene Joey, Matthew og Brian. Med Amazon Polly kan du spesifisere volum og tone, som når Abraham understreker ordet «oss» og for Sampsons og Gregorys side, som hviskes; til SSML-effekter som disse, spesifiserer vi ganske enkelt at text-type
is ssml
, og dekorere ytringen på riktig måte.
Fordi ingen av elementene spesifiserer en utdatafil, genereres filnavnene automatisk for deg. I dette eksemplet er de genererte MP3-filene act-1-scene-1/item-000000-do-you-bite-your-thumb-at-us-sir.mp3
gjennom act-1-scene-1/item-000005-no-sir-i-do-not-bite-my-thumb-at-you-sir.mp3
.
Denne settfilen (og andre) er i docs/samples
katalogen til koden. I CloudShell kan du sende denne filen til Amazon Polly ved å laste den opp til S3-bøtta du spesifiserte tidligere:
Amazon Polly syntetiserer de seks linjene fra filen. Når alle linjene er syntetisert, får du et e-postvarsel:
YAML kan opprettes i hvilken som helst editor, er lett for mennesker å lese, og er vennlig for å sjekke inn på kildekontrollsystemer som AWS CodeCommit. Setfilen må imidlertid være en ren tekstfil, må ha filtypen .yml og må være gyldig YAML.
Still inn prosessor-funksjonen
Når en fil med en .yml
utvidelsen lastes opp til S3-bøtten, setter prosessor Lambda-funksjonen starter prosessen. Den analyserer settfilen og oppretter en tilsvarende post for den i DynamoDB. Denne settposten brukes til å holde styr på hvor mange elementer det er i settet, hvor mange som ennå ikke er fullført, og når settbehandlingen startet.
Deretter, for hvert element i samlingen, legger Set Processor-funksjonen ut en melding – en slags arbeidsordre – til løsningens Amazon enkel køtjeneste (Amazon SQS) kø. Denne arbeidsordren er et JSON-dokument som inkluderer alt Amazon Polly trenger for å syntetisere teksten i henhold til instruksjonene i den opplastede settfilen.
Hver melding er helt uavhengig av de andre, så arbeidet med å syntetisere dem kan gjøres av Amazon Polly samtidig, og det spiller ingen rolle i hvilken rekkefølge de fullføres. Navnet på settet er også en del av arbeidsordren, så flere sett (eller til og med flere forekomster av samme sett) kan behandles av løsningen samtidig.
Varebehandlerfunksjonen
Item Processor Lambda-funksjonen bruker meldinger fra SQS-køen og innlegg fungerer til Amazon Polly.
Hver melding representerer en enkelt lydfil som Amazon Polly kan lage. Funksjonen kaller API-metoden StartSpeechSynthesisTask, ved å bruke verdiene i arbeidsordren som argumenter til metodens parametere. Dette er et asynkront API-kall, så vi har ingen garantier for når Amazon Polly faktisk genererer lydfilen for oss; men når den er fullført, publiserer Amazon Polly en SNS-melding som den neste Lambda-funksjonen, responsprosessoren, skal håndtere.
Varebehandler-funksjonen legger også til en post i varetabellen i DynamoDB, slik at løsningen kan holde styr på hvilke varer som er fullført og hvilke som ennå ikke har blitt gjennomført.
Som mange AWS APIer, er det grenser for hvor mange API-anrop du kan gjøre til Amazon Polly per sekund. Vareprosessor-funksjonen er strupet for å holde seg innenfor rimelige grenser, og den slår seg eksponentielt tilbake og prøver på nytt etter behov for å legge ut arbeidet, men fortsatt holde deg innenfor kontotjenestegrensene.
Response Processor-funksjonen
Når Amazon Polly har fullført arbeidet med en spesifikk forespørsel, legger den ut et varsel til SNS-svaremnet. Dette blir umiddelbart fanget opp av den siste Lambda-funksjonen i sekvensen, responsprosessoren. Denne funksjonen er ansvarlig for å oppdatere elementet og sette poster i DynamoDB, og for å gi nytt navn til lydfilen i Amazon S3 til det forespurte filnavnet.
Hvis Amazon Polly rapporterte suksess med å syntetisere lydfilen, flytter Response Processor-funksjonen ganske enkelt filen til den endelige plasseringen. Den oppdaterer vareposten taskStatus
til success
og øker success
teller i settrekorden. Hvis Amazon Polly rapporterer feil, oppdaterer funksjonen vareposten med årsaken til feilen og øker failed
teller i settrekorden.
Arbeidsflyten for Set Waiter
For å vurdere, kjører hver av disse Lambda-funksjonene bare når de utløses av en hendelse:
- Set-prosessoren utløses når en settfil lastes opp til S3-bøtten
- Varebehandleren utløses når arbeidsordrer vises i SQS-køen
- Responsprosessoren utløses når Amazon Polly publiserer en melding til SNS-emnet
Disse funksjonene kan kjøres samtidig og behandle flere elementer fra flere sett samtidig. Uten en orkestreringsprosess, hvordan vet vi når et spesifikt sett er ferdig? Hvordan vet vi om noe gikk galt?
Set Waiter er en Step Functions-arbeidsflyt som er ansvarlig for å se på et spesifikt sett for å bestemme når det er ferdig, eller for å varsle hvis et teknisk problem med løsningen har forlatt settet.
I trinnfunksjonsgrafinspektøren ser en arbeidsflyt for Set Waiter som er i gang, slik ut.
En forekomst av Set Waiter startes av Set Processor-funksjonen for hvert innsendt sett, som sender et unikt navn som identifiserer det settet. Kelneren laster inn settposten fra DynamoDB-tabellen i lastefasen og sjekker om den er komplett i kontrollfasen. Hvis Amazon Polly fortsatt har oppgaver å behandle, venter funksjonen noen sekunder i ventefasen før den starter igjen.
Hvis hver oppgave i settet har blitt behandlet av Amazon Polly, går Set Waiter til varslingsfasen, som publiserer en melding til fullførings-SNS-emnet. Hvis det nylig ikke er gjort endringer i et sett under prosess, antar Set Waiter at noe er galt og legger ut en forlatt melding til emnet.
Rydd opp
Du kan la løsningen stå på kontoen din så lenge du vil. Når den ikke er i bruk, betaler du kun for lagring av lydfilene i Amazon S3 og for dataene i DynamoDB-tabellene. Når du har tekst å syntetisere, laster du bare opp en sett fil til S3-bøtta, og løsningen tar det derfra. Du betaler for Lambda-funksjonen påkallinger og tegn som faktisk er behandlet av Amazon Polly. Syntetiserer alle 1.1 millioner tegn i Moby Dickkoster for eksempel mindre enn $5 for standardstemmer, og godt under $20 for nevrale stemmer av høyere kvalitet.
Hvis du bestemmer deg for ikke å bruke løsningen igjen, kan du slette alle ressursene ved hjelp av AWS skyformasjon:
konklusjonen
I dette innlegget beskrev vi en serverløs, hendelsesdrevet løsning for å sende inn store mengder tekstfraser som Amazon Polly skal behandle asynkront. Med denne tilnærmingen kan du holde kostnadene lave ved å betale kun én gang for syntese, uansett hvor mange ganger du spiller av de genererte lydfilene.
Du kan distribuere løsningen til kontoen din på få minutter som en AWS SAM-applikasjon. Du spesifiserer teksten som skal konverteres i YAML-filer kalt settfiler. Når en settfil lastes opp til løsningens S3-bøtte (enten manuelt av et menneske, eller automatisk av en kodepipeline), samarbeider en serie Lambda-funksjoner – Set Processor, Item Processor og Result Processor – for å sende oppgavene til Amazon Polly og samle lydfilene for deg. Når alt arbeidet er utført, publiseres et varsel til et SNS-emne.
Løsningen er utviklet som et åpen kildekode-prosjekt på GitHub. Vi ønsker dine funksjonsforespørsler, feilrapporter eller bidrag velkommen. Prøv dette på egen hånd og la oss få vite hva du synes i kommentarene. For å lære mer om hvordan Amazon Polly kan hjelpe deg, besøk vår webside!
Om forfatterne
Jon Peterson er senior løsningsarkitekt med AWS. Han bor utenfor Chicago med sin kone og to barn.
Prateek Jain er en løsningsarkitekt med AWS, basert i Atlanta, Georgia. Han brenner for Cloud og hjelper kunder med å bygge fantastiske løsninger på AWS.
- '
- 100
- 7
- adgang
- Logg inn
- agenter
- Flyplasser
- Alle
- Amazon
- Amazon Polly
- api
- APIer
- Søknad
- søknader
- arkitektur
- argumenter
- Atlanta
- lyd
- Automatisert
- AWS
- Bug
- bygge
- buss
- ring
- saker
- endring
- kontroll
- Sjekker
- Chicago
- Barn
- Cloud
- kode
- kommentarer
- Felles
- komponent
- innhold
- Kostnader
- Kundeservice
- Kunder
- dato
- detalj
- redaktør
- emalje
- Miljø
- Event
- Failure
- Trekk
- Gratis
- funksjon
- Games
- Georgia
- gå
- GitHub
- Hvordan
- Hvordan
- HTTPS
- Mennesker
- IAM
- Inkludert
- integrering
- IT
- Jobb
- språk
- stor
- Law
- LÆRE
- linje
- Liste
- laste
- lokal
- plassering
- Lang
- større
- millioner
- trekk
- navn
- neural
- varsling
- tall
- åpen
- åpen kildekode
- rekkefølge
- ordrer
- Annen
- andre
- Betale
- setninger
- innlegg
- privat
- prosjekt
- offentlig
- Lesning
- poster
- Rapporter
- Ressurser
- svar
- Restaurant
- Resultater
- anmeldelse
- Kjør
- rennende
- Serien
- server~~POS=TRUNC
- Tjenester
- sett
- innstilling
- Del
- delt
- Shell
- Enkelt
- SIX
- So
- Solutions
- bruke
- startet
- Tilstand
- opphold
- lagring
- Stories
- innsendt
- abonnement
- suksess
- vellykket
- støtte
- Støttes
- system
- Systemer
- snakker
- Teknisk
- Stemmene
- tid
- spor
- oppdateringer
- us
- video
- videospill
- virtuelle
- Voice
- STemmer
- volum
- vente
- innenfor
- Arbeid
- arbeidsflyt
- virker