Kaggle ระบุพื้นฐาน 30 ชั่วโมงต่อสัปดาห์ ซึ่งอาจสูงกว่านั้นขึ้นอยู่กับความต้องการและทรัพยากรที่มี โควตาจะรีเซ็ตในวันเสาร์เวลา 00:00 UTC
คู่มือปฏิบัติ · PIPER TTS
จากเสียงบันทึก
สู่เสียงพูด
ขั้นตอนสำคัญในการเตรียมข้อมูลเสียงและฝึกโมเดล Piper ขีดจำกัดของ Kaggle อาจเปลี่ยนแปลงได้: โปรดตรวจสอบโควตาของคุณก่อนการฝึกที่ใช้เวลานาน
สร้างชุดข้อมูล LJSpeech สำหรับ Piper TTS
LJSpeech คือรูปแบบมาตรฐานที่ Piper คาดหวัง แต่ละประโยคคือไฟล์ WAV แยกกัน จับคู่กับคำถอดความใน metadata.csv
data.zip
├── metadata.csv # nom_du_fichier|transcription
└── wavs/
├── 000001.wav
└── ...- 01
รวบรวมไฟล์เสียง
ใช้เสียงบันทึกที่คุณมีสิทธิ์ประมวลผลและเผยแพร่ต่อได้ แหล่งที่มาอาจเป็นวิกิเกม สื่อที่คุณเป็นเจ้าของ หรือชุดข้อมูลสาธารณะ
ค้นหาชุดข้อมูล LJSpeech บน Hugging Face ↗ดาวน์โหลดสื่อต้นฉบับด้วย yt-dlp - 02
ตัดเสียงเป็นประโยค
เตรียมไฟล์ WAV 1 ไฟล์ต่อ 1 ประโยค สำหรับการตัดอัตโนมัติหรือการจัดแนว คุณสามารถใช้:
- audiosplitter · การตัดอัตโนมัติ
- Montreal Forced Aligner (MFA) · การจัดแนวแบบบังคับ
- faster-whisper + VAD · การถอดความและเวลาประทับ
- Audacity · การตัดด้วยตนเองสำหรับปริมาณน้อย
- 03
สร้าง metadata.csv
1 บรรทัดต่อ 1 ไฟล์ ตัวคั่นคือขีดแนวตั้ง ชื่อต้องตรงกับไฟล์ในโฟลเดอร์ wavs/ ทุกประการ
000001.wav|นี่คือประโยคตัวอย่าง 000002.wav|นี่คืออีกประโยคหนึ่งสำหรับการฝึก - 04
บีบอัดไฟล์เก็บถาวร
วาง metadata.csv และโฟลเดอร์ wavs/ ไว้ที่รากของไฟล์เก็บถาวร
zip -r data.zip metadata.csv wavs/ - 05
อัปโหลดไปยัง Hugging Face
สร้างที่เก็บข้อมูลชุดข้อมูล เช่น user/wheatley-english-ljspeech เพิ่ม data.zip และ README.md ที่มีการตั้งค่า:
--- configs: - config_name: default data_files: - split: train path: data.zip --- - 06
เผยแพร่ในฟอรัม Piper
สร้างกระทู้ในช่องชุดข้อมูลและการฝึก พร้อมลิงก์ Hugging Face และแท็กที่เหมาะสม
เปิดช่อง Discord ↗
ฝึกเสียงบน Kaggle
Kaggle จัดสรรโควตา GPU ให้บัญชีของคุณ และอาจแตกต่างกันตามความพร้อมใช้งาน โปรดตรวจสอบตัวนับก่อนเริ่มเซสชันที่ใช้เวลานาน
เอกสาร Kaggle ระบุขีดจำกัดต่อเนื่อง 12 ชั่วโมงสำหรับเซสชัน CPU และ GPU โน้ตบุ๊ก CPU ไม่ใช้โควตา GPU แต่ระยะเวลาเซสชันยังถูกจำกัด
Kaggle ปลดระวาง Tesla P100 เมื่อวันที่ 15 กันยายน 2026 T4 x2 ยังมีในโน้ตบุ๊ก โปรดเลือกตัวนี้สำหรับการฝึก Piper แทนการทำตามคู่มือ P100 รุ่นเก่า
ทำต่อหลังการหยุดชะงัก
การฝึกเต็มรูปแบบมักเกิน 12 ชั่วโมงของหนึ่งเซสชัน โน้ตบุ๊ก Piper ของโปรเจกต์นี้จะทำต่อจากเช็กพอยต์ Hugging Face: หลังการตัดการเชื่อมต่อหรือโควตาหมด ให้เรียกใช้อีกครั้งเพื่อทำต่อจากเช็กพอยต์ล่าสุดที่บันทึกไว้
ก่อนการฝึกที่ใช้เวลานาน
- ตรวจสอบโควตาที่เหลือในการตั้งค่าโน้ตบุ๊ก โปรไฟล์ของคุณ หรือหน้าการใช้งานตัวเร่งความเร็ว
- หยุดเซสชัน GPU เมื่อคุณไม่ได้ใช้งาน
- ใช้ T4 x2; P100 ไม่มีบน Kaggle แล้ว
โควตา ตัวเร่งความเร็ว และอินเทอร์เฟซของ Kaggle อาจเปลี่ยนแปลงได้ โปรดตรวจสอบข้อมูลที่แสดงในบัญชีของคุณก่อนการฝึกเสมอ
ใช้เสียง Piper
ติดตั้ง Piper รับไฟล์ 2 ไฟล์ของเสียงที่เลือก แล้วสร้าง WAV ในเครื่อง คำสั่งด้านล่างใช้เวอร์ชันที่ดูแลโดย Open Home Foundation
- 01
ติดตั้ง Piper
Piper เผยแพร่เป็นแพ็กเกจ Python คู่มือรุ่นเก่าที่ใช้ที่เก็บข้อมูล rhasspy/piper หรือไฟล์ไบนารีของที่เก็บนั้นหมายถึงรุ่นประวัติศาสตร์
python -m pip install piper-ttspython -m piper.download_voices en_US-lessac-medium - 02
ดาวน์โหลดเสียง
เลือกเสียงในแคตตาล็อกแล้วดาวน์โหลดโมเดล ONNX กับไฟล์การตั้งค่า JSON คู่กัน เก็บทั้ง 2 ไฟล์ไว้ด้วยกัน เส้นทาง JSON คือเส้นทางโมเดลตามด้วย .json
voice.onnx
voice.onnx.json - 03
สร้างไฟล์ WAV
ดาวน์โหลดเสียงจากแคตตาล็อก Piper ก่อน หรือแทนที่ชื่อด้านล่างด้วยเส้นทางไฟล์ .onnx ของคุณ
python -m piper -m ./voice.onnx -f output.wav -- "Bonjour, ceci est un test." - 04
อ่านข้อความจากไฟล์
python -m piper -m ./voice.onnx -f output.wav --input-file mon_texte.txtอ่านเสียงในเอาต์พุตโดยตรง
อัตราการสุ่มตัวอย่างขึ้นอยู่กับเสียง ตรวจสอบ voice.onnx.json และแทนที่ 22050 หากจำเป็น
echo "Bonjour." | python -m piper -m ./voice.onnx --output-raw | aplay -r 22050 -f S16_LE -c 1 -t raw - 05
จาก Python
import wave from piper import PiperVoice voice = PiperVoice.load("./voice.onnx") with wave.open("output.wav", "wb") as wav_file: voice.synthesize_wav("Bonjour le monde.", wav_file) - 06
กับ Home Assistant
Piper เชื่อมต่อกับ Home Assistant ผ่าน Wyoming เพิ่ม Piper ใน การตั้งค่า → อุปกรณ์และบริการ แล้วใช้การกระทำ tts.speak กับเอนทิตี TTS Piper
ตั้งค่า Piper ใน Home Assistant ↗กับ Node-RED
แพ็กเกจ node-red-contrib-piper-tts ที่กล่าวถึงในคู่มือบางฉบับไม่ได้รับการยืนยันในแคตตาล็อกสาธารณะ ทางเลือกหนึ่งคือเรียกคำสั่ง Piper จากโหนด Exec ในตัว ปรับเส้นทางและสิทธิ์ให้เข้ากับการติดตั้งของคุณ
- 07
ปรับผลลัพธ์
คุณภาพขึ้นอยู่กับข้อมูลการฝึกและเสียงที่เลือกเป็นสำคัญ ค่า length-scale ที่สูงขึ้นจะทำให้เสียงช้าลง ค่าที่ต่ำลงจะทำให้เร็วขึ้น noise-scale และ noise-w เปลี่ยนความหลากหลายของผลลัพธ์
python -m piper -m ./voice.onnx --length-scale 1.5 --noise-scale 0.667 --noise-w 0.8 -f lent.wav -- "Texte lent." python -m piper -m ./voice.onnx --length-scale 0.7 --noise-scale 0.667 --noise-w 0.8 -f rapide.wav -- "Texte rapide."
ผสาน Piper ในโปรเจกต์ Node.js ด้วย pipertts
pipertts นำ Piper มาสู่ Node.js ทั้งแบบเขียนไฟล์หรือเสียงในหน่วยความจำ โหมดที่แนะนำคือ PiperNativeTTS: การอนุมานแบบเนทีฟ 100% ในกระบวนการ (ONNX + สะพาน espeak ที่คอมไพล์แล้ว) ไม่ใช้ Python เร็วกว่า wrapper ประมาณ 10 เท่า เสียง (.onnx + .onnx.json) ยังคงเป็นไฟล์แยกกัน
- 01
ติดตั้งการพึ่งพา
เอกสารระบุ Node.js 18+ และ TypeScript 5+ โหมดเนทีฟไม่ต้องการอย่างอื่น: npm install ครั้งเดียวก็พอ โหมด wrapper แบบคลาสสิก (PiperTTS ผ่าน python3 -m piper) ต้องการ Python และโมดูล Piper เพิ่ม การเลือกด้วยรหัสแคตตาล็อกอาจดาวน์โหลดโมเดลกับการตั้งค่าลงใน models/
npm install pipertts # mode wrapper uniquement : python3 -m pip install piper-tts - 02
เริ่มต้นอย่างรวดเร็วด้วยเสียงในแคตตาล็อก
import { PiperNativeTTS, resolveModelPathFromOptions } from "pipertts"; import * as fs from "node:fs"; const modelPath = await resolveModelPathFromOptions({ model: "en_US-lessac-medium", modelsDir: "./models", }); const tts = await PiperNativeTTS.load({ modelPath }); const { audio } = await tts.synthesize("Hello from Piper."); fs.writeFileSync("./hello.wav", audio); - 03
ใช้โมเดลในเครื่อง
สำหรับเสียงที่ดาวน์โหลดด้วยตนเอง ให้ส่งเส้นทางไฟล์ ONNX ไฟล์ .onnx.json คู่กันต้องอยู่ข้างกัน คุณสามารถระบุ configPath ได้หากตำแหน่งต่างกัน
import { PiperNativeTTS } from "pipertts"; const tts = await PiperNativeTTS.load({ modelPath: "./models/my-voice.onnx", }); const { audio, sampleRate } = await tts.synthesize("Hello.", { speakerId: 0 }); - 04
API และรูปแบบ
synthesize() คืนค่า audio (Buffer) sampleRate และ text; outputFile ยังเขียนลงดิสก์ด้วย ตัวเลือก: speakerId (หลายเสียงและหลายสไตล์) lengthScale (> 1 ทำให้ช้าลง < 1 ทำให้เร็วขึ้น) noiseScale noiseWScale sentenceSilence normalizeAudio volume และ outputFormat (wav raw mp3 ogg หรือ opus) mp3 กับ opus มีทางเลือก JS ล้วน ogg ต้องใช้ FFmpeg phonemize() กับ synthesizeChunks() ให้การเข้าถึงระดับต่ำ ทีละประโยค
- 05
Wrapper รุ่นเก่า (PiperTTS)
PiperTTS เรียก python3 -m piper 1 กระบวนการต่อการสังเคราะห์ 1 ครั้ง: ช้ากว่าประมาณ 10 เท่า เก็บไว้สำหรับสภาพแวดล้อมที่เอนจินเนทีฟทำงานไม่ได้ ต้องใช้ Python และโมดูล Piper
import { PiperTTS } from "pipertts"; const tts = await PiperTTS.create({ modelPath: "./models/en_US-lessac-medium.onnx", }); await tts.synthesizeToFile("Hello from the legacy wrapper.", "./hello.wav");
