Logo Zephyrnet

Đánh dấu văn bản khi nó đang được đọc bằng Amazon Polly | Dịch vụ web của Amazon

Ngày:

Amazon Polly là một dịch vụ biến văn bản thành lời nói sống động như thật. Nó cho phép phát triển cả một lớp ứng dụng có thể chuyển đổi văn bản thành giọng nói bằng nhiều ngôn ngữ.

Dịch vụ này có thể được sử dụng bởi chatbot, sách nói và các ứng dụng chuyển văn bản thành giọng nói khác cùng với các dịch vụ AI hoặc máy học (ML) AWS khác. Ví dụ, Amazon và Amazon Polly có thể được kết hợp để tạo ra một chatbot tham gia vào cuộc trò chuyện hai chiều với người dùng và thực hiện một số tác vụ nhất định dựa trên mệnh lệnh của người dùng. Phiên âm Amazon, Amazon Dịchvà Amazon Polly có thể được kết hợp để chuyển lời nói thành văn bản bằng ngôn ngữ nguồn, dịch sang ngôn ngữ khác và nói ngôn ngữ đó.

Trong bài đăng này, chúng tôi trình bày một cách tiếp cận thú vị để làm nổi bật văn bản khi nó được nói bằng Amazon Polly. Giải pháp này có thể được sử dụng trong nhiều ứng dụng chuyển văn bản thành giọng nói để thực hiện những việc sau:

  • Thêm khả năng trực quan vào âm thanh trong sách, trang web và blog
  • Tăng khả năng hiểu khi khách hàng đang cố gắng hiểu văn bản nhanh chóng khi nó được nói

Giải pháp của chúng tôi cung cấp cho khách hàng (trình duyệt, trong ví dụ này), khả năng biết văn bản (từ hoặc câu) nào đang được Amazon Polly đọc bất cứ lúc nào. Điều này cho phép khách hàng tự động đánh dấu văn bản khi nó đang được đọc. Khả năng như vậy rất hữu ích để cung cấp hỗ trợ trực quan cho lời nói cho các trường hợp sử dụng đã đề cập trước đó.

Giải pháp của chúng tôi có thể được mở rộng để thực hiện các tác vụ bổ sung ngoài việc đánh dấu văn bản. Ví dụ: trình duyệt có thể hiển thị hình ảnh, phát nhạc hoặc thực hiện các hoạt ảnh khác ở giao diện người dùng khi văn bản đang được đọc. Khả năng này rất hữu ích để tạo sách âm thanh động, nội dung giáo dục và các ứng dụng chuyển văn bản thành giọng nói phong phú hơn.

Tổng quan về giải pháp

Về cốt lõi, giải pháp sử dụng Amazon Polly để chuyển đổi một chuỗi văn bản thành giọng nói. Văn bản có thể được nhập từ trình duyệt hoặc thông qua một lệnh gọi API đến điểm cuối do giải pháp của chúng tôi cung cấp. Bài phát biểu do Amazon Polly tạo được lưu trữ dưới dạng tệp âm thanh (định dạng MP3) ở định dạng Dịch vụ lưu trữ đơn giản của Amazon (Amazon S3) xô.

Tuy nhiên, khi chỉ sử dụng tệp âm thanh, trình duyệt không thể tìm thấy phần nào của văn bản đang được đọc ngay lập tức vì chúng tôi không có thông tin chi tiết về thời điểm mỗi từ được đọc.

Amazon Polly cung cấp một cách để có được điều này bằng cách sử dụng dấu giọng nói. Dấu giọng nói được lưu trữ trong một tệp văn bản hiển thị thời gian (được tính bằng mili giây kể từ khi bắt đầu âm thanh) khi mỗi từ hoặc câu được nói.

