Skip to content

settings.ini

Aculeasis edited this page Mar 19, 2019 · 125 revisions

Описание настроек по умолчанию. Если mdmTerminal2/src/settings.ini не существует, то он будет сгенерирован автоматически из CFG в main.py.

Если какие-то параметры отсутствуют в settings.ini то они будут взяты из CFG.

Опции логического типа могут иметь 2 состояния (регистр не важен):

  • Включено: on, 1, true, yes, enable.
  • Выключено: off, 0, false, no, disable.

Имена секций и всех параметров должны быть обязательно в нижнем регистре иначе терминал их может проигнорировать.

Режим chrome_mode

Если режим включен, то пауза между ключевым словом и командой не нужна, терминал будет вести запись и искать ключевые слова одновременно. Запросы на распознавания к stt будут происходить чаще.

Для работы в этом режиме у всех моделей должны быть фразы в settings.ini. Лучше удалить все модели перед включением и записать новую (только одну). Это исключает ложное срабатывание - записи в которых нет ключевого слова (или оно не было распознано) будут проигнорированы.

Значение опций будет проигнорировано для записи при активации: no_hello, optimistic_nonblock_tts, ask_me_again, blocking_listener (но они работают для ask: и voice:).

Опция clear_models будет включена принудительно.

settings.ini

[settings]
# 'apikeytts' и 'apikeystt' теперь хранятся не в settings, а в секциях провайдеров
# У каждого провайдера свои 'apikeytts' и 'apikeystt'.
# 'ip_server' переименован в [smarthome] ip.
# Если терминал найдет их в settings, то сам перенес в нужную секцию.

# Провайдер синтеза речи
# google - Ключ не нужен, голос так себе.
# yandex - cм. [yandex]
# aws - Polly от AWS. Нужен аккаунт AWS.
# azure - MS Azure, см. [azure]
# rhvoice, rhvoice-rest - "локальные провайдеры". См. соответствующие секции.
providertts = google

# Провайдер распознавания речи.
# google - Ключ не нужен, хорошо распознает речь.
# wit.ai - нужен ключ.
# microsoft - нужен ключ, не тестировалось.
# yandex - см. [yandex]
# azure - MS Azure, см. [azure]
# pocketsphinx-rest - "локальный провайдер". См. [pocketsphinx-rest]
providerstt = google

# IP терминала, определяется автоматически при первом запуске.
# Используется только для проговаривания.
ip = 

# Чувствительность детектора на фразы-активаторы, задается от 0 до 1.
# Чем выше, тем лучше snowboy будет реагировать на фразы и больше ложных срабатываний.
sensitivity = 0.45

# Будет проигрывать ding.wav при активации
alarmkwactivated = on

# Будет проигрывать dong.wav перед фразами. Исключение - уточняющие вопросы
alarmtts = on

# Будет проигрывать dong.wav по окончанию записи фразы.
# !!!Если blocking_listener = off, это НЕ сигнал перед началом распознавания речи.
# Распознавание идет параллельно с фразой и начинается почти сразу после ding.wav
# Ждать пока терминал закончит фразу не обязательно.
alarmstt = on

# Сигнал о том что команда успешно распознана и принята в обработку.
alarm_recognized = off

# Если 'ip_server' не задан, то ip первого кто подключится к терминалу станет 'ip_server'.
# Исключение - 127.0.0.1
first_love = on

# Терминал будет отвергать подключения от ip не совпадающих с 'ip_server'
# Включение этой опции без first_love сделает удаленную конфигурацию невозможной.
# Исключение - 127.0.0.1
last_love = off

# Индекс микрофона. Посмотреть индексы можно запустив mdmTerminal2/scripts/mic.py
# Если -1 - устройство по умолчанию.
mic_index = -1

# Запрос к провайдеру TTS не будет блокировать выполнение до генерации аудио.
# Это сокращает время ответа, т.к. запрос будет идти параллельно всяким динг-донгам
# если время отклика TTS большое, паузы между сигналами и фразой могут напрягать.
optimistic_nonblock_tts = on

# Если в записи нет слов или STT не смог ничего распознать, будет переспрашивать
# данное количество раз. Если 0 - не переспрашивает.
ask_me_again = 0

# Несущественные сообщения не будут произнесены (тихий запуск)
quiet = off

# Терминал не будет произносить приветствие при голосовой активации
no_hello = off

# Включает блокирующее распознавание речи (как в mdmTerminal)
# Распознавание начнется после приветствия или звукового сигнала
# При отключении не нужно ждать окончания приветствия,
# терминал будет записывать голос параллельно но может начать записывать сам себя :)
blocking_listener = on

