- Tạo giọng nói cục bộ giờ đây có thể đạt chất lượng đủ thực tế ngay cả khi không có GPU chuyên dụng; trong môi trường ví dụ, GPU được dành cho suy luận LLM còn CPU xử lý TTS
- Kokoro là mô hình 82M tham số, hỗ trợ nhiều ngôn ngữ như tiếng Anh, tiếng Trung, tiếng Hindi và cung cấp khoảng 50 giọng, được tối ưu tốt nhất cho tiếng Anh
- Cách thiết lập dễ nhất là chạy container Kokoro-FastAPI, trong đó mô hình giọng nói đã được đóng gói sẵn nên kích thước image khoảng 5GB
- Cung cấp giao diện tương thích với OpenAI speech API, nên có thể chuyển các chương trình đang dùng API giọng nói hiện có sang TTS cục bộ tương đối dễ dàng
- Với việc tổng hợp các đoạn ngắn, tốc độ ở mức Intel Core i7-4770K 4,7 giây, Apple M2 Pro 4,5 giây, AMD Ryzen 7 8745HS 1,5 giây, đủ để dùng LLM cục bộ theo cách nghe thay vì đọc câu trả lời
Kokoro TTS chạy chỉ với CPU
- Chỉ vài năm trước, việc tạo giọng nói cục bộ chân thực còn rất khó, nhưng giờ đã có thể tạo giọng chất lượng cao mà không phải giao dữ liệu riêng tư cho dịch vụ bên ngoài
- Ví dụ được chạy trên máy GTX 1080 Ti dành cho LLM cục bộ đã từng được đề cập trước đó
- GPU chuyên dụng trên máy này được dành riêng cho suy luận LLM
- Tổng hợp giọng nói chỉ dùng CPU
- Mô hình sử dụng là Kokoro
- Là mô hình 82M tham số
- Tạo ra giọng nói tự nhiên bằng nhiều ngôn ngữ như tiếng Anh, tiếng Trung, tiếng Hindi
- Cung cấp khoảng 50 giọng và chủ yếu được tối ưu cho tiếng Anh
- Cách cấu hình server đơn giản nhất là dùng image container Kokoro-FastAPI
- Đã bao gồm sẵn các mô hình giọng nói được tải trước
- Vì vậy kích thước image container vào khoảng 5GB
- Lệnh chạy bằng Docker hoặc Podman:
podman run -p 8880:8880 ghcr.io/remsky/kokoro-fastapi-cpu - Sau khi chạy, có thể mở web UI tại
localhost:8880/web, nhập văn bản để tạo âm thanh và tự động phát lại
API tương thích OpenAI và chạy ví dụ
- Ngoài web UI, container Kokoro-FastAPI còn cung cấp giao diện TTS tương thích với OpenAI speech API
- Có thể dễ dàng điều chỉnh để dùng với các chương trình hiện có sử dụng OpenAI speech API
- Mã ví dụ JavaScript và Python có tại github.com/remotebrowser/speak
- Ví dụ chạy bằng JavaScript:
export TTS_API_BASE_URL=http://127.0.0.1:8880/v1 ./speak.js "Good morning! How are you today?" - Ví dụ chạy bằng Python:
export TTS_API_BASE_URL=http://127.0.0.1:8880/v1 ./speak.py "Good morning! How are you today?" - Âm thanh được tạo ra sẽ được lưu thành tệp MP3
- Nếu đã cài SoX hoặc Sound eXchange thì âm thanh sẽ tự động phát
- Có thể xem thông tin về SoX tại sox.sf.net
- Muốn chọn giọng khác thì thiết lập biến môi trường
TTS_VOICEexport TTS_API_BASE_URL=http://127.0.0.1:8880/v1 export TTS_VOICE="am_eric" ./speak.js "Good morning! How are you today?" - Danh sách đầy đủ các giọng có sẵn nằm trong Kokoro VOICES.md
Thời gian tổng hợp theo từng CPU và các lựa chọn thay thế
- Khi tổng hợp một đoạn kiểm thử ngắn bằng giọng
am_eric, thời gian tạo tốt nhất trong 3 lần chạy là như sau- Intel Core i7-4770K: 4,7 giây
- Apple M2 Pro: 4,5 giây
- AMD Ryzen 7 8745HS: 1,5 giây
- CPU đầu tiên trong danh sách là mẫu ra mắt từ 12 năm trước, cho thấy cả CPU cũ cũng có thể xử lý được công việc này
- Một lựa chọn TTS dạng container tương thích OpenAI khác là Speaches
- Khác với Kokoro-FastAPI, image container không kèm sẵn trọng số giọng nói mà phải tải rõ ràng qua API
- Cũng cung cấp chức năng STT chất lượng cao, bao gồm cả Whisper
- Nếu ứng dụng cần cả TTS lẫn STT thì đây có thể là lựa chọn xử lý tập trung tại một nơi
- Khi kết hợp với LLM cục bộ, bạn có thể nghe bằng giọng nói thay vì đọc câu trả lời của LLM
1 bình luận
Ý kiến trên Hacker News
Tôi đã dùng Kokoro khá nhiều trong các sản phẩm hỗ trợ tiếp cận, và làm việc với nó rất tiện vì không cần GPU NVIDIA như nhiều TTS có chất lượng tương tự
Tôi đặc biệt thích việc có thể tự thêm hướng dẫn phát âm IPA. Lý do là có những từ quan trọng là từ đồng tự khác nghĩa nên Kokoro đôi khi phát âm sai
Tuy nhiên, nó yếu khi chỉ bắt nó nói một hai từ. Ví dụ nếu chỉ cho nói "six" thì gần như lúc nào nó cũng nói kiểu "ah-six-ah". Thay vào đó, nếu đưa vào một câu dài như "The word is: six" thì nó đọc đúng, và vì Kokoro API trả về timestamp của từng từ trong câu, có thể dùng script Python để cắt riêng từ mình muốn. Ngữ điệu hơi phẳng, nhưng rất ổn định
Tôi hỏi trên Discord thì được nghe rằng đó là giới hạn do quy mô tham số nhỏ; và để bênh Kokoro một chút, giọng của eleven-labs thỉnh thoảng cũng gặp vấn đề như vậy
Trường hợp sử dụng của tôi gần như toàn là từ đơn, nên không phù hợp vì tôi không muốn phải xử lý chuyện nối hoặc tách đầu vào và đầu ra
Đây là chủ đề tôi thực sự quan tâm nên thấy thú vị
Trước đây tôi duy trì riêng whisperx, vì tôi cho rằng ngoài việc chép lời đơn thuần, thời điểm và nhận diện người nói cũng quan trọng cho các mục đích như phụ đề. Tuy nhiên nó phụ thuộc vào pyannote, giấy phép lại mơ hồ nên tự động hóa cài đặt cũng khó hơn
Vì vậy, khi tìm thứ có khả năng chép lời tốt hơn và hỗ trợ cả tách người nói, tôi đã chọn parakeet cho phần chép lời và softformer cho phần tách người nói. Nhưng hầu hết engine khả dụng lại không bao gồm softformer
Tôi đã tạo một máy chủ tương thích OpenAI cho parakeet-rs có hỗ trợ softformer (https://github.com/altunenes/parakeet-rs), và đang dùng nó cùng OpenWhispr, một ứng dụng chép lời desktop xử lý nhiều tính năng tiện lợi
Vì GPU đang dùng cho việc khác nên tôi chưa thêm đường dẫn GPU, hiện giờ chỉ chép lời bằng CPU, nhưng cảm giác có thể chạy chép lời cục bộ bất cứ khi nào muốn là rất mạnh
Với việc bạn muốn làm, dùng Senko cùng parakeet thì tách người nói rất tốt. Trên MacBook của tôi, nó nhanh và chính xác hơn Pyannote và whisper
Mô hình này thật sự tốt. Tôi tiếc là do thiếu GPU nên hầu như không động vào được các mô hình cục bộ, nhưng khoảng một tháng trước tôi đã cài Kokoro trên GTX1650 để làm TTS đọc bài viết
Trong một WebUI đơn giản, tôi dán URL hoặc một khối văn bản đã sao chép vào, Python sẽ dọn dẹp rồi gửi sang Kokoro để tạo TTS, sau đó cung cấp kết quả dưới dạng RSS cho Apple Podcasts. Tôi dùng nó để bắt kịp các bài đã lưu hoặc bài blog khi lái xe buổi sáng
Một ngày nào đó tôi muốn thử làm thứ giống NotebookLM, dùng nhiều giọng khác nhau để đọc các mục tin tức đã lưu như một chương trình radio buổi sáng
Vài tháng trước tôi đã tạo một tiện ích mở rộng Chrome làm việc này trên bất kỳ trang web nào, đồng thời tô sáng câu đang được đọc
Nó bỏ qua được cả bước khởi chạy container lẫn bước sao chép-dán nội dung website, nên có thể hữu ích cho những ai muốn dùng Kokoro tiện hơn
https://chromewebstore.google.com/detail/local-reader-ai-on-...
TTS đã tiến bộ rất nhiều và cũng có nhiều lựa chọn. Có Kokoro, còn Pocket TTS là mô hình nhỏ 100M nhưng cũng có thể nhân bản giọng nói
Chatterbox Turbo lớn hơn một chút nhưng hỗ trợ điều khiển cảm xúc trong giọng nói tốt hơn, còn Fish Audio S2 lớn hơn nữa nhưng cho phép kiểm soát tông và cảm xúc chi tiết hơn nhiều, gần như không giới hạn. Tất cả những thứ này đều chạy dễ dàng trên MacBook
Kho lưu trữ tốt để bắt đầu so sánh các mô hình TTS là https://github.com/5uck1ess/tts-bench
Xét việc Kokoro là mô hình được công bố từ 1,5 năm trước, nó thực sự là một mô hình rất tốt, và hiệu năng rất ấn tượng so với kích thước: https://5uck1ess.github.io/tts-bench/scores.html
Trước đây tôi từng dùng Piper cho TTS cục bộ, Kokoro cũng trông có vẻ thú vị
Rất tuyệt. Tôi dùng Linux nên không dùng được Aqua hay Whipsrflow, vì vậy từ tháng 1 tôi đã dùng giải pháp tự làm
Gần đây tôi đã dọn dẹp lại để dễ cài đặt hơn. Nếu quan tâm có thể xem ở đây: https://github.com/Hugo0/voiceio
Nó tự cải thiện theo thời gian, chạy trên máy cục bộ, và nhìn chung là phần mềm dùng được. Dạo này 60% tương tác của tôi với PC là hoàn toàn bằng nhập liệu giọng nói
Tôi rất thích Kokoro. Tôi dùng nó để đọc các ebook không có audiobook, và nó hoạt động khá tốt cho mục đích đó
Tôi đã viết một script Python đọc epub/html, chạy mô hình rồi ghi ra mp3
Số ngôn ngữ Kokoro hỗ trợ còn hạn chế nên với hỗ trợ tiếng Hà Lan tôi phải dùng mô hình khác, nhưng chất lượng không tốt bằng. Thường thì chúng chậm hơn nhiều và cũng lớn hơn, quá nặng với 8GB VRAM
Cuối cùng tôi còn thử cả TTS tích hợp sẵn của Windows; nghe không tự nhiên, nhưng ít nhất nó phát âm được hầu hết các từ và rất nhanh
Tôi đã dành một ngày nghịch AI và loại bỏ lớp đắt đỏ khỏi Kokoro, nó chạy nhanh hơn 3 lần trên CPU điện thoại và MNN
Chất lượng rất tương tự. Có thể khác tùy môi trường, nhưng script ở đây: https://github.com/DavidVentura/translator-rs/blob/master/sc...