voiceclone-th-api / README.md
paomailbox's picture
Deploy VoiceClone TH API (F5-TTS-THAI)
d14f1d9 verified
|
Raw
History Blame Contribute Delete
4.39 kB
---
title: VoiceClone TH API
emoji: 🎙️
colorFrom: purple
colorTo: indigo
sdk: docker
app_port: 8000
pinned: false
license: cc-by-4.0
---
# VoiceClone AI — Backend (โคลนเสียงจริง)
FastAPI + F5-TTS / XTTS-v2 ทำการโคลนเสียงจริงจากไฟล์ที่อัด แล้วส่งไฟล์ WAV กลับให้ frontend เล่น/ดาวน์โหลด
## เอนด์พอยต์ (ตาม PRD)
| Method | Path | หน้าที่ |
|---|---|---|
| GET | `/api/v1/health` | สถานะ + เอนจินที่โหลด |
| POST | `/api/v1/voices` | อัปโหลดตัวอย่างเสียง (multipart: `sample`, `name`, `language`, `gender`, `ref_text`) → คืน `voice_id` |
| GET | `/api/v1/voices` | รายการเสียง |
| POST | `/api/v1/generate` | `{voice_id, text, emotion, speed}` → คืน `{generation_id, audio_url}` |
| DELETE | `/api/v1/voices/{id}` | ลบเสียง |
| GET | `/files/audio/<id>.wav` | ไฟล์เสียงที่สร้าง |
## ติดตั้ง & รัน
```bash
cd backend
python3 -m venv .venv && source .venv/bin/activate
pip install -r requirements.txt # f5-tts จะดึง torch มาด้วย (ใหญ่)
brew install ffmpeg # macOS (หรือ apt install ffmpeg)
./run.sh # หรือ: PYTHONHASHSEED=0 uvicorn app:app --port 8000 --reload
```
> ⚠️ ถ้าเชลล์ตั้ง `PYTHONHASHSEED` เป็นค่าว่าง จะทำให้ subprocess ของ torch crash —
> `run.sh` และ `app.py` จัดการให้แล้ว (ตั้งเป็น `0` อัตโนมัติ)
## ✅ เสียงไทยติดตั้งแล้ว (F5-TTS-THAI)
ดาวน์โหลด checkpoint ไทยไว้ที่ `backend/models/` เรียบร้อย:
- `models/model_1000000.pt` (~1.3 GB, 1,000,000 steps)
- `models/vocab.txt`
`tts_engine.py` ตรวจพบและใช้อัตโนมัติด้วยสถาปัตยกรรม `F5TTS_Base`
`/api/v1/health` รายงาน `"engine":"F5-TTS-THAI"` และพูดไทยได้ชัด
(ทดสอบแล้ว: โหลดโมเดล ~8 วิ, สร้างเสียง ~20 วิ/ประโยค บน CPU)
เปิด frontend (`python3 -m http.server 8080` ที่โฟลเดอร์หลัก) — เมื่อ backend ออนไลน์
แอปจะขึ้นป้าย **"โคลนจริง"** อัตโนมัติ และการอัดเสียง/สร้างเสียงพูดจะใช้เสียงที่อัดจริง
> ถ้า backend ไม่ออนไลน์ หรือเอนจินยังไม่พร้อม → frontend สลับไปใช้ Web Speech ของเบราว์เซอร์เองโดยอัตโนมัติ (ไม่พัง)
## ภาษาไทย (F5-TTS-THAI)
F5-TTS ฐานหลักเก่งอังกฤษ/จีน สำหรับเสียงไทยให้โหลด checkpoint ไทย เช่น
[`VIZINTZOR/F5-TTS-THAI`](https://huggingface.co/VIZINTZOR/F5-TTS-THAI) แล้วตั้ง env:
```bash
export F5_CKPT_FILE=/path/to/model_thai.safetensors
export F5_VOCAB_FILE=/path/to/vocab.txt
uvicorn app:app --port 8000
```
เลือกเอนจินด้วย `TTS_ENGINE=f5|xtts|auto` (ค่าเริ่มต้น `auto`)
## หมายเหตุสำคัญ
- โมเดลโหลดแบบ lazy ครั้งแรกที่เรียก `/generate` (อาจรอสักครู่ตอน request แรก)
- ref_text = สคริปต์ที่ผู้ใช้อ่านตอนอัด (frontend ส่งมาให้อัตโนมัติ) ช่วยให้ F5-TTS โคลนแม่นขึ้น
- ต้องยืนยันความเป็นเจ้าของเสียง/ได้รับอนุญาตก่อนใช้งานเสมอ (frontend มีขั้นตอน consent แล้ว)