# Сообщать голосом о ошибке распознавания речи.
say_stt_error = off

# Задает уровень коррекции громкости микрофона при поиске ключевых слов.
# Если у вас тихий микрофон попробуйте увеличить значение (например до 2.0),
# если громкий то наоборот - уменьшить. 1.0 - уровень без коррекции.
audio_gain = 1.0

# Лимит времени на запись после того как терминал распознал речь, в секундах.
phrase_time_limit = 12

# Делает все воспроизведения терминала блокирующими.
# Уменьшает вероятность того что терминал запишет сам себя, но его нельзя будет перебить.
no_background_play = off

# См. chrome_mode
chrome_mode = on

# Если включено обнаружение ключевой фразы в chrome_mode будет глушить все звуки.
# Это может быть не очень удобно, т.к. подвержено ложным срабатываниям.
chrome_choke = off

# Если включено будет издавать сигнал по окончанию записи в chrome_mode.
# Подвержено ложным срабатываниям.
chrome_alarmstt = off

# Язык локализации, доступен только русский (и gt_en для тестов).
# Параметры отсутствующие в файле выбранного языка будут взяты из базового языка.
# Базовым языком является ru (src/languages/ru.py).
# Для работы chrome_mode нужно пересоздать все модели при изменении языка.
lang = ru

# Выводит результаты сравнения выбранного языка с базовым при загрузке.
# Может помочь в поиске ошибок. Если выбран базовый язык ничего не делает.
lang_check = off

# Позволяет использовать all-in-one плеер вместо mpg123 и aplay для воспроизведения.
# Соответствующий плеер должен быть установлен. Используйте при проблемах с mpg123/aplay.
# Список доступных плееров можно узнать из лога при запуске.
# Возможные значения: mpv, vlc, mplayer
software_player = 

# Терминал будет сохранять настройки один раз - при завершении работы.
# Удобно, если они меняются часто и нужно сократить операции записи.
# При нештатном завершении работы настройки будут потеряны.
lazy_record = off


[listener]
# Терминал не ждет окончания записи, а начинает сразу распознавать голос,
# увеличивает частоту запросов к stt.
stream_recognition = on

# VAD для определение слов в аудиопотоке: snowboy, webrtc, apm, energy.
# Если использование VAD невозможно, будет использован energy.
# Все режимы кроме snowboy немного увеличивают нагрзуку на CPU.
vad_mode = snowboy

# Позволяет выбрать другой детектор для chrome_mode, значения аналогичны vad_mode,
# пустое значение - детектор из vad_mode.
# Например, `vad_mode = energy, vad_chrome = snowboy` нравится мне больше.
vad_chrome = 

# Чувствительность VAD, только для amp и webrtc. 0...3.
vad_lvl = 0

# Начальный порог энергии для отделения слов от шума, работает только с energy.
# Если меньше 10, будет определен автоматически. Иначе будет использоваться заданный.
energy_lvl = 0

# Динамическая адаптация порога энергии, для energy. 
energy_dynamic = on

# Множитель продолжительности тишины между словами.
# При низком значении может расценить паузу между словами как окончание фразы,
# но будет быстрее заканчивать запись.
# При высоком значении будет дольше слушать тишину.
# Минимальное значение 0.1, максимальное 5.0.
silent_multiplier = 1.0

# Максимальное время ожидание речи после активации, секунд.
# Если речь не будет услышана, терминал прервет запись.
speech_timeout = 3

# Терминал не будет слушать, пока музыкальный плеер играет.
# Нужно подключение к плееру.
no_listen_music = off


[smarthome]
# IP сервера majordomo, нужен для отправки команд.
# Пока он не задан терминал будет проговаривать свой IP при старте.
ip = 192.168.1.197

# Если задан, терминал будет подключаться по указанному адресу в duplex mode.
# Формат строго <proto>:<ip>:<port>
# Поддерживается proto - tcp, tls, ws и wss (TCP, TLS, WebSocket и WebSocketSecure).
# outgoing_socket = tcp:127.0.0.1:7575
# Несовместимо с MajorDoMo.
outgoing_socket = 

# Используется для авторизации входящих\исходящих соединений.
# Если не задан терминал будет использовать случайное значение при исходящих,
# и авторизировать без проверки при входящих соединениях.
token = 

# Если у вас много терминалов можно задать системное имя терминала
# тогда ответы будут приходить только на терминал с которого пришел запрос (наверное).
terminal =

# Если задано уйдет с запросом. Зачем? Я не знаю.
username =

# Если задан и задан username запросы пойдут с базовой аутентификацией.
password =

