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) خيارات أكثر ثراءً لكلمة التنبيه.
أخطط في المستقبل لإضافة واجهة مستخدم ويب للتكوين: الكلمات التي يجب اكتشافها والعتبات ونماذج التحقق المخصصة وربما تحديد المتحدث. ويمكن أن يتضمن أيضًا تصورًا مباشرًا للاختبار والتشخيص.
باستخدام دوكر CLI
docker run -d --name openwakeword -p 12202:12202/udp -v /path/to/config/:/config dalehumby/openwakeword-rhasspy
في docker-compose.yml
(أو ملف مكدس Docker Swarm)
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 - الإعدادات - تسجيل الصوت.
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 للاستخدام.)
لا تتردد في فتح قضية إذا كان لديك مشكلة، تحتاج إلى مساعدة أو لديك فكرة. العلاقات العامة نرحب دائما.