Amazon Polly trả về đối tượng dấu giọng nói trong luồng JSON được phân tách bằng dòng. Đối tượng dấu giọng nói chứa các trường sau:

  • Thời gian - Dấu thời gian tính bằng mili giây kể từ đầu luồng âm thanh tương ứng
  • Kiểu - Loại dấu giọng nói (câu, từ, viseme hoặc SSML)
  • Bắt đầu - Độ lệch tính bằng byte (không phải ký tự) của phần bắt đầu đối tượng trong văn bản đầu vào (không bao gồm dấu viseme)
  • Kết thúc - Phần bù theo byte (không phải ký tự) của phần cuối đối tượng trong văn bản đầu vào (không bao gồm dấu viseme)
  • Giá trị – Điều này khác nhau tùy thuộc vào loại dấu hiệu lời nói:
    • SSML – thẻ SSML
    • nước sốt – Tên gọi
    • Word hoặc kết án – Một chuỗi con của văn bản đầu vào được phân cách bởi các trường bắt đầu và kết thúc

Ví dụ: câu “Mary had a little lamb” có thể cung cấp cho bạn tệp dấu hiệu lời nói sau nếu bạn sử dụng SpeechMarkTypes = [“word”, “sentence”] trong lệnh gọi API để lấy dấu bài phát biểu:

{"time":0,"type":"sentence","start":0,"end":23,"value":"Mary had a little lamb."}
{"time":6,"type":"word","start":0,"end":4,"value":"Mary"}
{"time":373,"type":"word","start":5,"end":8,"value":"had"}
{"time":604,"type":"word","start":9,"end":10,"value":"a"}
{"time":643,"type":"word","start":11,"end":17,"value":"little"}
{"time":882,"type":"word","start":18, "end":22,"value":"lamb"}

Từ “had” (ở cuối dòng 3) bắt đầu sau 373 mili giây sau khi luồng âm thanh bắt đầu, bắt đầu ở byte 5 và kết thúc ở byte 8 của văn bản đầu vào.

Tổng quan kiến ​​trúc

Kiến trúc của giải pháp của chúng tôi được trình bày trong sơ đồ sau.

Sơ đồ kiến ​​trúc

Đánh dấu văn bản khi nó được đọc, sử dụng Amazon Polly

Trang web của chúng tôi về giải pháp được lưu trữ trên Amazon S3 dưới dạng tệp tĩnh (JavaScript, HTML), được lưu trữ trong Amazon CloudFront (1) và được cung cấp cho trình duyệt của người dùng cuối (2).

Khi người dùng nhập văn bản vào trình duyệt thông qua một biểu mẫu HTML đơn giản, nó sẽ được JavaScript xử lý trong trình duyệt. Điều này gọi một API (3) thông qua Cổng API Amazon, để gọi một AWS Lambda chức năng (4). Hàm Lambda gọi Amazon Polly (5) để tạo tệp giọng nói (âm thanh) và dấu giọng nói (JSON). Hai cuộc gọi được thực hiện tới Amazon Polly để tìm nạp các tệp dấu âm thanh và giọng nói. Các cuộc gọi được thực hiện bằng cách sử dụng các chức năng không đồng bộ của JavaScript. Đầu ra của các cuộc gọi này là các tệp đánh dấu âm thanh và lời nói, được lưu trữ trong Amazon S3 (6a). Để tránh nhiều người dùng ghi đè tệp của nhau trong bộ chứa S3, các tệp được lưu trữ trong một thư mục có dấu thời gian. Điều này giảm thiểu khả năng hai người dùng ghi đè tệp của nhau trong Amazon S3. Đối với bản phát hành sản xuất, chúng tôi có thể sử dụng các phương pháp mạnh mẽ hơn để tách biệt các tệp của người dùng dựa trên ID người dùng hoặc dấu thời gian và các đặc điểm riêng khác.

Hàm Lambda tạo các URL được ký trước cho các tệp lời nói và đánh dấu lời nói, đồng thời trả chúng về trình duyệt dưới dạng một mảng (7, 8, 9).

Khi trình duyệt gửi tệp văn bản đến điểm cuối API (3), trình duyệt sẽ nhận lại hai URL được ký trước cho tệp âm thanh và tệp dấu giọng nói trong một lệnh gọi đồng bộ (9). Điều này được biểu thị bằng biểu tượng phím bên cạnh mũi tên.

