openWakeWord เป็นไลบรารีโอเพ่นซอร์สสำหรับตรวจจับคำปลุกทั่วไป เช่น "alexa", "hey mycroft", "hey jarvis" และรุ่นอื่นๆ Rhasspy เป็นผู้ช่วยเสียงแบบโอเพ่นซอร์ส
โปรเจ็กต์นี้รัน openWakeWord เป็นบริการแบบสแตนด์อโลน รับเสียงจาก Rhasspy ผ่าน UDP ตรวจจับเมื่อมีการพูดคำปลุก และแจ้งเตือน Rhasspy โดยใช้โปรโตคอล Hermes MQTT
ฉันใช้งาน Rhasspy ในโหมดฐาน/ดาวเทียม ปัจจุบันดาวเทียมแต่ละดวงบันทึกเสียง ทำการตรวจจับคำปลุกในเครื่อง และสตรีมเสียงไปยังฐานซึ่งทำทุกอย่างอื่น ดาวเทียม Pi4 ใช้งานคอนเทนเนอร์ Rhasspy Docker ซึ่งเปิดตัวพร้อมการเขียน คอนเทนเนอร์ Base Rhasspy ทำงานบน i7 ที่ทรงพลังกว่า (รันซอฟต์แวร์ระบบอัตโนมัติในบ้านอื่นๆ)
การเรียกใช้ openWakeWord ใน Docker ช่วยลดความยุ่งยากในการกระจายและการตั้งค่า (การพึ่งพา Python) ช่วยให้ openWakeWord สามารถพัฒนาในจังหวะที่แยกจากกันไปยัง Rhasspy (แทนที่จะรวมกลุ่มและเผยแพร่ด้วย Rhasspy) อินสแตนซ์เดียวของ openWakeWord รวมศูนย์การกำหนดค่า และอนุญาตให้ดาวเทียมพลังงานต่ำ (เช่น ESP32s) ตัวเลือกคำปลุกที่สมบูรณ์ยิ่งขึ้น
ในอนาคต ฉันวางแผนที่จะเพิ่ม UI ของเว็บสำหรับการกำหนดค่า: คำใดที่จะตรวจจับ เกณฑ์ขั้นต่ำ โมเดลผู้ตรวจสอบที่กำหนดเอง และอาจระบุตัวตนของผู้พูด นอกจากนี้ยังอาจรวมถึงการแสดงภาพสดสำหรับการทดสอบและการวินิจฉัยด้วย
การใช้นักเทียบท่า CLI
docker run -d --name openwakeword -p 12202:12202/udp -v /path/to/config/:/config dalehumby/openwakeword-rhasspy
ใน docker-compose.yml
(หรือไฟล์ Docker Swarm stack)
openwakeword :
image : dalehumby/openwakeword-rhasspy
restart : always
ports :
- " 12202:12202/udp "
volumes :
- /path/to/config:/config
สำหรับการทดสอบและการทดลอง คุณสามารถรันโปรเจ็กต์นี้ในเครื่องได้:
git clone [email protected]:dalehumby/openWakeWord-rhasspy.git
python3 -m venv env
source env/bin/activate
pip3 install -r requirements.txt
python3 detect.py
config.yaml
เช่น nano /path/to/config/config.yaml
config.yaml.example
ลงใน config.yaml
เพื่อเริ่มต้น Rhasspy สตรีมเสียงจากไมโครโฟนไปยัง openWakeWord ผ่านเครือข่ายโดยใช้โปรโตคอล UDP บนอุปกรณ์ Rhasspy แต่ละตัวที่มีไมโครโฟนติดอยู่ (โดยทั่วไปคือดาวเทียม) ให้ไปที่ Rhasspy - การตั้งค่า - การบันทึกเสียง และใน UDP Audio (Output)
ให้ใส่ที่อยู่ IP ของโฮสต์ที่ใช้ openWakeWord และเลือกหมายเลขพอร์ต ซึ่งโดยปกติจะเริ่มต้นที่ 12202
. หากคุณมีอุปกรณ์ Rhasspy หลายเครื่อง แต่ละอุปกรณ์จะต้องมีหมายเลขพอร์ตของตัวเอง 12202
, 12203
, 12204
ฯลฯ
ใน openWakeWord config.yaml
udp_ports
มีคู่ kay:value กุญแจสำคัญคือ siteId
ที่แสดงที่ด้านบนของ Rhasspy - การตั้งค่า อาจเป็น: base
, satellite
, kitchen
, หรือ bedroom
ฯลฯ ค่านี้เป็นพอร์ตที่อยู่ในรายการ Rhasspy - Settings - Audio Recording
udp_ports :
base : 12202
kitchen : 12203
bedroom : 12204
หากคุณใช้ Docker คุณจะต้องเปิดพอร์ตเพื่ออนุญาตการรับส่งข้อมูลเครือข่าย UDP ลงในคอนเทนเนอร์
การใช้นักเทียบท่า CLI
docker run -d --name openwakeword -p 12202:12202/udp -p 12203:12203/udp -p 12204:12204/udp -v /path/to/config/:/config dalehumby/openwakeword-rhasspy
หรือใน docker-compose.yml
openwakeword :
image : dalehumby/openwakeword-rhasspy
restart : always
ports :
- " 12202:12202/udp " # base
- " 12203:12203/udp " # kitchen
- " 12204:12204/udp " # bedroom
# ... etc
volumes :
- /path/to/config:/config
openWakeWord แจ้ง Rhasspy ว่ามีการพูดคำปลุกโดยใช้โปรโตคอล Hermes MQTT นายหน้า MQTT ต้องสามารถเข้าถึงได้โดยทั้ง Rhasspy และ openWakeWord ไม่สามารถเข้าถึงนายหน้า MQTT ภายในของ Rhasspy จากภายนอก Rhasspy ได้ ดังนั้น คุณจะต้องเปิดนายหน้าที่ใช้ร่วมกัน เช่น Mosquitto
เมื่อโบรกเกอร์ทำงานแล้ว ให้ไปที่ Rhasspy - การตั้งค่า - MQTT เลือกนายหน้า External
ตั้งค่าที่อยู่ IP ของ Host
ที่นายหน้ากำลังทำงานอยู่ หมายเลข Port
และ Username
/ Password
หากจำเป็น คล้ายกับ:
openWakeWord config.yaml
จะมี:
mqtt :
broker : 10.0.0.10
port : 1883
username : yourusername # Delete row if not required
password : yourpassword # Delete row if not required
ในแต่ละ Rhasspy ใน Rhasspy - การตั้งค่า - Wake Word ให้ตั้งค่า Hermes MQTT
เช่น
openWakeWord จะฟังคำปลุก เช่น "alexa", "hey mycroft", "hey jarvis" และอื่นๆ ใช้ model_names
เพื่อระบุคำปลุกที่จะฟัง (ดูเอกสารประกอบโมเดลที่ได้รับการฝึกอบรมล่วงหน้า และ model_names
ที่จะใช้)
ลบคำปลุกใดๆ ที่คุณไม่ต้องการเปิดใช้งาน หรือลบส่วน model_names
ทั้งหมดเพื่อใช้โมเดลที่ได้รับการฝึกล่วงหน้าทั้งหมด
oww :
model_names : # From https://github.com/dscripka/openWakeWord/blob/main/openwakeword/__init__.py
- alexa # Delete to ignore this wake-word
- hey_mycroft
- hey_jarvis
- timer
- weather
activation_samples : 3 # Number of samples in moving average
activation_threshold : 0.7 # Trigger wakeword when average above this threshold
deactivation_threshold : 0.2 # Do not trigger again until average falls below this threshold
# OWW config, see https://github.com/dscripka/openWakeWord#recommendations-for-usage
vad_threshold : 0.5
enable_speex_noise_suppression : false
การตั้งค่า oww
อื่นๆ ช่วยให้มั่นใจได้ว่า Rhasspy จะเปิดใช้งานเพียงครั้งเดียวต่อคำปลุก และช่วยลดการเปิดใช้งานที่ผิดพลาด
ในตัวอย่างข้างต้น ตัวอย่างเสียง 3 รายการล่าสุดที่ได้รับผ่าน UDP จะถูกนำมาเฉลี่ยรวมกัน และหากความเชื่อมั่นโดยเฉลี่ยที่มีการพูดปลุกนั้นสูงกว่า 0.7 (70%) Rhasspy จะได้รับแจ้ง Rhasspy จะไม่ได้รับการแจ้งเตือนอีกจนกว่าความเชื่อมั่นโดยเฉลี่ยจะลดลงต่ำกว่า 0.2 (20%) กล่าวคือ คำปลุกสิ้นสุดลงแล้ว
การตั้งค่าสำหรับการตรวจจับกิจกรรมเสียง (VAD) และการลดเสียงรบกวนก็มีให้เช่นกัน (ดูคำแนะนำสำหรับการใช้งานของ openWakeWord)
อย่าลังเลที่จะเปิดปัญหาหากคุณมีปัญหา ต้องการความช่วยเหลือ หรือมีความคิด PR ยินดีต้อนรับเสมอครับ