[Python] Text to speech – Chuyển văn bản thành giọng nói FPT Speech Synthesis

Cái này mình sưu tầm trên Viblo, lưu lại để dành đọc dần =))

https://viblo.asia/p/text-to-speech-chuyen-van-ban-thanh-giong-noi-Az45bm7qlxY

Mở đầu

Bài viết không liên quan tới machine learning. Chúng ta sẽ gọi api của fpt.

Ở bài viết này mình sẽ hướng dẫn cho các bạn tạo app text to speech. Có luôn source code để các bạn tải về dùng miễn phí hoàn toàn. Các bạn có thể dùng để nghe truyện, đọc báo hoặc tạo giọng nói cho nhà thông minh, chatbot của bạn chẳng hạn rất tiện phải không.

Xin lỗi mình không nhúng được file mp3 vào đây. bạn có thể vào link nhé Đây là một đoạn của google translate.

Google translate

Đây là api fpt

Fpt speech

Đây là phần giới thiệu của fpt

Tổng hợp tiếng nói (Speech synthesis) là bài toán cơ bản trong bài toán lớn về giao tiếp giữa người và máy (Human-Machine Interface).

Với tham vọng riêng của mình, Ban công nghệ FPT (FTI) đã nỗ lực nghiên cứu suốt gần 5 năm qua để cho ra mắt sản phẩm FPT Speech Synthesis. Sản phẩm là sự kết hợp của:

  • Ngôn ngữ học (Linguistics): âm vị học (Phonology), hình thái học (Morphology), ngữ dụng học (Pragmatics)
  • Vật lý học: âm học
  • Công nghệ: Xử lý ngôn ngữ tự nhiên (Natural Language Processing) , học máy (Machine Learning), xử lý tín hiệu số (Digital Signal Processing)

Được đánh giá là hệ thống tổng hợp tiếng nói tiếng Việt có chất lượng tốt nhất thị trường hiện nay, hệ thống tổng hợp tiếng Việt mới của FPT đang được mở trên Open FPT (http://openfpt.vn/). Các nhà phát triển có thể khai thác nguồn tài nguyên này để xây dựng ứng dụng của riêng mình trên các nền tảng khác nhau. Cho đến thời điểm này, đã có nhiều sản phẩm như “Giao thông thông minh” do FPT IS phát triển, hệ thống thông báo thông tin tài chính của VHT, hệ thống sinh ra video tự động từ bái báo điện tử, … đang sử dụng Speech Synthesis API của Open FPT và nhận được rất nhiều phản hồi tích cực từ người dùng.

Text to speech

Mình viết bằng python. Đầu tiên ta cần vào https://dev.openfpt.vn/ đăng ký tài khoản và tạo key để dùng cho app. Ok có cả phần test luôn. Các bạn có thể thử để xem chất lượng giọng nói.

Tài liệu ở đây. Chúng ta bắt đầu code.

Khởi tạo các tham số

Keys xin phép được ẩn đi. Mình chẳng tiếc nhưng sợ đông người dùng các bạn làm chậm của nhau. May cho chúng ta có phần comment của thằng bạn mình.

😄

Source code ở phía cuối bài viết, mình cũng lười không làm cái ứng dụng giao diện tử tế. Quan trọng là ý tưởng phải không .

😄

Chúng ta dùng nhiều key bởi vì fpt sẽ chặn số lượng request tính trên phút. Mình sẽ thay đổi liên tục các keys để lack vụ này .

Backup file mp3 trước đó

Mục đích tránh ghi đè mất file mp3 ở đợt trước

Kết quả

Gọi API và tải các file nhạc

Vì fpt giới hạn số lượng ký tự. Nên ta cần cắt ra thành nhiều đoạn. Cắt thế nào để không vào giữa một chữ (phải là “xin chào” chứ không thể cắt “xin ch” rồi file sau là “ào” được). Cách làm đơn giản là lấy 500 (giới hạn của fpt) lùi lại đến khi gặp dấu cách thôi rồi cắt từ đó. Mình để 480 cho chắc :D. Đối với python thì chúng ta có thư viện textwrap.

Kết quả:

Gộp files

Sau bước trên ta đã tải được các file đơn bây giờ gộp lại. Trên linux thì mình nhớ có sẵn lệnh split và merge file rồi. Trước mình đã thử chia nhỏ ảnh của mình và merge lại vẫn dùng được. Còn trên windows thì không có mình dùng một cái ffmpeg để merge file audios. Còn tải ở đâu thì mình không nhớ, các bạn có thể xem tài liệu https://trac.ffmpeg.org/wiki/Concatenate, hoặc tải 3 file exe ở phần sourcecode.

Vậy là xong. Bạn muốn thưởng thức thì quay lại phần đầu mở audio lên.