
ที่เก็บนี้ใช้ท่อส่งสัญญาณพูดกับคำพูดซึ่งประกอบด้วยส่วนต่อไปนี้:
ไปป์ไลน์ให้วิธีการที่เปิดกว้างและแบบแยกส่วนโดยเน้นไปที่โมเดลการใช้ประโยชน์จากห้องสมุด Transformers บน Hubging Face Hub รหัสได้รับการออกแบบมาเพื่อการปรับเปลี่ยนที่ง่ายและเราสนับสนุนการใช้งานไลบรารีเฉพาะอุปกรณ์และภายนอกแล้ว:
VAD
STT
llm
TTS
โคลนที่เก็บ:
git clone https://github.com/huggingface/speech-to-speech.git
cd speech-to-speechติดตั้งการพึ่งพาที่ต้องการโดยใช้ UV:
uv pip install -r requirements.txt สำหรับผู้ใช้ MAC ให้ใช้ไฟล์ requirements_mac.txt แทน:
uv pip install -r requirements_mac.txtหากคุณต้องการใช้ Melo TTS คุณต้องเรียกใช้:
python -m unidic downloadท่อสามารถทำงานได้สองวิธี:
รันไปป์ไลน์บนเซิร์ฟเวอร์:
python s2s_pipeline.py --recv_host 0.0.0.0 --send_host 0.0.0.0เรียกใช้ไคลเอนต์ในเครื่องเพื่อจัดการอินพุตไมโครโฟนและรับเสียงที่สร้างขึ้น:
python listen_and_play.py --host < IP address of your server >python s2s_pipeline.py --local_mac_optimal_settingsการตั้งค่านี้:
--device mps เพื่อใช้สมาชิกสภาผู้แทนราษฎรสำหรับทุกรุ่นhttps://docs.nvidia.com/datacenter/cloud-native/container-toolkit/latest/install-guide.html
docker compose up
ใช้ประโยชน์จากคบเพลิงคอมไพล์สำหรับกระซิบและพาร์เลอร์ -TTS การใช้งานของ Parler-TTS ช่วยให้สามารถสตรีมเสียงส่งออกได้ช่วยลดความหน่วงแฝงเกินจริง :
python s2s_pipeline.py
--lm_model_name microsoft/Phi-3-mini-4k-instruct
--stt_compile_mode reduce-overhead
--tts_compile_mode default
--recv_host 0.0.0.0
--send_host 0.0.0.0 ในขณะนี้โหมดการจับกราฟ CUDA นั้นไม่สามารถใช้งานได้กับสตรีมมิ่งพาร์เลอร์ -TT ( reduce-overhead , max-autotune )
ปัจจุบันไปป์ไลน์สนับสนุนภาษาอังกฤษฝรั่งเศสสเปนจีนญี่ปุ่นและเกาหลี
มีการพิจารณาสองกรณีการใช้งาน:
--language แฟล็กภาษาโดยระบุรหัสภาษาเป้าหมาย (ค่าเริ่มต้นคือ 'en')--language เป็น 'อัตโนมัติ' ในกรณีนี้ Whisper จะตรวจจับภาษาสำหรับแต่ละคำพูดที่พูดและ LLM ได้รับแจ้งด้วย " Please reply to my message in ... " เพื่อให้แน่ใจว่าการตอบสนองอยู่ในภาษาที่ตรวจพบโปรดทราบว่าคุณต้องใช้จุดตรวจสอบ STT และ LLM ที่เข้ากันได้กับภาษาเป้าหมาย สำหรับส่วน STT Parler-TTS ยังไม่พูดหลายภาษา (แม้ว่าคุณลักษณะนั้นจะมาเร็ว ๆ นี้!?) ในระหว่างนี้คุณควรใช้ Melo (ซึ่งสนับสนุนภาษาอังกฤษ, ฝรั่งเศส, สเปน, จีน, ญี่ปุ่นและเกาหลี) หรือแชท -TTS
สำหรับการตรวจจับภาษาอัตโนมัติ:
python s2s_pipeline.py
--stt_model_name large-v3
--language auto
--mlx_lm_model_name mlx-community/Meta-Llama-3.1-8B-Instruct หรือสำหรับภาษาเดียวโดยเฉพาะภาษาจีนในตัวอย่างนี้
python s2s_pipeline.py
--stt_model_name large-v3
--language zh
--mlx_lm_model_name mlx-community/Meta-Llama-3.1-8B-Instruct สำหรับการตรวจจับภาษาอัตโนมัติ:
python s2s_pipeline.py
--local_mac_optimal_settings
--device mps
--stt_model_name large-v3
--language auto
--mlx_lm_model_name mlx-community/Meta-Llama-3.1-8B-Instruct-4bit หรือสำหรับภาษาเดียวโดยเฉพาะภาษาจีนในตัวอย่างนี้
python s2s_pipeline.py
--local_mac_optimal_settings
--device mps
--stt_model_name large-v3
--language zh
--mlx_lm_model_name mlx-community/Meta-Llama-3.1-8B-Instruct-4bit หมายเหตุ: การอ้างอิงสำหรับอาร์กิวเมนต์ CLI ทั้งหมดสามารถพบได้โดยตรงในคลาสอาร์กิวเมนต์หรือโดยใช้
python s2s_pipeline.py -h
ดูคลาส ModuleArguments อนุญาตให้ตั้งค่า:
--device ทั่วไป (ถ้าใครต้องการให้แต่ละส่วนทำงานบนอุปกรณ์เดียวกัน)--mode local หรือ serverดูคลาส Vadhandlerarguments ยวด:
--thresh : ค่าเกณฑ์เพื่อเรียกการตรวจจับกิจกรรมเสียง--min_speech_ms : ระยะเวลาขั้นต่ำของกิจกรรมเสียงที่ตรวจพบเพื่อพิจารณาคำพูด--min_silence_ms : ความยาวขั้นต่ำของช่วงเวลาความเงียบสำหรับการแบ่งส่วนคำพูดการตัดประโยคที่สมดุลและการลดเวลาแฝง model_name , torch_dtype และ device จะถูกเปิดเผยสำหรับการใช้งานแต่ละคำพูดกับข้อความรูปแบบภาษาและข้อความเป็นคำพูด ระบุส่วนไปป์ไลน์เป้าหมายด้วยคำนำหน้าที่สอดคล้องกัน (เช่น stt , lm หรือ tts ตรวจสอบคลาสอาร์กิวเมนต์ของการใช้งานสำหรับรายละเอียดเพิ่มเติม)
ตัวอย่างเช่น:
--lm_model_name google/gemma-2b-it พารามิเตอร์การสร้างอื่น ๆ ของวิธีการสร้างโมเดลสามารถตั้งค่าได้โดยใช้คำนำหน้าของชิ้นส่วน + _gen_ , เช่น --stt_gen_max_new_tokens 128 พารามิเตอร์เหล่านี้สามารถเพิ่มลงในคลาสอาร์กิวเมนต์ของ Pipeline Part ได้หากยังไม่ได้เปิดเผย
@misc { Silero VAD,
author = { Silero Team } ,
title = { Silero VAD: pre-trained enterprise-grade Voice Activity Detector (VAD), Number Detector and Language Classifier } ,
year = { 2021 } ,
publisher = { GitHub } ,
journal = { GitHub repository } ,
howpublished = { url{https://github.com/snakers4/silero-vad} } ,
commit = { insert_some_commit_here } ,
email = { hello @ silero.ai }
} @misc { gandhi2023distilwhisper ,
title = { Distil-Whisper: Robust Knowledge Distillation via Large-Scale Pseudo Labelling } ,
author = { Sanchit Gandhi and Patrick von Platen and Alexander M. Rush } ,
year = { 2023 } ,
eprint = { 2311.00430 } ,
archivePrefix = { arXiv } ,
primaryClass = { cs.CL }
} @misc { lacombe-etal-2024-parler-tts ,
author = { Yoach Lacombe and Vaibhav Srivastav and Sanchit Gandhi } ,
title = { Parler-TTS } ,
year = { 2024 } ,
publisher = { GitHub } ,
journal = { GitHub repository } ,
howpublished = { url{https://github.com/huggingface/parler-tts} }
}