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
metadata
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 ไฟล์เสียงที่สร้าง

ติดตั้ง & รัน

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 แล้วตั้ง env:

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 แล้ว)