Hàm JavaScript trong trình duyệt tìm nạp tệp dấu giọng nói và âm thanh từ phần xử lý URL của chúng (10). Nó thiết lập trình phát âm thanh để phát âm thanh. (Thẻ âm thanh HTML được sử dụng cho mục đích này).

Khi người dùng nhấp vào nút phát, nó sẽ phân tích cú pháp các dấu giọng nói được truy xuất ở bước trước đó để tạo một chuỗi sự kiện được hẹn giờ bằng cách sử dụng thời gian chờ. Các sự kiện gọi hàm gọi lại, đây là một hàm JavaScript khác được sử dụng để đánh dấu văn bản được nói trong trình duyệt. Đồng thời, hàm JavaScript truyền tệp âm thanh từ trình xử lý URL của nó.

Kết quả là các sự kiện được chạy vào những thời điểm thích hợp để làm nổi bật văn bản khi văn bản được đọc trong khi âm thanh đang được phát. Việc sử dụng thời gian chờ JavaScript cung cấp cho chúng tôi khả năng đồng bộ hóa âm thanh với văn bản được đánh dấu.

Điều kiện tiên quyết

Để chạy giải pháp này, bạn cần một Tài khoản AWS với một Quản lý truy cập và nhận dạng AWS (IAM) người dùng có quyền sử dụng Amazon CloudFront, Amazon API Gateway, Amazon Polly, Amazon S3, AWS Lambda và AWS Step Functions.

Sử dụng Lambda để tạo lời nói và dấu lời nói

Đoạn mã sau gọi Amazon Polly synthesize_speech chức năng hai lần để tìm nạp tệp dấu âm thanh và giọng nói. Chúng chạy dưới dạng các hàm không đồng bộ và được phối hợp để trả về kết quả cùng lúc bằng cách sử dụng các lời hứa.

const p1 = new Promise(doSynthesizeSpeech marks);
const p2 = new Promise(doSynthesizeSpeech);
var result; await Promise.all([p1, p2])
.then((values) => {
//return array of presigned urls console.log('Values:', values); result = { "output" : values };
})
.catch((err) => { console.log("Error:" + err); result = err;
});

Về phía JavaScript, việc tô sáng văn bản được thực hiện bằng công cụ tô sáng (bắt đầu, kết thúc, từ) và các sự kiện được đặt theo thời gian setTimers():

function highlighter(start, finish, word) { let textarea = document.getElementById("postText"); //console.log(start + "," + finish + "," + word); textarea.focus(); textarea.setSelectionRange(start, finish);
} function setTimers() { let speech marksStr = sessionStorage.getItem("speech marks"); //read through the speech marks file and set timers for every word console.log(speech marksStr); let speech marks = speech marksStr.split("n"); for (let i = 0; i < speech marks.length; i++) { //console.log(i + ":" + speech marks[i]); if (speech marks[i].length == 0) { continue; } smjson = JSON.parse(speech marks[i]); t = smjson["time"]; s = smjson["start"]; f = smjson["end"]; word = smjson["value"]; setTimeout(highlighter, t, s, f, word); }
}

Cách tiếp cận khác

Thay vì cách tiếp cận trước đây, bạn có thể xem xét một vài lựa chọn thay thế:

  • Tạo cả dấu giọng nói và tệp âm thanh bên trong máy trạng thái Step Functions. Máy trạng thái có thể gọi điều kiện nhánh song song để gọi hai hàm Lambda khác nhau: một hàm để tạo giọng nói và một hàm khác để tạo dấu giọng nói. Mã cho điều này có thể được tìm thấy trong sử dụng-bước-chức năng thư mục con trong repo Github.
  • Gọi Amazon Polly không đồng bộ để tạo các dấu âm thanh và giọng nói. Phương pháp này có thể được sử dụng nếu nội dung văn bản lớn hoặc người dùng không cần phản hồi theo thời gian thực. Để biết thêm chi tiết về cách tạo tệp âm thanh dài, hãy tham khảo Tạo tệp âm thanh dài.
  • Yêu cầu Amazon Polly trực tiếp tạo URL được chỉ định bằng cách sử dụng generate_presigned_url gọi ứng dụng khách Amazon Polly trong Boto3. Nếu bạn áp dụng phương pháp này, Amazon Polly sẽ tạo các dấu âm thanh và lời nói mới mỗi lần. Theo cách tiếp cận hiện tại của chúng tôi, chúng tôi lưu trữ các tệp này trong Amazon S3. Mặc dù không thể truy cập các tệp được lưu trữ này từ trình duyệt trong phiên bản mã của chúng tôi, nhưng bạn có thể sửa đổi mã để phát các tệp âm thanh đã tạo trước đó bằng cách tìm nạp chúng từ Amazon S3 (thay vì tạo lại âm thanh cho văn bản bằng Amazon Polly). chúng tôi có nhiều hơn ví dụ mã để truy cập Amazon Polly bằng Python trong Thư viện mã AWS.

