Selles postituses näitame, kuidas seda kasutada Amazon Polly– juhtiv pilveteenus, mis teisendab teksti elutruuks kõneks – et lugeda veebilehe sisu ja tõsta sisu lugemise ajal esile. Heli taasesituse lisamine veebilehele parandab lehe juurdepääsetavust ja külastajakogemust. Heliga täiustatud sisu on mõjuvam ja meeldejäävam, tõmbab lehele rohkem liiklust ja mõjutab külastajate ostujõudu. See parandab ka lehte avaldava ettevõtte või organisatsiooni kaubamärki. Kõnesünteesi tehnoloogia muudab need ettevõtte eelised saavutatavaks. Me kiirendame seda teekonda, näidates, kuidas seda eesmärki Amazon Polly abil saavutada.
See võimalus parandab puuetega külastajate juurdepääsetavust ja seda võiks kasutada teie organisatsiooni juurdepääsetavuse strateegia osana. Sama oluline on see, et see parandab puudeta külastajate lehekogemust. Mõlemal rühmal on märkimisväärne kulujõud ja nad kulutavad vabamalt lehtedelt, mis kasutavad nende tähelepanu köitmiseks heliparandusi.
Ülevaade lahendusest
PollyReadsThePage
(PRTP) – nagu me lahendusele viitame – võimaldab veebilehe väljaandjal oma veebilehele helijuhtelemendi maha jätta. Kui külastaja valib mängima juhtnupul loeb juhtnupp lehte ja tõstab sisu esile. PRTP kasutab tekstist kõne sünteesimiseks Amazon Polly üldist võimalust. See kutsub Amazon Pollyt genereerima iga lehe jaoks kaks artefakti:
- Heli sisu brauseris esitatavas vormingus: MP3
- Kõnemärkide fail, mis näitab iga tekstilause kohta:
- Lause lugemise aeg taasesituse ajal
- Lause asukoht lehel kuvatakse
Kui külastaja valib mängima, esitab brauser MP3-faili. Heli lugemisel kontrollib brauser kellaaega, leiab märgiste failist, millist lauset sel ajal lugeda, otsib selle lehel üles ja tõstab selle esile.
PRTP võimaldab külastajal lugeda erinevates häältes ja keeltes. Iga hääl nõuab oma failipaari. PRTP kasutab närvihääli. Toetatud närvihäälte ja keelte loendi leiate artiklist Neuraalsed hääled. Amazon Polly standard- ja närvihäälte täieliku loendi leiate siit Hääled Amazon Pollys.
Käsitleme kahte tüüpi veebilehti: staatilisi ja dünaamilisi lehti. Sees staatiline lehel sisaldub sisu lehel ja see muutub ainult siis, kui avaldatakse lehe uus versioon. Ettevõte võib oma veebiehitusprotsessi osana lehte värskendada iga päev või kord nädalas. Seda tüüpi lehtede puhul on võimalik helifailid koostamisajal eelgenereerida ja taasesitamiseks veebiserverisse paigutada. Nagu järgmine joonis näitab, skript PRTP Pre-Gen
kutsub heli genereerimiseks välja Amazon Polly. See võtab sisendiks HTML-lehe enda ja valikuliselt konfiguratsioonifaili, mis määrab, millist teksti lehelt ekstraktida (Text Extract Config
). Kui ekstrakti konfiguratsioon jäetakse välja, teeb genereerimiseelne skript mõistliku tekstivaliku, mida lehe põhiosast eraldada. Amazon Polly väljastab failid an Amazoni lihtne salvestusteenus (Amazon S3) kopp; skript kopeerib need teie veebiserverisse. Kui külastaja esitab heli, laadib brauser MP3 otse veebiserverist alla. Esiletõstetud teegi, PRTP.js
, kasutab loetava teksti esiletõstmiseks märgifaili.
Sisu a dünaamiline leht muutub vastavalt külastaja suhtlusele, nii et heli ei saa eelnevalt genereerida, vaid see tuleb dünaamiliselt sünteesida. Nagu järgmine joonis näitab, kui külastaja esitab heli, kasutab leht PRTP.js
heli genereerimiseks Amazon Pollys ja tõstab sünteesitud heli esile, kasutades sama lähenemisviisi nagu staatiliste lehtede puhul. AWS-i teenustele brauserist juurdepääsemiseks vajab külastaja AWS-i identiteeti. Näitame, kuidas kasutada a Amazon Cognito identiteedikogum, et võimaldada külastajal heli esitamiseks piisavalt juurdepääsu Amazon Pollyle ja S3 ämbrile.
Nii MP3-heli- kui ka kõnemärkide genereerimiseks peab teenus Polly sünteesima sama sisendi kaks korda. Vaadake Amazon Polly hinnakujundusleht et mõista kulumõjusid. Eelgenereerimine säästab kulusid, sest süntees tehakse pigem ehituse ajal kui iga külastaja interaktsiooni nõudmisel.
Selle postitusega kaasnev kood on saadaval avatud lähtekoodiga hoidlana aadressil GitHub.
Lahenduse uurimiseks toimime järgmiselt.
- Seadistage ressursid, sealhulgas genereerimiseelne ehitusserver, S3 ämber, veebiserver ja Amazon Cognito identiteet.
- Käivitage staatiline genereerimiseelne ehitus ja testige staatilisi lehti.
- Testige dünaamilisi lehti.
Eeldused
Selle näite käivitamiseks vajate AWS-i konto loaga kasutada Amazon Polly, Amazon S3, Amazon Cognito ja (demoeesmärkidel) AWSi pilv.
Varustage ressursse
Jagame an AWS CloudFormation malli, et luua oma kontole iseseisev demokeskkond, mis aitab teil postitust jälgida. Kui eelistate seadistada PRTP-d oma keskkonnas, vaadake juhiseid README.md.
Demokeskkonna loomiseks CloudFormationi abil laadige esmalt alla selle koopia CloudFormationi mall. Seejärel tehke järgmised sammud.
- Valige AWS CloudFormationi konsoolil Loo virn.
- Vali Uute ressurssidega (standardne).
- valima Laadige üles mallifail.
- Vali Vali fail allalaaditud malli kohaliku koopia üleslaadimiseks. Faili nimi on
prtp.yml
. - Vali järgmine.
- Sisestage enda valitud virna nimi. Hiljem sisestate selle uuesti asendamiseks .
- Võite säilitada vaikeväärtused parameetrid sektsiooni.
- Vali järgmine.
- Jätkake ülejäänud jaotistega.
- Lugege läbi ja valige märkeruudud Võimed sektsiooni.
- Vali Loo virn.
- Kui virn on valmis, leidke väärtus
BucketName
pinu väljundites.
Soovitame teil enne selle tootmiskeskkonnas kasutamist virna oma turvameeskonnaga üle vaadata.
Seadistage veebiserver ja genereerimiseelne server AWS Cloud9 IDE-s
Järgmisena leidke AWS Cloud9 konsoolil keskkond PRTPDemoCloud9
loodud CloudFormationi virna poolt. Vali Avage IDE AWS Cloud9 keskkonna avamiseks. Avage terminaliaken ja käivitage järgmised käsud, mis kloonivad PRTP-koodi, seadistavad genereerimiseelsed sõltuvused ja käivitavad testimiseks veebiserveri:
eest , kasutage nime, mille andsite CloudFormationi virnale. Sest , määrake IP-aadresside vahemik, millel on juurdepääs veebiserverile. Oma kohaliku masina brauserile juurdepääsu piiramiseks leidke oma IP-aadress kasutades https://whatismyipaddress.com/ ja lisada /32
vahemiku täpsustamiseks. Näiteks kui teie IP on 10.2.3.4, use 10.2.3.4/32
. Server kuulab pordil 8080. Väljundis antakse avalik IP-aadress, mida server kuulab. Näiteks:
Testige staatilisi lehti
Liikuge brauseris aadressile PRTPStaticDefault.html
. (Kui kasutate demo, on URL http://<cloud9host>:8080/web/PRTPStaticDefault.html
, Kus on avalik IP-aadress, mille avastasite IDE seadistamisel.) Valige mängima ülaosas olevas helijuhtimisnupul. Kuulake heli ja vaadake tipphetki. Avastage juhtelemente, muutes kiirust, muutes hääli, peatades, edasi- ja tagasikerimise teel. Järgmine ekraanipilt näitab lehte; tekst "Jätab peidetud lõigu vahele" on esile tõstetud, kuna seda praegu loetakse.
Proovige sama jaoks PRTPStaticConfig.html
ja PRTPStaticCustom.html
. Tulemused on sarnased. Näiteks lugesid kõik kolm kassi foto alternatiivteksti (“Juhuslik kassipilt”). Kõik kolm loevad NE, NW, SE ja SW täissõnadena ("kirde", "loode", "kagu", "edela"), kasutades ära Amazon Polly leksikonid.
Pange tähele heli põhilisi erinevusi:
PRTPStaticDefault.html
loeb kogu lehe põhiteksti, sealhulgas allosas oleva kokkuvõtva osa sõnadega „Teie mõtted ühe sõnaga”, „Esita päring”, „Viimati värskendatud 1. aprill 2020” ja „Küsimused arendusmeeskonnale”.PRTPStaticConfig.html
jaPRTPStaticCustom.html
ärge lugege neid, sest need välistavad sõnaselgelt rehkenduse kõnesünteesist.PRTPStaticCustom.html
loeb QB enimmüüdud laud teistest erinevalt. See loeb ainult kolme esimest rida ja loeb iga rea rea numbrit. See kordab iga rea veerge.PRTPStaticCustom.html
kasutab tabeli lugemise kohandamiseks kohandatud teisendust. Teised lehed kasutavad tabeli vaikerenderdust.PRTPStaticCustom.html
loeb “Tom Bradyt” valjemini kui ülejäänud tekst. See kasutab kõnesünteesi märgistuskeelt (SSML)prosody
sildi Tom Brady lugemise kohandamiseks. Teised lehed ei ole sellisel viisil kohandatud.PRTPStaticCustom.html
tänu kohandatud teisendusele loeb põhipaanid NW, SW, NE, SE järjekorras; see tähendab, et seal on kirjas "Tänased artiklid", "Päeva tsitaat", "Päeva foto", "Päeva naljad". Teised lehed loetakse paanide loomulikus NW, NE, SW, SE järjekorras, nagu need on HTML-is: "Tänased artiklid", "Päeva foto", "Päeva tsitaat", "Päeva naljad". Päev."
Uurime sügavamalt, kuidas heli genereeritakse ja kuidas leht teksti esile tõstab.
Staatiline eelgeneraator
Meie GitHubi repo sisaldab eelgenereeritud helifaile PRPTStatic
lehekülgi, kuid kui soovite need ise luua, käivitage AWS Cloud9 IDE bash-shellist järgmised käsud:
Nüüd vaatame, kuidas need skriptid töötavad.
Vaikimisi juhtum
Alustame sellega gen_default.sh
:
Skript algab Pythoni programmi käivitamisega FixHTML.py
lähtekoodi HTML-faili loomiseks PRTPStaticDefault.html
hästi vormitud. See kirjutab faili hästi vormindatud versiooni example/tmp_wff.html
. See samm on ülioluline kahel põhjusel:
- Enamik lähte-HTML-i pole hästi vormitud. See samm parandab lähtekoodi HTML-i vorminguks. Näiteks paljud HTML-lehed ei sulgu
P
elemendid. See samm sulgeb need. - Jälgime, kust HTML-lehelt teksti leiame. Peame jälgima asukohti, kasutades sama dokumendiobjekti mudeli (DOM) struktuuri, mida brauser kasutab. Näiteks lisab brauser automaatselt a
TBODY
kuniTABLE
. Pythoni programm järgib samu hästi vormindatud parandusi nagu brauser.
gen_ssml.sh
võtab sisendiks hästi vormindatud HTML-i, rakendab sellele XML-laaditabeli teisenduse (XSLT) ja väljastab SSML-faili. (SSML on Amazon Polly keel, mille abil saab juhtida, kuidas tekstist heli renderdatakse.) Praeguses näites on sisend example/tmp_wff.html
. Väljund on example/tmp.ssml
. Teisenduse ülesanne on otsustada, milline tekst HTML-ist ekstraheerida ja Amazon Pollysse edastada. generic.xslt
on mõistlik XSLT vaiketeisendus enamiku veebilehtede jaoks. Järgmises koodilõigu näites välistab see helijuhtelemendi, HTML-i päise ja HTML-i elemendid, nagu script
ja form
. Samuti välistab see peidetud atribuudiga elemendid. See sisaldab elemente, mis tavaliselt sisaldavad teksti, nt P
, H1
ja SPAN
. Nende jaoks renderdab see nii märgi, sealhulgas elemendi täieliku XPath-avaldise, kui ka elemendi väärtuse.
Järgmine on renderdatava SSML-i fragment. See edastatakse sisendina Amazon Pollyle. Pange tähele, et näiteks teksti "Jätab vahele peidetud lõigu" tuleb lugeda helis ja me seostame selle märgiga, mis ütleb meile, et see tekst esineb XPathi avaldisega antud kohas lehel. /html/body[1]/div[2]/ul[1]/li[1]
.
Amazon Polly heli loomiseks kutsume skripti run_polly.sh
. See juhib AWS-i käsurea liides (AWS CLI) käsk aws polly start-speech-synthesis-task
kaks korda: üks kord MP3-heli genereerimiseks ja teine märgifaili genereerimiseks. Kuna genereerimine on asünkroonne, küsitleb skript seni, kuni see leiab määratud S3 ämbrist väljundi. Kui see väljundi leiab, laadib see alla ehitusserverisse ja kopeerib failid serverisse web/polly
kausta. Järgmine on veebikaustade loend:
- PRTPStaticDefault.html
- PRTPStaticConfig.html
- PRTPStaticCustom.html
- PRTP.js
- polly/PRTPStaticDefault/Joanna.mp3, Joanna.marks, Matthew.mp3, Matthew.marks
- polly/PRTPStaticConfig/Joanna.mp3, Joanna.marks, Matthew.mp3, Matthew.marks
- polly/PRTPStaticCustom/Joanna.mp3, Joanna.marks, Matthew.mp3, Matthew.marks
Igal lehel on oma häälespetsiifiliste MP3- ja märgifailide komplekt. Need failid on eelnevalt loodud failid. Leht ei pea käivitamise ajal Amazon Pollyt kutsuma; failid on osa veebiehitusest.
Konfiguratsioonipõhine ümbris
Järgmisena kaaluge gen_config.sh
:
Skript sarnaneb vaikejuhtumi skriptiga, kuid rasvased read näitavad peamist erinevust. Meie lähenemisviis on konfiguratsioonipõhine. Kohandame lehelt eraldatava sisu, määrates, mida ekstraktida konfiguratsiooni, mitte koodi kaudu. Eelkõige kasutame JSON-faili transform_config.json
, mis määrab, et kaasatav sisu on ID-ga elemendid title
, main
, maintable
ja qbtable
. ID-ga element wrapup
tuleks välistada. Vaadake järgmist koodi:
Käitame Pythoni programmi ModGenericXSLT.py
modifitseerima generic.xslt
, mida kasutatakse vaikejuhtumil, et kasutada meie poolt määratud kaasamisi ja välistusi transform_config.json
. Programm kirjutab tulemused ajutisse faili (example/tmp.xslt
), millele see edasi läheb gen_ssml.sh
selle XSLT teisendusena.
See on madala koodiga valik. Veebiväljaandja ei pea teadma, kuidas XSLT-d kirjutada. Kuid nad peavad mõistma HTML-lehe struktuuri ja selle peamistes korralduselementides kasutatavaid ID-sid.
Kohandamise juhtum
Lõpuks kaaluge gen_custom.sh
:
See skript on peaaegu identne vaikeskriptiga, välja arvatud see, et see kasutab oma XSLT-d.example/custom.xslt
— mitte üldine XSLT. Järgmine on XSLT väljavõte:
Kui soovite koodi üksikasjalikult uurida, vaadake GitHubi repos olevaid skripte ja programme.
Brauseri seadistamine ja esiletõstmised
Staatilised lehed sisaldavad HTML5 helijuhti, mille heliallikaks on Amazon Polly loodud MP3-fail, mis asub veebiserveris:
Laadimise ajal laadib leht ka Amazon Polly loodud märgifaili. See esineb PRTP.js
faili, mida HTML-leht sisaldab. Järgmine on väljavõte märkide failist PRTPStaticDefault
:
Heli taasesituse ajal on sees helitaimeri sündmuste käitleja PRTP.js
mis kontrollib heli praegust aega, leiab esiletõstmiseks vajaliku teksti, leiab selle asukoha lehel ja tõstab selle esile. Esiletõstetav tekst on tüüpi kirje sentence
märkide failis. Asukoht on lausele eelneva SSML-tüüpi kirje nimeatribuudis XPathi avaldis. Näiteks kui kellaaeg on 18400, siis vastavalt punktide failile tuleb esile tõsta lause "Jätab vahele peidetud lõigu", mis algab 18334-st. Asukoht on SSML-kirje ajal 17667: /html/body[1]/div[2]/ul[1]/li[1]
.
Testige dünaamilisi lehti
Lehekülg PRTPDynamic.html
demonstreerib dünaamilist heli lugemist, kasutades vaikimisi, konfiguratsioonipõhist ja kohandatud heli eraldamise lähenemisviise.
Vaikimisi juhtum
Liikuge brauseris aadressile PRTPDynamic.html
. Lehel on üks päringu parameeter, dynOption
, mis aktsepteerib väärtusi default
, config
ja custom
. Vaikimisi on see default
, nii et võite selle sel juhul ära jätta. Lehel on kaks dünaamilise sisuga jaotist:
- Viimased artiklid - Muutub sageli kogu päeva jooksul
- Kreeka filosoofid otsivad kuupäeva järgi – Võimaldab külastajal otsida Kreeka filosoofe kuupäeva järgi ja kuvab tulemused tabelis
Loo sisu Kreeka filosoof sisestades kuupäevavahemiku -800 kuni 0, nagu on näidatud näites. Seejärel vali leidma.
Nüüd esitage heli, valides mängima helijuhtimispuldis.
Kulisside taga käitab leht heli renderdamiseks ja esitamiseks järgmist koodi:
Esiteks kutsub see funktsiooni välja buildSSMLFromDefault
in PRTP.js
et eraldada suurem osa tekstist HTML-lehe kehast. See funktsioon liigub mööda DOM-puud, otsides teksti ühistes elementides, näiteks p
, h1
, pre
, span
ja td
. See ignoreerib teksti elementides, mis tavaliselt ei sisalda ettelugetavat teksti, näiteks audio
, option
ja script
. See loob SSML-i märgistuse, mis sisestatakse Amazon Pollysse. Järgmine on väljavõte, mis näitab esimese rea ekstraheerimist philosopher
tabelis:
. chooseRenderAudio
funktsiooni sisse PRTP.js
algab AWS SDK initsialiseerimisega Amazon Cognito, Amazon S3 ja Amazon Polly jaoks. See lähtestamine toimub ainult üks kord. Kui chooseRenderAudio
kutsutakse uuesti välja, kuna lehe sisu on muutunud, initsialiseerimine jäetakse vahele. Vaadake järgmist koodi:
See genereerib Amazon Polly MP3-heli. Genereerimine on sünkroonne väikeste SSML-sisendite jaoks ja asünkroonne (väljundiga, mis saadetakse S3 ämbrisse) suurte SSML-sisendite jaoks (üle 6,000 tähemärgi). Sünkroonsel juhul palume Amazon Pollyl esitada MP3-fail, kasutades eelnevalt allkirjastatud URL-i. Kui sünteesitud väljund on valmis, määrame src
helijuhtelemendi atribuut sellele URL-ile ja laadige juhtelement. Seejärel taotleme märgifaili ja laadime selle samamoodi nagu staatilisel juhul. Vaadake järgmist koodi:
Konfiguratsioonipõhine ümbris
Liikuge brauseris aadressile PRTPDynamic.html?dynOption=config
. Esitage heli. Heli taasesitus sarnaneb vaikejuhtumiga, kuid esineb väiksemaid erinevusi. Eelkõige jäetakse mõni sisu vahele.
Kulisside taga, kui kasutate config
suvandi korral eraldab leht sisu teisiti kui vaikejuhtumi korral. Vaikimisi kasutab leht buildSSMLFromDefault
. Konfiguratsioonipõhisel juhul määrab leht jaotised, mida ta soovib kaasata ja välistada:
. buildSSMLFromConfig
funktsioon, määratletud PRTP.js
, kõnnib DOM-i puu igas jaotises, mille ID on esitatud inclusions
. See eraldab igaühest sisu ja kombineerib need määratud järjekorras kokku, et moodustada SSML-dokument. See ei hõlma all nimetatud jaotisi exclusions
. See eraldab sisu igast jaotisest samal viisil buildSSMLFromDefault
eraldab sisu lehe kehast.
Kohandamise juhtum
Liikuge brauseris aadressile PRTPDynamic.html?dynOption=custom
. Esitage heli. On kolm märgatavat erinevust. Pangem need tähele ja kaaluge kulisside taga töötavat kohandatud koodi:
- See loeb põhiplaate NW, SW, NE, SE järjekorras. Kohandatud kood hangib kõik need lahtriplokid aadressilt
maintable
ja lisab need SSML-i NW, SW, NE, SE järjekorras:
- "Tom Brady" räägitakse valjult. Kohandatud kood lisab SSML-i teksti "Tom Brady".
prosody
silt:
- See loeb ainult tagamängija tabeli kolme esimest rida. See loeb iga rea veerupäised. Kontrollige GitHubi repos olevat koodi, et teada saada, kuidas seda rakendatakse.
Koristage
Tulevaste tasude vältimiseks kustutage CloudFormationi virn.
Järeldus
Selles postituses demonstreerisime tehnilist lahendust suure väärtusega äriprobleemile: kuidas kasutada Amazon Pollyt veebilehe sisu lugemiseks ja lugemise ajal sisu esiletõstmiseks. Näitasime seda nii staatiliste kui ka dünaamiliste lehtede abil. Lehelt sisu eraldamiseks kasutasime DOM-i läbimist ja XSLT-d. Esiletõstmise hõlbustamiseks kasutasime Amazon Polly kõnemärkide võimalust.
Lisateavet Amazon Polly kohta leiate selle veebisaidilt teenuse leht.
Küsige julgelt küsimusi kommentaarides.
Autoritest
Mike Havey on AWS-i lahenduste arhitekt, kellel on üle 25-aastane kogemus ettevõtete rakenduste loomisel. Mike on kahe raamatu ja paljude artiklite autor. Külastage tema Amazoni autori leht lugema rohkem.
Vineet Kachhawaha on AWS-i lahenduste arhitekt, kellel on masinõppe alased teadmised. Ta vastutab selle eest, et aidata klientidel luua AWS-is skaleeritavaid, turvalisi ja kulutõhusaid töökoormusi.
- kättesaadavus
- AI
- ai kunst
- ai kunsti generaator
- on robot
- Amazon Polly
- tehisintellekti
- tehisintellekti sertifikaat
- tehisintellekt panganduses
- tehisintellekti robot
- tehisintellekti robotid
- tehisintellekti tarkvara
- heli-
- AWS
- AWS-i masinõpe
- blockchain
- plokiahela konverents ai
- coingenius
- vestluslik tehisintellekt
- krüptokonverents ai
- dall's
- sügav õpe
- DOM
- google ai
- Esile tõstma
- esiletõstmine
- HTML
- JavaScript
- masinõpe
- Platon
- plato ai
- Platoni andmete intelligentsus
- Platoni mäng
- PlatoData
- platogaming
- skaala ai
- süntaks
- Tekst kõneks
- XSLT
- sephyrnet