Amazon Polly är en tjänst som förvandlar text till verklighetstroget tal. Det möjliggör utveckling av en hel klass av applikationer som kan konvertera text till tal på flera språk.
Den här tjänsten kan användas av chatbots, ljudböcker och andra text-till-tal-applikationer i kombination med andra AWS AI- eller maskininlärningstjänster (ML). Till exempel, Amazon Lex och Amazon Polly kan kombineras för att skapa en chatbot som deltar i en tvåvägskonversation med en användare och utför vissa uppgifter baserat på användarens kommandon. Amazon Transcribe, Amazon Translate, och Amazon Polly kan kombineras för att transkribera tal till text på källspråket, översätta det till ett annat språk och tala det.
I det här inlägget presenterar vi ett intressant tillvägagångssätt för att markera text när den läses upp med Amazon Polly. Denna lösning kan användas i många text-till-tal-applikationer för att göra följande:
- Lägg till visuella funktioner till ljud i böcker, webbplatser och bloggar
- Öka förståelsen när kunder försöker förstå texten snabbt medan den läses upp
Vår lösning ger klienten (webbläsaren i det här exemplet) möjligheten att veta vilken text (ord eller mening) som läses upp av Amazon Polly när som helst. Detta gör det möjligt för klienten att dynamiskt markera texten när den läses upp. En sådan förmåga är användbar för att tillhandahålla visuell hjälp för tal för de tidigare nämnda användningsfallen.
Vår lösning kan utökas för att utföra ytterligare uppgifter förutom att markera text. Till exempel kan webbläsaren visa bilder, spela musik eller utföra andra animationer på fronten när texten läses upp. Denna funktion är användbar för att skapa dynamiska ljudböcker, utbildningsinnehåll och rikare text-till-tal-applikationer.
Lösningsöversikt
I grunden använder lösningen Amazon Polly för att konvertera en textsträng till tal. Texten kan matas in från webbläsaren eller via ett API-anrop till den slutpunkt som exponeras av vår lösning. Talet som genereras av Amazon Polly lagras som en ljudfil (MP3-format) i en Amazon enkel lagringstjänst (Amazon S3) hink.
Men med enbart ljudfilen kan webbläsaren inte hitta vilka delar av texten som läses upp vid något ögonblick eftersom vi inte har detaljerad information om när varje ord läses upp.
Amazon Polly tillhandahåller ett sätt att få detta med hjälp av talmärken. Talmärken lagras i en textfil som visar tiden (mätt i millisekunder från början av ljudet) när varje ord eller mening läses upp.
Amazon Polly returnerar talmärkesobjekt i en radavgränsad JSON-ström. Ett talmärkesobjekt innehåller följande fält:
- Tid – Tidsstämpeln i millisekunder från början av motsvarande ljudström
- Typ – Typen av talmärke (mening, ord, viseme eller SSML)
- Start – Förskjutningen i byte (inte tecken) för början av objektet i inmatningstexten (exklusive visememärken)
- Slutet – Förskjutningen i byte (inte tecken) av objektets ände i inmatningstexten (exklusive visemmärken)
- Värde – Detta varierar beroende på typen av talmärke:
- SSML – SSML-tagg
- Viseme – Visemnamnet
- Word eller mening – En delsträng av inmatningstexten avgränsad av start- och slutfälten
Till exempel kan meningen "Maria fick ett litet lamm" ge dig följande talmärkesfil om du använder SpeechMarkTypes
= ["ord", "mening"] i API-anropet för att få talmärkena:
Ordet "hade" (i slutet av rad 3) börjar 373 millisekunder efter att ljudströmmen börjar, börjar vid byte 5 och slutar vid byte 8 i inmatningstexten.
Arkitekturöversikt
Arkitekturen för vår lösning presenteras i följande diagram.
Vår webbplats för lösningen lagras på Amazon S3 som statiska filer (JavaScript, HTML), som finns i Amazon CloudFront (1) och serveras till slutanvändarens webbläsare (2).
När användaren skriver in text i webbläsaren genom ett enkelt HTML-formulär, bearbetas den av JavaScript i webbläsaren. Detta anropar ett API (3) genom Amazon API Gateway, att åberopa en AWS Lambda funktion (4). Lambdafunktionen anropar Amazon Polly (5) för att generera tal (ljud) och talmärken (JSON) filer. Två samtal görs till Amazon Polly för att hämta ljud- och talmärkesfilerna. Anropen görs med JavaScript asynkronfunktioner. Utdata från dessa samtal är ljud- och talmärkefilerna, som lagras i Amazon S3 (6a). För att undvika att flera användare skriver över varandras filer i S3-bucket, lagras filerna i en mapp med en tidsstämpel. Detta minimerar risken för att två användare skriver över varandras filer i Amazon S3. För en produktionsversion kan vi använda mer robusta metoder för att separera användarnas filer baserat på användar-ID eller tidsstämpel och andra unika egenskaper.
Lambdafunktionen skapar försignerade URL-adresser för tal- och talmarkeringsfilerna och returnerar dem till webbläsaren i form av en array (7, 8, 9).
När webbläsaren skickar textfilen till API-slutpunkten (3), får den tillbaka två försignerade URL:er för ljudfilen och talmärkesfilen i en synkron anrop (9). Detta indikeras av nyckelsymbolen bredvid pilen.
En JavaScript-funktion i webbläsaren hämtar talmärkesfilen och ljudet från deras URL-handtag (10). Den ställer in ljudspelaren för att spela upp ljudet. (HTML-ljudtaggen används för detta ändamål).
När användaren klickar på uppspelningsknappen analyserar den talmärkena som hämtats i det tidigare steget för att skapa en serie tidsinställda händelser med tidsgränser. Händelserna anropar en återuppringningsfunktion, vilket är en annan JavaScript-funktion som används för att markera den talade texten i webbläsaren. Samtidigt streamar JavaScript-funktionen ljudfilen från dess URL-handtag.
Resultatet är att händelserna körs vid lämpliga tidpunkter för att markera texten när den läses upp medan ljudet spelas upp. Användningen av JavaScript-timeout ger oss synkronisering av ljudet med den markerade texten.
Förutsättningar
För att köra den här lösningen behöver du en AWS-konto med en AWS identitets- och åtkomsthantering (IAM) användare som har tillstånd att använda Amazon CloudFront, Amazon API Gateway, Amazon Polly, Amazon S3, AWS Lambda och AWS Step Functions.
Använd Lambda för att generera tal- och talmärken
Följande kod anropar Amazon Polly synthesize_speech
funktion två gånger för att hämta ljud- och talmärkesfilen. De körs som asynkrona funktioner och koordineras för att returnera resultatet samtidigt med hjälp av löften.
På JavaScript-sidan görs textmarkeringen med markör (start, slut, ord) och de tidsinställda händelserna ställs in av setTimers()
:
Alternativa tillvägagångssätt
Istället för det tidigare tillvägagångssättet kan du överväga några alternativ:
- Skapa både talmärken och ljudfiler i en tillståndsmaskin för Step Functions. Tillståndsmaskinen kan anropa parallellförgreningsvillkoret för att anropa två olika lambdafunktioner: en för att generera tal och en annan för att generera talmärken. Koden för detta finns i med hjälp av steg-funktioner undermapp i Github-repo.
- Anropa Amazon Polly asynkront för att generera ljud- och talmärken. Detta tillvägagångssätt kan användas om textinnehållet är stort eller om användaren inte behöver ett svar i realtid. För mer information om att skapa långa ljudfiler, se Skapa långa ljudfiler.
- Låt Amazon Polly skapa den fördefinierade webbadressen direkt med hjälp av
generate_presigned_url
ring på Amazon Polly-klienten i Boto3. Om du använder detta tillvägagångssätt genererar Amazon Polly ljud- och talmärkena varje gång. I vårt nuvarande tillvägagångssätt lagrar vi dessa filer i Amazon S3. Även om dessa lagrade filer inte är tillgängliga från webbläsaren i vår version av koden, kan du modifiera koden för att spela upp tidigare genererade ljudfiler genom att hämta dem från Amazon S3 (istället för att återskapa ljudet för texten igen med Amazon Polly). Vi har fler kodexempel för att komma åt Amazon Polly med Python i AWS Code Library.
Skapa lösningen
Hela lösningen finns tillgänglig hos oss Github repo. För att skapa den här lösningen i ditt konto, följ instruktionerna i filen README.md. Lösningen innehåller en AWS molnformation mall för att tillhandahålla dina resurser.
Städa
För att rensa upp resurserna som skapats i denna demo, utför följande steg:
- Ta bort S3-hinkarna som skapats för att lagra CloudFormation-mallen (Bucket A), källkoden (Bucket B) och webbplatsen (
pth-cf-text-highlighter-website-[Suffix]
). - Ta bort CloudFormation-stacken
pth-cf
. - Ta bort S3-hinken som innehåller talfilerna (
pth-speech-[Suffix]
). Denna hink skapades av CloudFormation-mallen för att lagra ljud- och talmärkesfiler som genererats av Amazon Polly.
Sammanfattning
I det här inlägget visade vi ett exempel på en lösning som kan markera text när den läses upp med Amazon Polly. Den utvecklades med hjälp av Amazon Polly speech marks-funktionen, som ger oss markörer för var varje ord eller mening börjar i en ljudfil.
Lösningen finns tillgänglig som en CloudFormation-mall. Den kan distribueras som den är i alla webbapplikationer som utför text-till-tal-konvertering. Detta skulle vara användbart för att lägga till visuella funktioner till ljud i böcker, avatarer med läppsynkroniseringsfunktioner (med hjälp av talmärken), webbplatser och bloggar och för att hjälpa personer med hörselnedsättningar.
Den kan utökas för att utföra ytterligare uppgifter förutom att markera text. Till exempel kan webbläsaren visa bilder, spela musik och utföra andra animationer på fronten medan texten läses upp. Denna funktion kan vara användbar för att skapa dynamiska ljudböcker, utbildningsinnehåll och rikare text-till-tal-applikationer.
Vi välkomnar dig att prova denna lösning och lära dig mer om relevanta AWS-tjänster från följande länkar. Du kan utöka funktionaliteten för dina specifika behov.
Om författaren
Varad G Varadarajan är en Trusted Advisor och Field CTO för Digital Native Businesses (DNB)-kunder på AWS. Han hjälper dem att utforma och bygga innovativa lösningar i stor skala med hjälp av AWS-produkter och tjänster. Varads intresseområden är IT-strategirådgivning, arkitektur och produktledning. Utanför jobbet tycker Varad om att skriva kreativt, titta på film med familj och vänner och att resa.
- SEO-drivet innehåll och PR-distribution. Bli förstärkt idag.
- PlatoData.Network Vertical Generative Ai. Styrka dig själv. Tillgång här.
- PlatoAiStream. Web3 Intelligence. Kunskap förstärkt. Tillgång här.
- Platoesg. Fordon / elbilar, Kol, CleanTech, Energi, Miljö, Sol, Avfallshantering. Tillgång här.
- BlockOffsets. Modernisera miljökompensation ägande. Tillgång här.
- Källa: https://aws.amazon.com/blogs/machine-learning/highlight-text-as-its-being-spoken-using-amazon-polly/
- : har
- :är
- :inte
- $UPP
- 1
- 10
- 100
- 11
- 12
- 17
- 19
- 22
- 23
- 33
- 7
- 8
- 9
- a
- förmåga
- Om Oss
- tillgång
- tillgänglig
- åtkomst
- Konto
- tillsats
- Annat
- rådgivare
- Efter
- igen
- AI
- Stöd
- ensam
- alternativ
- Även
- amason
- Amazon API Gateway
- Amazon Polly
- Amazon Web Services
- an
- och
- animationer
- Annan
- vilken som helst
- api
- Ansökan
- tillämpningar
- tillvägagångssätt
- tillvägagångssätt
- lämpligt
- arkitektur
- ÄR
- områden
- array
- AS
- At
- audio
- tillgänglig
- Avatars
- undvika
- vänta
- AWS
- AWS Lambda
- AWS stegfunktioner
- tillbaka
- baserat
- BE
- därför att
- Börjar
- Där vi får lov att vara utan att konstant prestera,
- förutom
- bloggar
- Böcker
- båda
- Branch
- webbläsare
- SLUTRESULTAT
- företag
- Knappen
- by
- Ring
- Samtal
- KAN
- kapacitet
- kapacitet
- fall
- vissa
- chanser
- egenskaper
- tecken
- chatbot
- chatbots
- klass
- klient
- koda
- kombinerad
- tillstånd
- förening
- Tänk
- Konsol
- rådgivning
- innehåller
- innehåll
- fortsätta
- Konversation
- Konvertering
- konvertera
- samordnas
- Kärna
- Motsvarande
- skapa
- skapas
- skapar
- Skapa
- Kreativ
- CTO
- Aktuella
- Kunder
- demo
- beroende
- utplacerade
- detaljer
- utvecklade
- Utveckling
- olika
- digital
- direkt
- DNB
- do
- dokumentera
- inte
- gjort
- inte
- dynamisk
- dynamiskt
- varje
- Tidigare
- pedagogiska
- möjliggör
- änden
- Slutpunkt
- slutar
- ingriper
- Går in
- Hela
- fel
- händelser
- Varje
- exempel
- exempel
- utsatta
- förlänga
- familj
- Leverans
- få
- fält
- Fält
- Fil
- Filer
- hitta
- slut
- följer
- efter
- För
- formen
- format
- hittade
- vänner
- från
- främre
- främre ände
- fungera
- funktionalitet
- funktioner
- nätbryggan
- generera
- genereras
- genererar
- GitHub
- Ge
- ger
- Go
- hade
- hantera
- Handtag
- Har
- he
- hörsel
- hjälper
- Markera
- Markerad
- belysa
- värd
- html
- http
- HTTPS
- i
- ID
- Identitet
- if
- bilder
- in
- innefattar
- Inklusive
- indikerade
- informationen
- innovativa
- ingång
- inuti
- omedelbar
- istället
- instruktioner
- intresse
- intressant
- in
- anropar
- IT
- DESS
- JavaScript
- json
- Nyckel
- Vet
- språk
- Språk
- Large
- LÄRA SIG
- inlärning
- Längd
- Låt
- Bibliotek
- linje
- länkar
- liten
- Lång
- Maskinen
- maskininlärning
- gjord
- ledning
- många
- markera
- nämnts
- ML
- modifiera
- mer
- Filmer
- multipel
- Musik
- nativ
- Behöver
- behov
- Nya
- nytt
- Nästa
- objektet
- objekt
- få
- of
- offset
- on
- ONE
- or
- Övriga
- vår
- ut
- produktion
- utanför
- Parallell
- reservdelar till din klassiker
- Personer
- Utföra
- utför
- tillstånd
- Plats
- plato
- Platon Data Intelligence
- PlatonData
- Spela
- spelat
- Spelaren
- Inlägg
- presentera
- presenteras
- föregående
- tidigare
- Bearbetad
- Produkt
- produktledning
- Produktion
- Produkter
- löfte
- lovar
- ger
- tillhandahålla
- tillhandahållande
- Syftet
- snabbt
- realtid
- frigöra
- relevanta
- Resurser
- respons
- resultera
- avkastning
- återgår
- robusta
- Körning
- s
- Samma
- Skala
- sänder
- mening
- Serier
- service
- Tjänster
- in
- uppsättningar
- show
- visade
- Visar
- sida
- Enkelt
- samtidigt
- lösning
- Lösningar
- Källa
- källkod
- tala
- specifik
- tal
- talat
- stapel
- starta
- startar
- Ange
- Steg
- Steg
- förvaring
- lagra
- lagras
- Strategi
- ström
- strömmar
- Sträng
- sådana
- Symbolen
- synkronisering
- MÄRKA
- uppgifter
- mall
- Text-to-Speech
- den där
- Smakämnen
- källan
- Staten
- deras
- Dem
- Dessa
- detta
- Genom
- tid
- Timed
- gånger
- tidsstämpel
- till
- Översätt
- Traveling
- betrodd
- prova
- vänder
- två
- Typ
- förstå
- unika
- URL
- us
- användning
- Begagnade
- Användare
- användare
- användningar
- med hjälp av
- värde
- Värden
- version
- var
- tittar
- Sätt..
- we
- webb
- webbapplikation
- webbservice
- Webbplats
- webbsidor
- välkommen
- Vad
- när
- som
- medan
- VEM
- Hela
- med
- ord
- Arbete
- skulle
- skrivning
- Om er
- Din
- zephyrnet