| # Thai IndexTTS2 |
| > **indextts2 thai** โมเดล TTS state of the art (sota) ปรับอารมณ์เสียงได้ (พอประมาณ) |
|
|
| อธิบายโมเดลนี้สั้นๆ มันคือ minimax speech เวอร์ชันที่ไม่มีใส่เสียงหัวเราะ เสียงร้องไห้ แค่นั้นแหละ เพราะนี่คือโมเดลที่ finetune จาก indextts2 ตัวต้นฉบับจาก billibilli |
|
|
| ### 🌟 ความสามารถ |
| - โคลนเสียงได้ ซึ่งโคลนมาทั้งสำเนียงและอารมณ์ |
| - ปรับ duration ได้ (แต่ไม่ค่อยแม่นยำ มี parameter ให้ปรับ แนะนำไปปรับแบบช้าหรือเร็วก็พอ) |
| - emo vector จุดสำคัญของโมเดลนี้ ที่โมเดลอื่นๆไม่มี สามารถ scale อารมณ์ได้ (ภาษาไทยตอนนี้ ทำได้ดีระดับนึง มีเพิ่ม thai emo vec ให้ปรับด้วย แต่ไม่ค่อยดีนัก) |
| - เพิ่มระบบตัดเสียงตัดคำอื่นๆ สำหรับภาษาไทยโดยเฉพาะ |
|
|
| ### 🆚 เทียบกับ opensource โมเดลอื่นๆ ที่พูดไทยได้ |
| - **vits:** ไวกว่ามาก แต่ซัดทิ้งได้เลย เสียงโคลนไม่ได้ และเสียงยาวไปก็พัง |
| - **f5tts thai:** ไว โคลนเสียงได้ แต่เสียงออกแนวค่อนข้างโรโบติก และ ไร้ชีวิตชีวา ปรับไรมากไม่ค่อยได้ |
| - **vibevoice:** ดีและแม่นยำ เจนเสียงยาวเกือบครึ่งชั่วโมงได้ แต่เจนช้า แบบ ช้าโคตรๆ เอาไปใช้ทำไรมากไม่ได้สำหรับภาษาไทย error rate สำหรับ speaker 2 คนสูงมาก |
| - **omnivoice:** ดีที่สุดในปัจจุบัน โคลนเสียงตามสำเนียงและอารมณ์ได้ แต่ไม่มีโมเดลที่ "finetune เพิ่มเติมกับ dataset ภาษาไทย" ทำให้บางเสียงยังไม่ค่อยโอเค และ บางอารมณ์ก็แสดงออกมาไม่ค่อยชัด แต่ความเร็ว กับ ความแม่นยำ ถือว่าดีที่สุด |
| - **ของเรา indextts2:** แม้นจะช้ากว่า + แม่นยำต่ำกว่า แต่ด้วยการ finetune ผ่าน "dataset ที่ curated มาดี" ทำให้บางเสียงที่ gen ผมรู้สึกว่าดีกว่าตัว omnivoice มาก |
|
|
| ### ✅ indextts2 เหมาะกับ |
| - คนที่อยากเทสต์ระบบ เผื่อเอาไป finetune เพิ่มเติมต่อ |
| - คนที่อยากทำเสียง dub ภาษาไทย ทำพากย์ไทยประโยคสั้นๆต่อครั้ง คุณภาพพอๆกับ vibevoice แต่เร็วกว่า vibevoice มาก |
| - ต้องการเสียงที่มีอารมณ์ (โหมด emo vec ไม่ค่อยแม่นยำ error rate ยังสูงอยู่ แต่โหมดอื่นถือว่าโอเค) |
| - ต้องการเสียงพากย์ เสียงสารคดี เสียงที่ "คุ้นเคย" |
|
|
| ### ❌ ไม่เหมาะกับ |
| - สตรีมยาวๆ (error rate ยังสูง) |
| - ต้องการความเร็ว |
| - ไม่อยากเจนซ้ำบ่อยๆ |
| - ใช้ศัพท์ไทยผสมอังกฤษบ่อยๆ |
|
|
| ### 🛠️ เกี่ยวกับการเทรน |
| - โปรเจกต์นี้ใช้เวลาประมาณ 2 เดือนหลังจากเทรนรอบแรก กินเวลา 99% ไปกับการหา dataset ผมหมายถึง.......ผม prompt ให้ claude หรือ gemini ไปหา dataset ให้ แล้วมันก็บอกว่า yessirrie แค่นั้นแหละ.....จากนั้นมันก็ลบ dataset ทิ้งไปหมดแล้ว lol |
| *(dataset ที่ใช้เทรนประมาณ 800 ชั่วโมงรวมการทำ pairing แล้ว)* |
| - อย่างไรก็ตามโมเดลยังสามารถ finetune เพิ่มเติมได้อยู่ ลองดูได้ |
| - ตอนนี้มีโมเดลที่ค่อนข้างดีกว่าอย่าง omnivoice ในแง่ความเร็วและความแม่นยำ ขาดอีกนิดคือแค่อารมณ์เสียง + ข้อความอธิบาย speech ตอนนี้มีโปรเจกต์ opensource หลายโปรเจกต์ที่น่าเอามา finetune ต่อให้คุณภาพพอๆกับ gemini tts |
|
|
| --- |
|
|
| ## 🚀 วิธีดาวน์โหลดและติดตั้ง (Installation) |
|
|
| โปรเจกต์นี้ใช้ `uv` ในการจัดการสภาพแวดล้อมและแพ็กเกจ เพื่อให้ติดตั้งง่ายและแก้ปัญหาเวอร์ชันได้อย่างสมบูรณ์ |
|
|
| ### 1. ดาวน์โหลดโปรเจกต์ |
| ใช้คำสั่ง Git เพื่อดาวน์โหลดไฟล์ทั้งหมด: |
| ```bash |
| git clone https://huggingface.co/williampike/thai_indextts2 |
| cd thai_indextts2 |
| ``` |
|
|
| ### 2. สร้าง Virtual Environment และติดตั้ง Dependencies |
| ตรวจสอบว่าในเครื่องมี `uv` แล้ว (หากยังไม่มี ให้รัน `pip install uv` ก่อน) |
| จากนั้นรันคำสั่งเหล่านี้เพื่อสร้าง Virtual Environment และติดตั้งแพ็กเกจ: |
| ```bash |
| # สร้าง virtual environment |
| uv venv |
| |
| # ติดตั้งแพ็กเกจทั้งหมดตามที่ระบุไว้ |
| uv pip install -e . |
| ``` |
| *(เคล็ดลับ: คุณสามารถใช้แค่คำสั่ง `uv sync` เพื่อจัดการทุกอย่างในรวดเดียวได้เช่นกัน)* |
|
|
| ### 3. รันโปรแกรม |
| เมื่อติดตั้งเสร็จเรียบร้อยแล้ว ให้รันโปรแกรมด้วย `uv run` เพื่อเรียกใช้งานสภาพแวดล้อมที่ถูกต้อง: |
| ```bash |
| uv run webui.py |
| ``` |
| *(ถ้าต้องการรันไฟล์อื่น เช่น `webui_parallel_thai.py` ก็สามารถเปลี่ยนชื่อไฟล์ในคำสั่งได้เลย)* |
|
|
| --- |
|
|
| ## ✨ ฟีเจอร์ใหม่ใน `webui_parallel_thai.py` (เมื่อเทียบกับต้นฉบับ IndexTTS2) |
|
|
| ไฟล์ `webui_parallel_thai.py` ได้รับการปรับแต่งและเพิ่มฟีเจอร์สำหรับภาษาไทยโดยเฉพาะ ดังนี้: |
|
|
| 1. **รองรับภาษาไทยเต็มรูปแบบ (Thai Localization)**: เปลี่ยนเมนูและคำอธิบายใน UI เป็นภาษาไทยทั้งหมด เพื่อให้ใช้งานง่ายขึ้น |
| 2. **ระบบ Auto-load โมเดลภาษาไทย**: เมื่อเปิด WebUI จะตรวจสอบและโหลดโมเดล `thaiseperate2.pth` พร้อมกับ BPE tokenizer สำหรับภาษาไทยให้โดยอัตโนมัติ (หากมีในระบบ) |
| 3. **โหมดแยกส่วนเสียง (Segment Mode)**: แท็บ UI ใหม่ที่ช่วยแบ่งข้อความยาวๆ เป็นประโยคย่อย และกดสร้างเสียงทีละท่อนได้ สามารถกดย้อนกลับเพื่อสร้างท่อนล่าสุดใหม่ (Regenerate Last) ก่อนที่จะนำมารวมกันเป็นไฟล์เดียว |
| 4. **ตัวประมวลผลข้อความภาษาไทย (Thai Text Preprocessor)**: ทำงานร่วมกับ `PyThaiNLP` ช่วยในการตัดคำและเตรียมข้อความให้เหมาะสมก่อนนำไปสร้างเสียง (สามารถเปิด-ปิดฟีเจอร์ G2P และ Dataset Spacing ได้) |
| 5. **ระบบตัดเสียงเงียบอัตโนมัติ (Silence Trimming)**: มีฟังก์ชันช่วยตัดเสียงเงียบที่ยาวเกินไปทิ้ง ทั้งในไฟล์เสียง Prompt ต้นฉบับและไฟล์ Output อัตโนมัติ เพื่อให้จังหวะการพูดลื่นไหล |
| 6. **ระบบ Auto-Retry อัจฉริยะ**: หากเสียงที่สร้างออกมามีความยาวผิดปกติเมื่อเทียบกับจำนวนคำ (เช่น เสียงขาดหาย หรือเสียงยานลากยาว) ระบบจะสั่ง Generate ใหม่ให้อัตโนมัติทันที |
| 7. **เวกเตอร์ควบคุมอารมณ์แบบภาษาไทย (Thai 5-Emo Vectors)**: เปลี่ยนระบบสไลเดอร์อารมณ์มาใช้แบบ 5-Emo ที่ออกแบบมาสำหรับโมเดลภาษาไทยโดยเฉพาะ เพื่อการควบคุมที่แม่นยำยิ่งขึ้น |
|
|