openWakeWord는 "alexa", "hey mycroft", "hey jarvis" 및 기타 모델과 같은 일반적인 깨우기 단어를 감지하기 위한 오픈 소스 라이브러리입니다. Rhasspy는 오픈 소스 음성 도우미입니다.
이 프로젝트는 openWakeWord를 독립형 서비스로 실행하고, UDP를 통해 Rhasspy로부터 오디오를 수신하고, 깨우기 단어가 말하는 시기를 감지하고, Hermes MQTT 프로토콜을 사용하여 Rhasspy에 알립니다.
Base/Satellite 모드에서 Rhasspy를 실행합니다. 현재 각 위성은 오디오를 캡처하고 로컬에서 깨우기 단어 감지를 수행하며 다른 모든 작업을 수행하는 베이스로 오디오를 스트리밍합니다. Pi4 위성은 Compose로 시작된 Rhasspy Docker 컨테이너를 실행합니다. Base Rhasspy 컨테이너는 더욱 강력한 i7에서 실행됩니다(다른 홈 자동화 소프트웨어 실행).
Docker에서 openWakeWord를 실행하면 배포 및 설정(Python 종속성)이 쉬워지고 openWakeWord가 Rhasspy와 별도의 속도로 개발될 수 있습니다(Rhasspy와 함께 번들 및 출시되는 대신). openWakeWord의 단일 인스턴스는 구성을 중앙 집중화하고 저전력 위성(예: ESP32)을 허용합니다. 더욱 풍부한 깨우기 단어 옵션.
앞으로는 감지할 단어, 임계값, 사용자 지정 검증 모델 및 화자 식별 등 구성을 위한 웹 UI를 추가할 계획입니다. 테스트 및 진단을 위한 실시간 시각화도 포함될 수 있습니다.
도커 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는 UDP 프로토콜을 사용하여 네트워크를 통해 마이크에서 openWakeWord로 오디오를 스트리밍합니다. 마이크가 연결된 각 Rhasspy 장치(일반적으로 위성)에서 Rhasspy - 설정 - 오디오 녹음으로 이동하고 UDP Audio (Output)
에서 openWakeWord를 실행하는 호스트의 IP 주소를 삽입하고 일반적으로 12202
에서 시작하는 포트 번호를 선택합니다. . Rhasspy 장치가 여러 개 있는 경우 각 장치마다 고유한 포트 번호( 12202
, 12203
, 12204
등)가 필요합니다.
openWakeWord config.yaml
에서 udp_ports
에는 kay:value 쌍이 있습니다. 핵심은 Rhasspy - 설정 상단에 표시된 siteId
입니다. 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는 Hermes MQTT 프로토콜을 사용하여 깨우기 단어가 사용되었음을 Rhasspy에 알립니다. MQTT 브로커는 Rhasspy와 openWakeWord 모두에서 액세스할 수 있어야 합니다. Rhasspy의 내부 MQTT 브로커는 Rhasspy 외부에서 접근할 수 없으므로 Mosquitto와 같은 공유 브로커를 실행해야 합니다.
브로커가 실행되면 Rhasspy - 설정 - MQTT로 이동합니다. External
브로커를 선택하고 브로커가 실행 중인 Host
의 IP 주소, 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가 깨우기 단어당 한 번만 활성화되도록 보장하고 잘못된 활성화를 줄이는 데 도움이 됩니다.
위의 예에서는 UDP를 통해 수신된 최근 3개의 오디오 샘플을 함께 평균화하고, 깨우기 단어가 말한 평균 신뢰도가 0.7(70%) 이상인 경우 Rhasspy에 알림을 보냅니다. Rhasspy는 평균 신뢰도가 0.2(20%) 아래로 떨어질 때까지, 즉 호출어가 종료될 때까지 다시 알림을 받지 않습니다.
음성 활동 감지(VAD) 및 소음 억제 설정도 제공됩니다. (openWakeWord의 사용 권장 사항을 참조하세요.)
문제가 있거나 도움이 필요하거나 아이디어가 있으면 언제든지 이슈를 열어주세요. PR은 언제나 환영입니다.