Files
alice-backend/station/README.md
T

4.4 KiB
Raw Blame History

Клиент Mini 2

Клиент собирается в статический ARM64-бинарник для ядра Mini 2. Для захвата и вывода он запускает штатные arecord и aplay, которые на этой прошивке собраны для armhf.

cd station
go test ./...
CGO_ENABLED=0 GOOS=linux GOARCH=arm64 go build -trimpath -ldflags='-s -w' -o alice-station .

На тестовой колонке файлы лежат в /data/opt/alice-backend/. Помести туда бинарник, with-mic.sh и отдельный DEVICE_TOKEN в файле device-token с правами 0600. Для WSS нужны доступ в сеть, корректное время и доверенный набор сертификатов.

Ручной тест с микрофоном

На этой Mini 2 hw:0,1 обычно занят штатным platformd. Скрипт with-mic.sh освобождает микрофон на время теста, даёт не больше 90 секунд и возвращает штатный процесс после выхода. Для остановки нажми Ctrl+C в SSH-сеансе с терминалом.

cd /data/opt/alice-backend
./with-mic.sh ptt -voice-threshold 55

Нажми Enter, дождись сигнала, затем скажи команду. Настройки -voice-threshold, -silence и -max регулируют порог голоса, паузу в конце и предел длительности. Значение 55 проверено на этой колонке вблизи микрофона.

Локальная активация по фразе

./with-mic.sh enroll -samples 4 -voice-threshold 55
./with-mic.sh wake -voice-threshold 55 -once

При обучении нажимай Enter перед каждым образцом и после сигнала произноси «Алиса», затем сделай паузу. Клиент сохраняет спектральные признаки в wake-templates.json с правами 0600. На тестовой колонке эти образцы уже записаны. В режиме wake произнеси «Алиса», дождись сигнала и скажи команду. Флаг -once завершает сеанс после первого успешного ответа. Без флага можно провести несколько ходов за один пробный запуск.

Клиент сопоставляет целый сегмент речи со спектральными шаблонами методом DTW. Из-за этого после «Алиса» требуется короткая пауза. Оценки пропусков и ложных срабатываний на расстоянии, под музыку и у разных людей пока нет. Клиент использует один канал микрофона и простой даунсемплинг, AEC и прерывание речи в ответе отсутствуют.

До локального срабатывания соединение с сервером не открывается. После сигнала начало команды буферизуется в RAM, а слово активации остаётся на колонке. Проверенное состояние кнопки mute на этой Mini 2 читается из /sys/class/gpio/gpio414/value, где 1 означает разрешённый микрофон. В mute клиент отбрасывает вход, сбрасывает состояние детектора и прерывает текущую передачу. При недоступном GPIO применяется то же поведение. Состояние можно читать из другого узла через -mute-gpio, если на конкретной ревизии этот сигнал расположен иначе.

Проверка из файла

export DEVICE_TOKEN="$(cat device-token)"
./alice-station -mode file -input /path/to/input.pcm

Этот режим отправляет тестовый файл (mono PCM16LE, 16 кГц, до 30 секунд) и выводит ответ через ALSA (mono PCM16LE, 24 кГц). Микрофон при этом не открывается.