# Если объект и метод задан будет отправлять уведомления через API
# Подробнее https://github.com/Aculeasis/mdmTerminal2/wiki/callback
object_name = 
object_method = 

# Если объект и метод заданы, будет отправлять запросы при неактивности терминала,
# интервал задается в секундах, параметр status отсутствует.
# 0 - отключено.
heartbeat_timeout = 0

# Подавляет любые исходящие HTTP-запросы на сервер.
# Удобно для использования с duplex mode.
# Включение этой опции ломает совместимость с MajorDoMo.
disable_http = off

# Отключает сервер на 7999 порту.
# Включение этой опции ломает совместимость с MajorDoMo.
disable_server = off

# Позволяет удаленно вызывать любые методы терминала с помощью call.* команд.
unsafe_rpc = off


[snowboy]
# Если включено сноубой не будет компилировать модель если хоть один из образцов отличается
# по звучанию. Позволяет избежать создания плохих моделей.
clear_models = off

# Токен для API. Если этот перестанет работать можно задать свой.
token = d4977cf8ff6ede6efb8d2277c1608c7dbebf18a7

# Похоже что все эти настройки ни на что не влияют, можно не менять.
name = unknown
age_group = 30_39
gender = M
microphone = mic


[music]
# Подключается к медиа-серверу и управляет им.
# Будут работать play: и pause: пришедшие от контроллера умного дома.
# Также может ставить воспроизведение на паузу на время активности терминала.
# Можно настраивать громкость фразой 'громкость музыки <1..100>'
control = on

# Тип плеера, к которому подключается терминал. Доступно:
# - mpd: Music Player Daemon (port 6600)
# - lms: Logitech Media Server (port 9090)
type = mpd

# ip и порт сервера.
ip = 127.0.0.1
port = 6600

# Логин и пароль для аутентификации.
username = 
password =

# Поставит на паузу по: voice_activate, start_record или start_talking.
# Снимет по stop_talking и stop_record.
pause = on

# При снятии с паузы поднимать громкость постепенно.
smoothly = off

# Если больше 0, то вместо паузы будет уменьшать громкость до заданной.
quieter = 0

# Задержка перед снятием с автопаузы, в секундах.
wait_resume = 5

# Для LMS.
# Терминал подключится к первому плееру при совпадении с name, id или ip.
# Иначе, к первому плееру с тем же ip что и у терминала.
# Иначе, к первому попавшемуся плееру.
lms_player = 

[log]
# Задает уровень логирования в файл. Возможные значения: debug, info, warn, error, crit.
file_lvl = debug

# Аналогично file_lvl, но в консоль.
print_lvl = debug

# Разрешает удаленное подключение к логгеру - терминал начнет отправлять в сокет логи в
# режиме реального времени с уровнем debug. Одновременно возможно только одно подключение.
# Для активации нужно подключиться к порту 7999 telnet-клиентом и ввести remote_log.
remote_log = on

# Выводить время в консоль с точностью до миллисекунд.
print_ms = True

# Куда вести логирование. 1 - в файл, 2 - в консоль, 3 - в файл и консоль.
method = 3

# Путь к файлу с логом.
# При первом запуске терминал выберет первую из директорий с правом на запись:
# /var/log, директорию с main.py или директорию для временных файлов
file = /var/log/mdmterminal.log


[yandex]
# Ключи для синтеза\распознавания. Можно использовать разные.
# Если ключ не указан, он будет взят с https://translate.yandex.ru, возможно это работает.
apikeytts = 
apikeystt =

# Если равно 2 используется новый API от Yandex.Cloud
# Вместо старых ключей надо указывать <folderId>:<OAuth> (терминал сам получит IAM),
# о том где их взять: https://cloud.yandex.ru/docs/speechkit/concepts/auth
# https://cloud.yandex.ru/docs/iam/operations/iam-token/create
# Для работы с аудио используется opus, так что opus-tools должен быть установлен.
api = 1

# Эмоциональная окраска голоса. Доступно: good, neutral, evil.
emotion = good

# Голос. Женские: jane, oksana, alyss, omazh. Мужские: zahar, ermil.
speaker = alyss

# Скорость (темп) речи. От 0.1 до 3.0, 1.0 - средняя скорость человеческой речи.
speed = 1.0

# Использовать gRPC вместо унылого HTTP REST API.
# Потоковое распознавание речи будет происходить намного быстрее,
# а с `stream_recognition = on` Yandex сможет сам находить окончание фраз.
# Работает только с Yandex.Cloud (`api = 2`).
# Для поддержки gRPC нужно вручную установить пакеты:
# mdmTerminal2/env/bin/python -m pip install grpcio protobuf
grpc = off