Tạo giải pháp

Toàn bộ giải pháp có sẵn từ chúng tôi Kho lưu trữ Github. Để tạo giải pháp này trong tài khoản của bạn, hãy làm theo hướng dẫn trong tệp README.md. Giải pháp bao gồm một Hình thành đám mây AWS mẫu để cung cấp tài nguyên của bạn.

Dọn dẹp

Để dọn sạch các tài nguyên được tạo trong bản trình diễn này, hãy thực hiện các bước sau:

  1. Xóa các bộ chứa S3 được tạo để lưu trữ mẫu CloudFormation (Nhóm A), mã nguồn (Nhóm B) và trang web (pth-cf-text-highlighter-website-[Suffix]).
  2. Xóa ngăn xếp CloudFormation pth-cf.
  3. Xóa bộ chứa S3 chứa các tệp giọng nói (pth-speech-[Suffix]). Bộ chứa này được tạo bởi mẫu CloudFormation để lưu trữ các tệp dấu âm thanh và giọng nói do Amazon Polly tạo.

Tổng kết

Trong bài đăng này, chúng tôi đã trình bày một ví dụ về giải pháp có thể làm nổi bật văn bản khi nó được đọc bằng Amazon Polly. Nó được phát triển bằng cách sử dụng tính năng đánh dấu lời nói của Amazon Polly, cung cấp cho chúng tôi các điểm đánh dấu cho vị trí bắt đầu của mỗi từ hoặc câu trong một tệp âm thanh.

Giải pháp có sẵn dưới dạng mẫu CloudFormation. Nó có thể được triển khai cho bất kỳ ứng dụng web nào thực hiện chuyển đổi văn bản thành giọng nói. Điều này sẽ hữu ích để thêm khả năng trực quan vào âm thanh trong sách, hình đại diện có khả năng hát nhép (sử dụng dấu giọng nói của viseme), trang web và blog cũng như hỗ trợ người khiếm thính.

Nó có thể được mở rộng để thực hiện các tác vụ bổ sung bên cạnh việc đánh dấu văn bản. Ví dụ: trình duyệt có thể hiển thị hình ảnh, phát nhạc và thực hiện các hoạt ảnh khác ở giao diện người dùng trong khi văn bản đang được đọc. Khả năng này có thể hữu ích để tạo sách âm thanh động, nội dung giáo dục và các ứng dụng chuyển văn bản thành giọng nói phong phú hơn.

Chúng tôi hoan nghênh bạn dùng thử giải pháp này và tìm hiểu thêm về các dịch vụ AWS có liên quan từ các liên kết sau. Bạn có thể mở rộng chức năng cho các nhu cầu cụ thể của mình.


Lưu ý

Varad G Varadarajan là Cố vấn đáng tin cậy và CTO hiện trường cho các khách hàng Doanh nghiệp bản địa kỹ thuật số (DNB) tại AWS. Anh ấy giúp họ kiến ​​trúc và xây dựng các giải pháp đổi mới trên quy mô lớn bằng cách sử dụng các sản phẩm và dịch vụ của AWS. Các lĩnh vực Varad quan tâm là tư vấn chiến lược CNTT, kiến ​​trúc và quản lý sản phẩm. Ngoài công việc, Varad thích viết lách sáng tạo, xem phim với gia đình và bạn bè cũng như đi du lịch.

tại chỗ_img

Tin tức mới nhất

tại chỗ_img