mô hình Text-to-Speech (TTS) cho tiếng Việt chạy trên máy Mac M4

Nội dung

    NeuTTS-Air là một hệ thống chuyển văn bản thành giọng nói (text-to-speech) sử dụng mạng nơ-ron dựa trên Qwen 0.5B – một mô hình ngôn ngữ nhẹ nhưng có khả năng tối ưu hóa để hiểu và tạo văn bản – cũng như sự kết hợp mạnh mẽ của các công nghệ được thiết kế để mang lại hiệu quả và chất lượng, được thiết kế nhẹ đến mức có thể chạy trực tiếp trên máy tính hoặc điện thoại của bạn. Nó nhận đầu vào là chuỗi văn bản và tạo ra âm thanh tương ứng ngay trên thiết bị, không cần gọi đến bất kỳ API bên ngoài nào — nghĩa là toàn bộ quá trình tổng hợp giọng nói diễn ra cục bộ trên máy của bạn.
    Vì mọi xử lý đều diễn ra trên thiết bị, dữ liệu văn bản của bạn không bao giờ rời khỏi máy — cực kỳ phù hợp cho ứng dụng nhạy cảm về bảo mật. Ngoài ra, nó hoạt động hoàn hảo khi không có Internet, lý tưởng cho thiết bị nhúng, IoT, hoặc ứng dụng ngoại tuyến.
    NeuTTS-Air là mã nguồn mở hoàn toàn, cho phép bạn xem, hiểu và tùy chỉnh mã nguồn. Bạn có thể tinh chỉnh giọng nói cho một nhân vật trong game, hoặc tối ưu hóa hiệu năng cho phần cứng cụ thể — hoàn toàn theo ý mình.

    mô hình Text-to-Speech (TTS) cho tiếng Việt chạy trên máy Mac M4

    Dưới đây là hướng dẫn đầy đủ – từng bước để chạy VieNeu-TTS (model + code + dataset) trên macOS 14–15 / Mac mini M4 / Python 3.10+ hoàn toàn local, không cần GPU NVIDIA.

    1. Chuẩn bị môi trường

    Cài Homebrew (nếu chưa có)
    /bin/bash -c “$(curl -fsSL //raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)”

    Cài Python 3.10+
    brew install python@3.10

    Tạo môi trường ảo:

    python3 -m venv vienneu_env
    source vienneu_env/bin/activate

    Cài FFmpeg (bắt buộc cho xử lý audio)
    brew install ffmpeg

    brew install espeak-ng

    2. Clone project

    git clone //github.com/pnnbao97/VieNeu-TTS
    cd VieNeu-TTS

    Cấu trúc thư mục

    VieNeu-TTS/
    ├── examples/
    │ ├── infer_long_text.py # CLI for long-form synthesis (chunked)
    │ └── sample_long_text.txt # Example paragraph for testing
    ├── gradio_app.py # Local Gradio demo
    ├── main.py # Basic batch inference script
    ├── output_audio/ # Generated audio (created when running scripts)
    ├── sample/ # Reference voices (audio + transcript pairs)
    ├── utils/
    │ ├── __init__.py
    │ └── normalize_text.py # Vietnamese text normalization pipeline
    ├── vieneu_tts/
    │ ├── __init__.py
    │ └── vieneu_tts.py # Core VieNeuTTS implementation
    ├── README.md
    ├── requirements.txt
    └── pyproject.toml

    3. Cài dependencies

    Thư viện PyTorch đã hỗ trợ Apple Silicon + MPS, nên có thể chạy inference trên GPU của M4.

    pip install -r requirements.txt

    Hoặc: pip install torch transformers neucodec phonemizer librosa soundfile vinorm

    Cài PyTorch cho Apple Silicon
    pip install torch torchvision torchaudio
    (MPS vẫn hoạt động trong bản CPU này vì PyTorch tự dò chip Apple)

    Sau khi cài xong, kiểm tra:

    python3 – << ‘EOF’
    import torch
    print(“PyTorch version:”, torch.__version__)
    print(“MPS available:”, torch.backends.mps.is_available())
    EOF

    Kết quả mong đợi:

    PyTorch version: 2.6.0
    MPS available: True

    Nếu như vậy → bạn đã sẵn sàng chạy VieNeu-TTS trên GPU của Mac M4.

    Mac dùng GPU Apple Silicon, nên hoàn toàn không tương thích. đơn giản comment thêm dấu #

    4. Chỉnh code

    Tìm các file chạy main.py, gradio_app.py, examples\infer_long_text.py (chuyển file này ra bên ngoài) sửanội dung

    device = “mps” if torch.backends.mps.is_available() else “cpu”

    5. Chạy các file thử

    Chạy thử

    python main.py

    Tập lệnh này chạy một số câu chuẩn hóa bằng giọng nói mẫu được đóng gói và ghioutput_*.wavcác tệp dưới dạngoutput_audio/.

    web Gradio

    python gradio_app.py

    Sau đó mở //127.0.0.1:7860 ra:

    Chọn một trong sáu giọng tham khảo. Tải lên bản ghi âm + bản ghi tham khảo của riêng bạn. Nhập tối đa 250 ký tự cho mỗi yêu cầu (khuyến nghị). Xem trước hoặc tải xuống âm thanh tổng hợp.

    Trợ lý văn bản dài

    infer_long_text.pychia các đoạn văn dài thành các phân đoạn ≤2 56 ký tự (ưu tiên ranh giới câu) và tổng hợp chúng theo trình tự.

    python3 infer_long_text.py \
      --text-file examples/sample_long_text.txt \
      --ref-audio sample/id_0001.wav \
      --ref-text sample/id_0001.txt \
      --output output_audio/sample_long_text.wav

    Lần đầu chạy, model sẽ được tải tự động từ:

    //huggingface.co/pnnbao-ump/VieNeu-TTS

    Để chạy không cần acti mô trường thì gọi: \thư mục venv\bin\python3 infer_long_text.py

    Huấn luyện mô hình Text-to-Speech NeuTTS-Air cho tiếng Việt.

    //github.com/iamdinhthuan/neutts-air-fintune

    Thư mục loading

    ls -la ~/.cache/huggingface/hub

    dùng lệnh mở trực tiếp: open ~/.cache/huggingface/hub

    Kiểm tra dung lượng/model tải về

    du -sh ~/.cache/huggingface/hub/*

    Xoá toàn bộ cache HuggingFace:

    rm -rf ~/.cache/huggingface/hub

    Tải model từ HuggingFace

    Cài huggingface-cli: pip install huggingface_hub

    Tải model:
    huggingface-cli download pnnbao-ump/kani-tts-370m-vie –local-dir models/kani

    Cấu trúc sau khi tải:

    Kani-TTS-Vie/
    └── models/kani/
    ├── config.json
    ├── preprocessor_config.json
    ├── model.safetensors
    └── vocabulary.json

    # Khởi tạo model
    tts = KaniTTS(model_dir=”models/kani”)

    text = “Xin chào! Đây là Kani Text to Speech đang chạy trên Mac M4.”

    # Sinh giọng nói
    audio = tts.tts(text)

    # Lưu file WAV
    sf.write(“kani_output.wav”, audio, 22050)

    Xử lý văn bản thiếu dấu câu.

    //huggingface.co/organizations/protonx-models/activity/all

    //huggingface.co/protonx-models/protonx-legal-tc

    Sửa lỗi văn bản pháp lý ProtonX (v1.2-NC)

    Mộtmô hình hiệu chỉnh tiếng Việt chuyên biệtđược thiết kế đểxử lý hậu kỳ OCR có độ chính xác cao, đặc biệt làđể sửa lỗi đầu ra PaddleOCR bị nhiễu trong quy trình làm việc của doanh nghiệp và pháp lý. Xử lý 1 câu cho 1 lần chạy.

    Chạy trên Mac thay

    "cuda" if torch.cuda.is_available() else "cpu"
    bằng “mps” if torch.backends.mps.is_available() else “cpu”

    Để lại một bình luận

    Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *

    Chat with us
    Hello! How can I help you today?