nyumaya / nyumaya_audio_recognition

Classify audio with neural nets on embedded systems like the Raspberry Pi
https://nyumaya.com
Apache License 2.0
82 stars 14 forks source link
audio-recognition embedded-systems hotword hotword-detection keyword-spotting machine-learning raspberry-pi speech-commands wake-word-detection

Wakeword detection on small embedded sytems

Nyumaya offline audio classification. Libraries are available for Linux, WASM, RaspberryPi, ESP32S3, Android. Experimental Libraries are also available for MAC, iOS, Windows

Codacy Badge

For esp32s3 support look at its example and library

To run an example

git clone --depth 1 https://github.com/nyumaya/nyumaya_audio_recognition.git
cd nyumaya_audio_recognition/examples/python
python3 simple_hotword.py

The python demo captures audio from the default alsa microphone.

Web Demo

A web demo is available here. This has been tested with recent versions of Chrome and Firefox.

Performance V3.1

Free models:

Versioning

Models and the Library are Versioned with \<major>.\<minor>.\<revision> Models must match the \<major>.\<minor> version of the library to be compatible.

Sensitivity

The sensitivity parameter is a tradeoff between accuracy and false positives. Setting the sensitivity to a high value means it's easier to trigger the hotword. If you experience a lot of false detections, set the sensitivity to a lower value.

Audio Config

You can run the audio_check script to get some info about your volume level and possible DC-Offset. Speak as loud as the maximum expected volume will be.

python check_audio.py

Chaining Commands

The multi_streaming_example.py is a demo of how to chain commands. You can add commands with a list of words and function to call when the command is detected.

mDetector.add_command("marvin,on",light_on)
mDetector.add_command("marvin,stop",stop)

Be aware that CPU usage increases a little bit when multiple models have to run concurrently. I this case the software has to run the marvin_model (marvin) and the subset_model (stop) at the same time.

mDetector.add_command("marvin,on",light_on)
mDetector.add_command("stop",stop)

Custom Keywords:

Custom Keywords can be requested for evalutaion and commercial use here

Custom Targets:

Libraries for other targets can be requested for commercial customers.