Hardware
Mikrofon und USB-Soundkarte. (Alternativen wären Hat-Soundkarte wie z. B. HiFiBerry DAC ADC Pro; ist gekauft aber noch nicht eingerichtet; auch Sound-Eingabe von Netzwerk-Mikro der Medientechnik könnte interessant sein.)
Software
Mikro konfigurieren
USB-Mikro sollte eigentlich Plug and Play sein, also gleich nach Anschließen (ggf. Neustart) durch
arecord -l
als verfügbares Aufzeichnungsgerät gefunden und genutzt werden können. Falls nicht (nochmal mit frischer SD-Karte zu prüfen): in der Konfigurationsdatei
sudo nano /home/pi/.asoundrc
herumpfuschen; aktuell funktionierende Konfiguration ist
pcm.!default {
type asym
playback.pcm {
type plug
slave.pcm "output"
}
capture.pcm {
type plug
slave.pcm "input"
}
}
pcm.output {
type hw
card 0
}
pcm.input {
type plug
slave {
pcm "hw:2:0"
}
}
ctl.!default {
type hw
card 0
}
wobei der slave
im pcm.input
auf pcm "hw:2:0"
eingestellt ist weil alsa die USB-Karte in dem Fall als Karte 2, Subgerät 0 registriert hatte.
PulseAudio
PulseAudio (das Standard Audio System bei vielen Linux Distributionen) kann auch etwas Rauschentfernung und Echo-Cancellation machen, was die Spracherkennung bei größerem Abstand verbessern sollte.
Dazu in /etc/pulse/default.pa
am Ende die Zeilen hinzufügen:
# Denoise
load-module module-echo-cancel source_name=denoised aec_method=webrtc aec_args="analog_gain_control=0 digital_gain_control=1"
set-default-source denoised
# 65536 is 100%
set-source-volume denoised 98304
Und dann PulseAudio neustarten mit pulseaudio -k
(Falls es da einen Fehler gibt, dass der Prozess nicht gefunden wurde: pulseaudio -D
). Per default sollte dann das Audio mit Rauschentfernung verwendet werden.
Hauptquelle und Quelle zur Lautstärkeneinstellung (Auf der Hauptquelle verlinkt).
Spracherkennung
Installation
Vosk installieren wie auf https://alphacephei.com/vosk/ dokumentiert
Funksteckdose steuern
Die Sprachsteuerung für die Funksteckdose am Licht wird auf dem Raspi mit
cd /home/pi/vosk-api/python/example/
python3 test_microphone-modJS.py -r 48000
aktiviert. Ohne die Option -r 48000
verwendet das Python-Modul soundmodule die falsche Bitrate und macht die Aufzeichnung für Mensch und Maschine unverständlich. Will man den Befehl aus einem anderen Verzeichnis heraus ausführen, muss man den Pfad zum Sprachmodell spezifieren:
python3 /home/pi/vosk-api/python/example/test_microphone-modJS.py -r 48000 --model /home/pi/vosk-api/python/example/model/
Im Terminal-Fenster, in dem die Sprachsteuerung gestartet wurde, wird angezeigt, was sie erkennt. Enthält die erkannte Äußerung die Folge "licht an" oder "licht ein", so wird eingeschaltet; enthält sie "licht aus", so wird ausgeschaltet (mehr ist in test_microphone-modJS.py
gegenüber dem Original test_microphone.py
nicht geändert).