[aws]
# https://aws.amazon.com/ru/polly
# Для доступа нужен акк AWS, первые 5 миллионов символов в месяц первые 12 месяцев бесплатно

# для русского доступны Tatyana и Maxim
speaker = Tatyana

# Данные IAM, для работы достаточно прав на "polly:SynthesizeSpeech" 
access_key_id =
secret_access_key =

# Регион AWS
region = eu-central-1

# Использовать AWS SDK (boto3) для коммуникации вместо нативной реализации.
# Polly будет отвечать на 200-300 ms быстрее, а прокси для aws перестанет работать.
# boto3 должен быть установлен:
# mdmTerminal2/env/bin/python -m pip install boto3
boto3 = off


[azure]
# MS Azure, позволяет распознавать и синтезировать речь.
# Распознает плохо.

# Русские голоса (без кавычек):
# 'EkaterinaRUS'; 'Irina, Apollo'; 'Pavel, Apollo'
speaker = EkaterinaRUS

# Регион, с триальными ключами это первое слово в ссылке, например:
# Endpoint: https://westus.api.cognitive.microsoft.com/sts/v1.0
region = westus

# Ключи для синтеза\распознавания (32 символа), можно использовать один
# Триальные ключи на 30 дней можно получить по ссылке:
# https://azure.microsoft.com/en-us/try/cognitive-services/?apiSlug=speech-services#speech
apikeytts =
apikeystt =


[rhvoice-rest]
# RHVoice TTS запущенный в виде веб-сервиса. https://github.com/Aculeasis/rhvoice-rest
# Голос лучше чем у гугла.
# Один из самый быстрых в плане отклика.
# Отклик на апельсинке с отключенным кэшем примерно 100 мс
# На i7 в виртуалке ~ 20 мс.

# Адрес и порт сервера.
server = http://127.0.0.1:8080

# Голос. Женские: anna, elena, irina. Мужской - aleksandr.
# Можно прописать голос для другого языка, но не все из них могут читать русский.
speaker = anna

# Задает темп, высоту и громкость голоса в процентах. От 0 до 100.
rate = 50
pitch = 50
volume = 50


[rhvoice]
# !!!Крайне не рекомендуется, используйте rhvoice-rest
# RHVoice TTS, получающий поток от RHVoice-test. Для работы с кэшем еще нужен lame.
# Библиотека загружается и инициализируется для каждой фразы, это очень медленно.
# Отклик на апельсинке ~2.2 сек.
# Проверка:
# echo 'This is fine' | RHVoice-test -p slt -o - | lame -thv --silent - | mpg123 -q -

# См. rhvoice-rest
speaker = anna


[pocketsphinx-rest]
# PocketSphinx STT запущенный в виде веб-сервиса.
# https://github.com/Aculeasis/pocketsphinx-rest
# Его единственный плюс в том что он локальный, медленный и не точный
# Имеет смысл ставить на сервер с нормальным CPU и если он вас хорошо понимает.

# Адрес и порт сервера.
server = http://127.0.0.1:8085


[cache]
# Приоритет при поиске в кэше.
# Если ничего - берет кэш только текущего провайдера.
# Если указан - вначале указанного потом текущего.
# Если * - вначале текущего, потом любого.
tts_priority =

# Размер кэша в Мб. Проверяется при запуске.
# Если  0 - кэш не используется и будет очищен.
# Если -1 - кэш не используется и не будет очищен.
# С отключенным кэшем стрим от локальных провайдеров будет идти в wav а не mp3
# что немного быстрее.
# Если вы используете rhvoice-rest лучше всего отключить кэш.
tts_size = 100

# Абсолютный путь до директории с кэшем, начинается с /
# По умолчанию используется /<путь до main.py>/tts_cache
# Не забудьте удалить старую директорию и файлы при изменении.
path = 


[models]
# При успешной генерации персональной модели терминал сохранит сюда название модели
# и фразу, если сможет определить ее через STT
# model2.pmdl = привет алиса
# 
# Если STT часто распознает ключевое слово иначе, можно добавить варианты через `|`.
# Например:
# model1.pmdl = Алиса внимание|Алиса внимания

# Позволяет ограничить используемые модели перечислив имена файлов моделей через запятую,
# при пустом значении будут загружаться все найденные модели.
allow = 


[persons]
# Секция содержит соответствия между моделями и именами пользователей
# если терминал был активирован моделью у которой есть пользователь, то вместе с командой
# придет имя пользователя в username.
# Имя пользователя обладает приоритетом над [smarthome] username
# model2.pmdl = vasyapupkin


