Dalam posting ini, kami menunjukkan cara menggunakan Amazon Polly—layanan cloud terkemuka yang mengubah teks menjadi ucapan yang nyata—untuk membaca konten halaman web dan menyorot konten saat sedang dibaca. Menambahkan pemutaran audio ke halaman web meningkatkan aksesibilitas dan pengalaman pengunjung halaman. Konten yang disempurnakan dengan audio lebih berdampak dan mudah diingat, menarik lebih banyak lalu lintas ke halaman, dan memanfaatkan daya beli pengunjung. Ini juga meningkatkan merek perusahaan atau organisasi yang menerbitkan halaman tersebut. Teknologi text-to-speech membuat keuntungan bisnis ini dapat dicapai. Kami mempercepat perjalanan itu dengan mendemonstrasikan cara mencapai tujuan ini menggunakan Amazon Polly.
Kemampuan ini meningkatkan aksesibilitas bagi pengunjung penyandang disabilitas, dan dapat diadopsi sebagai bagian dari strategi aksesibilitas organisasi Anda. Sama pentingnya, ini meningkatkan pengalaman halaman bagi pengunjung tanpa disabilitas. Kedua kelompok memiliki daya beli yang signifikan dan menghabiskan lebih bebas dari halaman yang menggunakan peningkatan audio untuk menarik perhatian mereka.
Ikhtisar solusi
PollyReadsThePage
(PRTP)—seperti yang kami rujuk ke solusi—memungkinkan penerbit halaman web untuk menjatuhkan kontrol audio ke halaman web mereka. Ketika pengunjung memilih Bermain pada kontrol, kontrol membaca halaman dan menyoroti konten. PRTP menggunakan kemampuan umum Amazon Polly untuk mensintesis ucapan dari teks. Ini memanggil Amazon Polly untuk menghasilkan dua artefak untuk setiap halaman:
- Konten audio dalam format yang dapat diputar oleh browser: MP3
- File tanda ucapan yang menunjukkan untuk setiap kalimat teks:
- Waktu selama pemutaran kalimat dibaca
- Lokasi di halaman kalimat itu muncul
Ketika pengunjung memilih Bermain, browser memutar file MP3. Saat audio dibaca, browser memeriksa waktu, menemukan dalam file tanda kalimat mana yang harus dibaca pada saat itu, menempatkannya di halaman, dan menyorotnya.
PRTP memungkinkan pengunjung membaca dengan suara dan bahasa yang berbeda. Setiap suara membutuhkan pasangan filenya sendiri. PRTP menggunakan suara saraf. Untuk daftar suara dan bahasa saraf yang didukung, lihat Suara Neural. Untuk daftar lengkap suara standar dan neural di Amazon Polly, lihat Suara di Amazon Polly.
Kami mempertimbangkan dua jenis halaman web: halaman statis dan dinamis. Di sebuah statis halaman, konten terkandung di dalam halaman dan hanya berubah ketika versi baru halaman diterbitkan. Perusahaan mungkin memperbarui halaman setiap hari atau setiap minggu sebagai bagian dari proses pembuatan webnya. Untuk jenis halaman ini, dimungkinkan untuk membuat file audio terlebih dahulu pada waktu pembuatan dan menempatkannya di server web untuk pemutaran. Seperti yang ditunjukkan gambar berikut, skrip PRTP Pre-Gen
memanggil Amazon Polly untuk menghasilkan audio. Dibutuhkan sebagai input halaman HTML itu sendiri dan, secara opsional, file konfigurasi yang menentukan teks mana dari halaman yang akan diekstrak (Text Extract Config
). Jika konfigurasi ekstrak dihilangkan, skrip pra-gen membuat pilihan teks yang masuk akal untuk diekstrak dari badan halaman. Amazon Polly mengeluarkan file dalam bentuk Layanan Penyimpanan Sederhana Amazon (Amazon S3) ember; skrip menyalinnya ke server web Anda. Saat pengunjung memutar audio, browser mengunduh MP3 langsung dari server web. Untuk sorotan, perpustakaan drop-in, PRTP.js
, menggunakan file tanda untuk menyorot teks yang sedang dibaca.
Isi dari dinamis halaman berubah sebagai respons terhadap interaksi pengunjung, jadi audio tidak dapat dibuat sebelumnya tetapi harus disintesis secara dinamis. Seperti yang ditunjukkan gambar berikut, ketika pengunjung memutar audio, halaman menggunakan PRTP.js
untuk menghasilkan audio di Amazon Polly, dan menyoroti audio yang disintesis menggunakan pendekatan yang sama seperti dengan halaman statis. Untuk mengakses layanan AWS dari browser, pengunjung memerlukan identitas AWS. Kami menunjukkan cara menggunakan Amazon Kognito kumpulan identitas untuk memungkinkan pengunjung cukup mengakses Amazon Polly dan bucket S3 untuk merender audio.
Menghasilkan audio Mp3 dan tanda ucapan memerlukan layanan Polly untuk mensintesis input yang sama dua kali. Mengacu kepada Halaman Harga Amazon Polly untuk memahami implikasi biaya. Pra-generasi menghemat biaya karena sintesis dilakukan pada waktu pembuatan dan bukan berdasarkan permintaan untuk setiap interaksi pengunjung.
Kode yang menyertai posting ini tersedia sebagai repositori open-source di GitHub.
Untuk menjelajahi solusinya, kami mengikuti langkah-langkah ini:
- Siapkan sumber daya, termasuk server build pra-gen, bucket S3, server web, dan identitas Amazon Cognito.
- Jalankan static pre-gen build dan uji halaman statis.
- Uji halaman dinamis.
Prasyarat
Untuk menjalankan contoh ini, Anda memerlukan sebuah Akun AWS dengan izin untuk menggunakan Amazon Polly, Amazon S3, Amazon Cognito, dan (untuk tujuan demo) AWS Cloud9.
Sumber daya penyediaan
Kami berbagi Formasi AWS Cloud template untuk membuat di akun Anda lingkungan demo mandiri untuk membantu Anda mengikuti postingan. Jika Anda lebih suka mengatur PRTP di lingkungan Anda sendiri, lihat petunjuk di README.md.
Untuk menyediakan lingkungan demo menggunakan CloudFormation, pertama-tama unduh salinan dari Templat CloudFormation. Kemudian selesaikan langkah-langkah berikut:
- Pada konsol AWS CloudFormation, pilih Buat tumpukan.
- Pilih Dengan sumber daya baru (standar).
- Pilih Unggah file templat.
- Pilih Pilih File untuk mengunggah salinan lokal dari template yang Anda unduh. Nama filenya adalah
prtp.yml
. - Pilih Selanjutnya.
- Masukkan nama tumpukan yang Anda pilih. Nanti kamu masukkan ini lagi sebagai pengganti .
- Anda dapat menyimpan nilai default di parameter bagian.
- Pilih Selanjutnya.
- Lanjutkan melalui bagian yang tersisa.
- Baca dan pilih kotak centang di Kemampuan bagian.
- Pilih Buat tumpukan.
- Ketika tumpukan selesai, cari nilai untuk
BucketName
dalam keluaran tumpukan.
Kami mendorong Anda untuk meninjau tumpukan dengan tim keamanan Anda sebelum menggunakannya di lingkungan produksi.
Siapkan server web dan server pra-gen di AWS Cloud9 IDE
Selanjutnya, di konsol AWS Cloud9, temukan lingkungan PRTPDemoCloud9
dibuat oleh tumpukan CloudFormation. Memilih Buka IDE untuk membuka lingkungan AWS Cloud9. Buka jendela terminal dan jalankan perintah berikut, yang mengkloning kode PRTP, menyiapkan dependensi pra-gen, dan memulai server web untuk diuji dengan:
Untuk , gunakan nama yang Anda berikan pada tumpukan CloudFormation. Untuk , tentukan rentang alamat IP yang diizinkan untuk mengakses server web. Untuk membatasi akses ke browser di mesin lokal Anda, temukan alamat IP Anda menggunakan https://whatismyipaddress.com/ dan tambahkan /32
untuk menentukan rentang. Misalnya, jika IP Anda adalah 10.2.3.4, use 10.2.3.4/32
. Server mendengarkan pada port 8080. Alamat IP publik tempat server mendengarkan diberikan dalam output. Sebagai contoh:
Uji halaman statis
Di browser Anda, navigasikan ke PRTPStaticDefault.html
. (Jika Anda menggunakan demo, URL-nya adalah http://<cloud9host>:8080/web/PRTPStaticDefault.html
, Di mana adalah alamat IP publik yang Anda temukan saat menyiapkan IDE.) Pilih Bermain pada kontrol audio di bagian atas. Dengarkan audio dan tonton sorotannya. Jelajahi kontrol dengan mengubah kecepatan, mengubah suara, menjeda, memajukan cepat, dan memutar ulang. Tangkapan layar berikut menunjukkan halaman; teks "Lewati paragraf tersembunyi" disorot karena sedang dibaca.
Coba hal yang sama untuk PRTPStaticConfig.html
dan PRTPStaticCustom.html
. Hasilnya serupa. Misalnya, ketiganya membaca teks alt untuk foto kucing (“Gambar kucing acak”). Ketiganya membaca NE, NW, SE, dan SW sebagai kata lengkap (“timur laut,” “barat laut,” “tenggara,” “barat daya”), memanfaatkan leksikon Amazon Polly.
Perhatikan perbedaan utama dalam audio:
PRTPStaticDefault.html
membaca semua teks di badan halaman, termasuk bagian penutup di bagian bawah dengan "Pikiran Anda dalam satu kata", "Kirim Permintaan", "Terakhir diperbarui 1 April 2020", dan "Pertanyaan untuk tim pengembang".PRTPStaticConfig.html
danPRTPStaticCustom.html
jangan baca ini karena mereka secara eksplisit mengecualikan penutup dari sintesis ucapan.PRTPStaticCustom.html
membaca Penjual Terbaik QB meja yang berbeda dari yang lain. Itu membaca tiga baris pertama saja, dan membaca nomor baris untuk setiap baris. Ini mengulangi kolom untuk setiap baris.PRTPStaticCustom.html
menggunakan transformasi khusus untuk menyesuaikan pembacaan tabel. Halaman lain menggunakan rendering tabel default.PRTPStaticCustom.html
membaca "Tom Brady" dengan volume yang lebih keras daripada teks lainnya. Ini menggunakan bahasa markup sintesis ucapan (SSML)prosody
tag untuk menyesuaikan pembacaan Tom Brady. Halaman lain tidak menyesuaikan dengan cara ini.PRTPStaticCustom.html
, berkat transformasi khusus, membaca ubin utama dalam urutan NW, SW, NE, SE; yaitu, berbunyi "Artikel Hari Ini," "Kutipan Hari Ini," "Foto Hari Ini," "Lelucon Hari Ini." Halaman-halaman lain membaca dalam urutan ubin muncul dalam urutan NW, NE, SW, SE alami mereka muncul dalam HTML: “Artikel Hari Ini,” “Foto Hari Ini,” “Kutipan Hari Ini,” “Lelucon Hari Ini Hari."
Mari gali lebih dalam bagaimana audio dihasilkan, dan bagaimana halaman menyoroti teks.
Pra-generator statis
Repo GitHub kami menyertakan file audio yang dibuat sebelumnya untuk PRPTStatic
halaman, tetapi jika Anda ingin membuatnya sendiri, dari bash shell di AWS Cloud9 IDE, jalankan perintah berikut:
Sekarang mari kita lihat bagaimana skrip tersebut bekerja.
Kasus default
Kami mulai dengan gen_default.sh
:
Script dimulai dengan menjalankan program Python FixHTML.py
untuk membuat file HTML sumber PRTPStaticDefault.html
terbentuk dengan baik. Itu menulis versi file yang terbentuk dengan baik ke example/tmp_wff.html
. Langkah ini sangat penting karena dua alasan:
- Sebagian besar HTML sumber tidak terbentuk dengan baik. Langkah ini memperbaiki source HTML agar terbentuk dengan baik. Misalnya, banyak halaman HTML tidak dapat ditutup
P
elemen. Langkah ini menutup mereka. - Kami melacak di mana di halaman HTML kami menemukan teks. Kita perlu melacak lokasi menggunakan struktur model objek dokumen (DOM) yang sama dengan yang digunakan browser. Misalnya, browser secara otomatis menambahkan
TBODY
keTABLE
. Program Python mengikuti perbaikan yang dibuat dengan baik seperti browser.
gen_ssml.sh
mengambil HTML yang terbentuk dengan baik sebagai input, menerapkan transformasi XML stylesheet transformation (XSLT) padanya, dan mengeluarkan file SSML. (SSML adalah bahasa di Amazon Polly untuk mengontrol bagaimana audio dirender dari teks.) Dalam contoh saat ini, inputnya adalah example/tmp_wff.html
. Keluarannya adalah example/tmp.ssml
. Tugas transformasi adalah memutuskan teks apa yang akan diekstrak dari HTML dan dimasukkan ke Amazon Polly. generic.xslt
adalah transformasi XSLT default yang masuk akal untuk sebagian besar halaman web. Dalam cuplikan kode contoh berikut, tidak termasuk kontrol audio, header HTML, serta elemen HTML seperti script
dan form
. Itu juga mengecualikan elemen dengan atribut tersembunyi. Ini mencakup elemen yang biasanya berisi teks, seperti P
, H1
, dan SPAN
. Untuk ini, itu membuat tanda, termasuk ekspresi XPath lengkap dari elemen, dan nilai elemen.
Berikut ini adalah cuplikan SSML yang di-render. Ini dimasukkan sebagai masukan ke Amazon Polly. Perhatikan, misalnya, bahwa teks "Lewati paragraf tersembunyi" harus dibaca di audio, dan kami mengaitkannya dengan tanda, yang memberi tahu kami bahwa teks ini muncul di lokasi pada halaman yang diberikan oleh ekspresi XPath /html/body[1]/div[2]/ul[1]/li[1]
.
Untuk menghasilkan audio di Amazon Polly, kami memanggil skrip run_polly.sh
. Ini menjalankan Antarmuka Baris Perintah AWS (AWS CLI) perintah aws polly start-speech-synthesis-task
dua kali: sekali untuk menghasilkan audio MP3, dan sekali lagi untuk menghasilkan file tanda. Karena pembuatannya tidak sinkron, skrip melakukan polling hingga menemukan output di bucket S3 yang ditentukan. Ketika menemukan output, download ke server build dan menyalin file ke web/polly
map. Berikut ini adalah daftar folder web:
- 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
Setiap halaman memiliki kumpulan MP3 khusus suara dan file tanda. File-file ini adalah file yang dibuat sebelumnya. Halaman tidak perlu memanggil Amazon Polly saat runtime; file adalah bagian dari web build.
Kasing yang digerakkan oleh konfigurasi
Selanjutnya, pertimbangkan gen_config.sh
:
Skripnya mirip dengan skrip dalam kasus default, tetapi garis tebal menunjukkan perbedaan utama. Pendekatan kami didorong oleh konfigurasi. Kami menyesuaikan konten yang akan diekstraksi dari halaman dengan menentukan apa yang akan diekstraksi melalui konfigurasi, bukan kode. Secara khusus, kami menggunakan file JSON transform_config.json
, yang menetapkan bahwa konten yang akan disertakan adalah elemen dengan ID title
, main
, maintable
, dan qbtable
. Elemen dengan ID wrapup
harus dikecualikan. Lihat kode berikut:
Kami menjalankan program Python ModGenericXSLT.py
untuk mengubah generic.xslt
, digunakan dalam kasus default, untuk menggunakan inklusi dan pengecualian yang kami tentukan di transform_config.json
. Program menulis hasilnya ke file temp (example/tmp.xslt
), yang diteruskan ke gen_ssml.sh
sebagai transformasi XSLT-nya.
Ini adalah opsi kode rendah. Penerbit web tidak perlu tahu cara menulis XSLT. Tetapi mereka perlu memahami struktur halaman HTML dan ID yang digunakan dalam elemen pengorganisasian utamanya.
Kasus kustomisasi
Akhirnya, pertimbangkan gen_custom.sh
:
Skrip ini hampir identik dengan skrip default, kecuali skrip ini menggunakan XSLT-nya sendiri—example/custom.xslt
—bukan XSLT generik. Berikut ini adalah cuplikan dari XSLT:
Jika Anda ingin mempelajari kode secara detail, lihat skrip dan program di repo GitHub.
Pengaturan dan sorotan browser
Halaman statis menyertakan kontrol audio HTML5, yang mengambil sebagai sumber audio file MP3 yang dihasilkan oleh Amazon Polly dan berada di server web:
Saat memuat, halaman juga memuat file tanda yang dihasilkan Amazon Polly. Ini terjadi di PRTP.js
file, yang termasuk halaman HTML. Berikut ini adalah cuplikan dari file tanda untuk PRTPStaticDefault
:
Selama pemutaran audio, ada pengatur acara pengatur waktu audio di PRTP.js
yang memeriksa waktu audio saat ini, menemukan teks untuk disorot, menemukan lokasinya di halaman, dan menyorotnya. Teks yang akan disorot adalah entri tipe sentence
dalam file tanda. Lokasi adalah ekspresi XPath pada atribut name dari entri tipe SSML yang mendahului kalimat. Misalnya, jika waktunya 18400, menurut file tanda, kalimat yang akan disorot adalah "Lewati paragraf tersembunyi", yang dimulai pada 18334. Lokasi adalah entri SSML pada waktu 17667: /html/body[1]/div[2]/ul[1]/li[1]
.
Uji halaman dinamis
Halaman PRTPDynamic.html
mendemonstrasikan pembacaan ulang audio dinamis menggunakan pendekatan ekstraksi audio default, berbasis konfigurasi, dan kustom.
Kasus default
Di browser Anda, navigasikan ke PRTPDynamic.html
. Halaman memiliki satu parameter kueri, dynOption
, yang menerima nilai default
, config
, dan custom
. Ini default untuk default
, jadi Anda dapat menghilangkannya dalam kasus ini. Halaman ini memiliki dua bagian dengan konten dinamis:
- Artikel Terbaru – Sering berubah sepanjang hari
- Filsuf Yunani Cari Berdasarkan Tanggal – Memungkinkan pengunjung untuk mencari filsuf Yunani berdasarkan tanggal dan menunjukkan hasilnya dalam tabel
Buat beberapa konten di Filsuf Yunani dengan memasukkan rentang tanggal -800 hingga 0, seperti yang ditunjukkan pada contoh. Lalu pilih Menemukan.
Sekarang putar audio dengan memilih Bermain dalam kontrol audio.
Di balik layar, halaman menjalankan kode berikut untuk merender dan memutar audio:
Pertama itu memanggil fungsi buildSSMLFromDefault
in PRTP.js
untuk mengekstrak sebagian besar teks dari badan halaman HTML. Fungsi itu berjalan di pohon DOM, mencari teks dalam elemen umum seperti p
, h1
, pre
, span
, dan td
. Itu mengabaikan teks dalam elemen yang biasanya tidak berisi teks untuk dibacakan, seperti audio
, option
, dan script
. Itu membangun markup SSML untuk dimasukkan ke Amazon Polly. Berikut ini adalah cuplikan yang menunjukkan ekstraksi baris pertama dari philosopher
meja:
Grafik chooseRenderAudio
fungsi di PRTP.js
dimulai dengan menginisialisasi AWS SDK untuk Amazon Cognito, Amazon S3, dan Amazon Polly. Inisialisasi ini hanya terjadi sekali. Jika chooseRenderAudio
dipanggil lagi karena konten halaman telah berubah, inisialisasi dilewati. Lihat kode berikut:
Ini menghasilkan audio MP3 dari Amazon Polly. Pembuatan sinkron untuk input SSML kecil dan asinkron (dengan output dikirim ke bucket S3) untuk input SSML besar (lebih dari 6,000 karakter). Dalam kasus sinkron, kami meminta Amazon Polly untuk menyediakan file MP3 menggunakan URL yang telah ditentukan sebelumnya. Ketika output yang disintesis sudah siap, kami mengatur src
atribut kontrol audio ke URL itu dan memuat kontrol. Kami kemudian meminta file tanda dan memuatnya dengan cara yang sama seperti dalam kasus statis. Lihat kode berikut:
Kasing yang digerakkan oleh konfigurasi
Di browser Anda, navigasikan ke PRTPDynamic.html?dynOption=config
. Putar audionya. Pemutaran audio mirip dengan kasus default, tetapi ada perbedaan kecil. Secara khusus, beberapa konten dilewati.
Di balik layar, saat menggunakan config
pilihan, halaman mengekstrak konten secara berbeda dari dalam kasus default. Dalam kasus default, halaman menggunakan buildSSMLFromDefault
. Dalam kasus yang digerakkan oleh konfigurasi, halaman menentukan bagian yang ingin disertakan dan dikecualikan:
Grafik buildSSMLFromConfig
fungsi, didefinisikan dalam PRTP.js
, berjalan di pohon DOM di setiap bagian yang ID-nya disediakan di bawah inclusions
. Ini mengekstrak konten dari masing-masing dan menggabungkannya bersama-sama, dalam urutan yang ditentukan, untuk membentuk dokumen SSML. Ini tidak termasuk bagian yang ditentukan di bawah exclusions
. Ini mengekstrak konten dari setiap bagian dengan cara yang sama buildSSMLFromDefault
mengekstrak konten dari badan halaman.
Kasus kustomisasi
Di browser Anda, navigasikan ke PRTPDynamic.html?dynOption=custom
. Putar audionya. Ada tiga perbedaan mencolok. Mari kita perhatikan ini dan pertimbangkan kode khusus yang berjalan di belakang layar:
- Bunyinya ubin utama di NW, SW, NE, SE urutan. Kode khusus mendapatkan masing-masing blok sel ini dari
maintable
dan menambahkannya ke SSML dalam urutan NW, SW, NE, SE:
- "Tom Brady" diucapkan dengan keras. Kode kustom menempatkan teks "Tom Brady" di dalam SSML
prosody
menandai:
- Itu hanya membaca tiga baris pertama dari tabel quarterback. Itu membaca tajuk kolom untuk setiap baris. Periksa kode di repo GitHub untuk mengetahui bagaimana ini diterapkan.
Membersihkan
Untuk menghindari timbulnya biaya di masa mendatang, hapus tumpukan CloudFormation.
Kesimpulan
Dalam posting ini, kami mendemonstrasikan solusi teknis untuk masalah bisnis bernilai tinggi: cara menggunakan Amazon Polly untuk membaca konten halaman web dan menyorot konten saat sedang dibaca. Kami menunjukkan ini menggunakan halaman statis dan dinamis. Untuk mengekstrak konten dari halaman, kami menggunakan DOM traversal dan XSLT. Untuk memfasilitasi penyorotan, kami menggunakan kemampuan tanda ucapan di Amazon Polly.
Pelajari lebih lanjut tentang Amazon Polly dengan mengunjungi halaman layanan.
Jangan ragu untuk mengajukan pertanyaan di komentar.
Tentang penulis
Mike Havey adalah Arsitek Solusi untuk AWS dengan pengalaman lebih dari 25 tahun dalam membangun aplikasi perusahaan. Mike adalah penulis dua buku dan banyak artikel. Kunjungi Amazonnya halaman penulis untuk membaca lebih lanjut.
Vineet Kachhawaha adalah Arsitek Solusi di AWS dengan keahlian dalam pembelajaran mesin. Dia bertanggung jawab untuk membantu pelanggan merancang beban kerja yang skalabel, aman, dan hemat biaya di AWS.
- aksesibilitas
- AI
- ai seni
- generator seni ai
- punya robot
- Amazon Polly
- kecerdasan buatan
- sertifikasi kecerdasan buatan
- kecerdasan buatan dalam perbankan
- robot kecerdasan buatan
- robot kecerdasan buatan
- perangkat lunak kecerdasan buatan
- audio
- AWS
- Pembelajaran Mesin AWS
- blockchain
- konferensi blockchain
- kecerdasan
- kecerdasan buatan percakapan
- konferensi kripto
- dall's
- belajar mendalam
- PENGHAKIMAN
- google itu
- Menyoroti
- menyoroti
- HTML
- JavaScript
- Mesin belajar
- plato
- plato ai
- Kecerdasan Data Plato
- Permainan Plato
- Data Plato
- permainan plato
- skala ai
- sintaksis
- Text-to-Speech
- XSLT
- zephyrnet.dll