[Announce] node-red-contrib-personal-wake-word

Hello,
This should be straightforward:

  • Install the nodes most recent version from the palette manager.
  • Install a microphone node like node-red-contrib-sox-utils following the instructions from its readme to connect a microphone to nodered.
  • record 3-5 samples of you saying "lumos" in the format specified in the nodes help text in the sidebar and save them to a folder on the same pi
  • create a new configuration in the wake node that uses the folder in which your recordings are
  • connect a microphone node in streaming mode to a wake node and and start the audio stream in the right format (specified in the help text), connect a debug node to the upper output of the wake node.
  • the mic node should say streaming and the wake node should say listening
  • try saying your keyword

I'm happy to help with specific questions at any point.

Johannes

1 Like

Hello,
I also cannot get the wakeword to work. I read this thread and checked everything. I used your script to record the wakeword which worked well. I am using a raspberry 4 and a ReSpeaker 4-Mic Array. Only I do not know what size for the processing buffer is needed.
This is my flow:

[
    {
        "id": "a12d7ac729417cdc",
        "type": "wake-word",
        "z": "fbd4ad5f385854ad",
        "wakeword": "f6b41482.228fb8",
        "threshold": "0.85",
        "averaging": false,
        "inputProp": "payload",
        "outputProp": "payload",
        "controlProp": "control",
        "passthrough": false,
        "name": "raspberry",
        "x": 520,
        "y": 460,
        "wires": [
            [
                "b97b9fdbb21378a8"
            ],
            [
                "29033f2406c170f0"
            ]
        ]
    },
    {
        "id": "b97b9fdbb21378a8",
        "type": "debug",
        "z": "fbd4ad5f385854ad",
        "name": "",
        "active": true,
        "tosidebar": true,
        "console": false,
        "tostatus": false,
        "complete": "true",
        "targetType": "full",
        "statusVal": "",
        "statusType": "auto",
        "x": 710,
        "y": 440,
        "wires": []
    },
    {
        "id": "29033f2406c170f0",
        "type": "debug",
        "z": "fbd4ad5f385854ad",
        "name": "",
        "active": true,
        "tosidebar": true,
        "console": false,
        "tostatus": false,
        "complete": "true",
        "targetType": "full",
        "statusVal": "",
        "statusType": "auto",
        "x": 710,
        "y": 480,
        "wires": []
    },
    {
        "id": "b2cd67313de1ebec",
        "type": "inject",
        "z": "fbd4ad5f385854ad",
        "name": "",
        "props": [
            {
                "p": "payload"
            },
            {
                "p": "comand",
                "v": "start",
                "vt": "str"
            }
        ],
        "repeat": "",
        "crontab": "",
        "once": false,
        "onceDelay": 0.1,
        "topic": "",
        "payload": "start",
        "payloadType": "str",
        "x": 130,
        "y": 460,
        "wires": [
            [
                "3e7a5e1100d99337"
            ]
        ]
    },
    {
        "id": "3e7a5e1100d99337",
        "type": "sox-record",
        "z": "fbd4ad5f385854ad",
        "name": "warten",
        "buttonStart": "msg",
        "inputs": 1,
        "inputSource": "3,0",
        "manualSource": "",
        "inputEncoding": "signed-integer",
        "inputChannels": 1,
        "inputRate": 16000,
        "inputBits": 16,
        "byteOrder": "-L",
        "encoding": "signed-integer",
        "channels": 1,
        "rate": 16000,
        "bits": 16,
        "gain": "0",
        "buffer": "4096",
        "showDuration": true,
        "durationType": "forever",
        "durationLength": "0",
        "silenceDetection": "nothing",
        "silenceDuration": "2.0",
        "silenceThreshold": "2.0",
        "outputFormat": "stream",
        "manualPath": "",
        "debugOutput": false,
        "x": 270,
        "y": 460,
        "wires": [
            [
                "a12d7ac729417cdc",
                "63aedb4554a8cf8a"
            ],
            [
                "1d9171683177347b"
            ]
        ]
    },
    {
        "id": "25953b02247c72aa",
        "type": "inject",
        "z": "fbd4ad5f385854ad",
        "name": "",
        "props": [
            {
                "p": "payload"
            },
            {
                "p": "comand",
                "v": "stop",
                "vt": "str"
            }
        ],
        "repeat": "",
        "crontab": "",
        "once": false,
        "onceDelay": 0.1,
        "topic": "",
        "payload": "stop",
        "payloadType": "str",
        "x": 130,
        "y": 500,
        "wires": [
            [
                "3e7a5e1100d99337"
            ]
        ]
    },
    {
        "id": "63aedb4554a8cf8a",
        "type": "debug",
        "z": "fbd4ad5f385854ad",
        "name": "",
        "active": true,
        "tosidebar": true,
        "console": false,
        "tostatus": false,
        "complete": "true",
        "targetType": "full",
        "statusVal": "",
        "statusType": "auto",
        "x": 430,
        "y": 380,
        "wires": []
    },
    {
        "id": "1d9171683177347b",
        "type": "debug",
        "z": "fbd4ad5f385854ad",
        "name": "",
        "active": false,
        "tosidebar": true,
        "console": false,
        "tostatus": false,
        "complete": "payload",
        "targetType": "msg",
        "statusVal": "",
        "statusType": "auto",
        "x": 450,
        "y": 560,
        "wires": []
    },
    {
        "id": "f6b41482.228fb8",
        "type": "wakeword-config",
        "name": "wakeword config",
        "files": [
            "/home/pi/voice2json_profile/de_kaldi-zamia-2.1/wake-word/hotword.0.wav",
            "/home/pi/voice2json_profile/de_kaldi-zamia-2.1/wake-word/hotword.1.wav",
            "/home/pi/voice2json_profile/de_kaldi-zamia-2.1/wake-word/hotword.2.wav"
        ]
    }
]

Thank You

Derek

I had this running a while ago.
Now days some nodes needed does not seems to work for me anymore and I had to remove them. They kept crashing my node red / docker. I did not remember exactly which and where but there where dependencies to nodes that has not been revisited since 7 years. @JGKK does not seem to react to reported issues on git. Maybe he moved on or so. The wake word node worked but only with decent results if there are no background noises else there where massive false alters. I would not recomment to use it at its current state.