Spaces:
Sleeping
Sleeping
File size: 4,393 Bytes
faa3a09 d14f1d9 faa3a09 d14f1d9 faa3a09 d14f1d9 faa3a09 d14f1d9 | 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 | ---
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 แล้ว)
|