[proxy]
# Подробнее о настройках прокси https://github.com/Aculeasis/mdmTerminal2/wiki/proxy
enable = 0
monkey_patching = on
proxy = socks5h://127.0.0.1:9050


[google]
# Говорить медленее.
slow = off


[update]
# Терминал может самостоятельно обновляться с помощью стандартных механизмов гит.
# Для этого он должен быть установлен через git clone, а директория терминала должна
# оставаться валидным и доступным для git pull локальным репозиторием, pull не сработает
# если вы изменяли файлы терминала. Проверить доступность можно с помощью git status.
#
# Обновление засчитывается если хоть один .py файл в src/ изменился, 
# или в Requirements/ появились новые пакеты.
# Время последней проверки обновления и хеш коммита от предыдущего обновления хранятся
# в update.json

# Интервал автоматической проверки обновлений в днях, минимум 1 день.
# Если 0 отключено. Также триггерится через rec:update_0_0
interval = 0

# Установит новые пакеты из Requirements/pip-requirements.txt через pip
# При установке по инструкции это должно работать. Неудача считается ошибкой.
#!Установка некоторых пакетов требует сборки и может потребовать много RAM.
#!Для устройств с RAM <= 512 Mb рекомендуется создать swap >= 512 Mb.
pip = on

# Установит новые пакеты из Requirements/system-requirements.txt через apt-get
# Не сработает если терминал запущен не от рута. Неудача считается ошибкой.
apt = off

# Если 1 завершится после обновления, systemd должен сам его перезапустить.
# Если 0 ничего не делает
# Если -1 сам примет решение завершаться ему или нет.
turnoff = -1

# При ошибке попытается выполнить откат сделанных изменений.
# Это не относится к новым пакетам pip и apt, только файлы терминала.
# Откат до последнего успешного обновления триггерится rec:rollback_0_0
fallback = on


[volume]
# Индекс карты через которую осуществляется вывод звука, определяется автоматически.
# Индексы всех карт можно посмотреть через aplay -l
card = 0

# Устройство через которое происходит управление громкостью. Заполняется
# автоматически. Если не работает или undefined, можно найти устройсто через
# amixer -c 0 scontrols и прописать вручную (Line Out, Lineout volume control и т.п),
# где -c - индекс карты.
# Можно настраивать громкость фразой 'громкость <1..100>'
line_out = Line Out


[noise_suppression]
# Включает алгоритмы обработки аудио встроенные в Snowboy (NS, AGC etc.).
# Опция никак не зависит от `enable` и других настроек секции.
# Работает только для snowboy (детектор ключевых слов и vad_mode = snowboy),
# также увеличивает потребление CPU.
# Рекомендуется включить для некоторых универсальных (.umdl) моделей.
# Крайне не рекомендуется включать вместе с APM.
# https://github.com/Kitt-AI/snowboy/blob/master/include/snowboy-detect.h#L126
snowboy_apply_frontend = off

# Включает APM. Удаление шума будет работать всегда, остальное надо включить.
# Нагрзука на CPU будет выше - 3% -> 9%
enable = off

# APM не будет использоваться пока ключевое слово не распознано. Значительно снижает
# нагрузку на CPU, но может ухудшить адаптацию к уровню шума.
# Работает только в chrome_mode.
conservative = off

# Агрессивность удаления шума, от 0 до 3
ns_lvl = 0

# https://github.com/xiongyihui/python-webrtc-audio-processing
# Остальные настройки APM. Я плохо понимаю что они делают, так что не стал включать
# в конфиг. Если самостоятельно добавить их в конфиг, то они начнут работать.
# Тип AEC, от 1 до 2. При 0 AEC выключен
# aec_type = 0
# Уровень AEC. От 0 до 2. Возможно, работает только с aec_type = 2.
# aec_lvl = 0
# Audio Gain Control. 0 - выключено, 1 - Adaptive Digital AGC, 2 - Adaptive Analog AGC
# agc_type = 0
# Цель AGC, от 0 до 31.
# agc_target = 30
# Уровень AGC, от 0 до 100. Возможно, работает только с agc_type = 2
# agc_lvl = 100


[plugins]
# Включает поддержку плагинов.
enable = on

# Белый список плагинов, разделяется запятыми.
# Если не пуст, плагин не будет загружен если его имени нет в списке.
whitelist =

# Черный список плагинов. Плагин не будет загружен если его имя в списке.
blacklist =

# Автоматически добавлять плагины в черный список при ошибке.
blacklist_on_failure = off


[system]
# Секция для хранения различных состояний терминала.
# Изменять ее параметры нельзя.
You can’t perform that action at this time.
You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session.