File size: 11,209 Bytes
b5c3f82
 
4d3248c
b5c3f82
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
4d3248c
 
 
 
 
 
 
 
031a0cb
 
4d3248c
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
4ee39c0
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
# 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 ที่ออกแบบมาสำหรับโมเดลภาษาไทยโดยเฉพาะ เพื่อการควบคุมที่แม่นยำยิ่งขึ้น