AlexeyBond / Irene-Voice-Assistant

Ирина - русский голосовой ассистент для работы оффлайн. Поддерживает скиллы через плагины.
Other
7 stars 0 forks source link

License: MIT Core tests Core coverage Status MyPy PEP8 Docker build

Это форк/ремейк оригинальной Ирины от @janvarev.

Отличия от оригинальной версии:

Запуск

Через Docker

На данный момент наиболее предпочтительным способом запуска Ирины является запуск её из официального Docker-образа, доступного на DockerHub.

Стабильная версия Ирины доступна в виде Docker-образа (для linux/amd64 и linux/arm64) и может быть запущена следующей командой:

docker run --rm -it --publish 8086:8086 --user="$(id -u):$(id -g)" -v "$HOME/irene:/irene" \
  alexeybond/irene:latest
О правах доступа По-умолчанию контейнер запускается от пользователя с id `1001`. До версии 0.9.1 образ не позволял запуск от имени другого пользователя. С версии 0.9.1 контейнер можно запускать от любого пользователя. Параметр `--user="$(id -u):$(id -g)"` в примере команды выше (и в следующих примерах) позволяет запускать контейнер от имени текущего пользователя, что является наиболее адекватным решением в большинстве случаев. Однако, это не будет работать при использовании папки данных от более ранней версии. Для запуска новой версии от другого пользователя, владельца папки данных нужно сменить, используя команду `chmod`.
Более свежая версия Версия, собранная из ветки master, всегда доступна по тегу nightly: ```shell docker run --rm -it --publish 8086:8086 --user="$(id -u):$(id -g)" -v "$HOME/irene:/irene" \ alexeybond/irene:nightly ```

Далее можно открыть https://localhost:8086/ (или аналогичный адрес на том хосте, где был запущен контейнер) и, разрешив использование самоподписанного сертификата, использовать Ирину через веб-интерфейс.

Для работы с аудио вводом-выводом непосредственно из контейнера, контейнеру нужно предоставить права на работу с аудио устройствами. См. документацию по локальному вводу-выводу

Docker-образ использует HTTPS с самоподписанным сертификатом для облегчения использования веб-интерфейса на удалённой машине - захват микрофона на страницах, расположенных на удалённых машинах с небезопасным подключением не работает. Если использовать HTTPS по тем или иным причинам не нужно, или нужно использовать свой сертификат, то можно удалить или изменить параметры ssl_certfile и ssl_keyfile в настройках плагина face_web_server - через веб-интерфейс или изменив файл config/face_web_server.yaml в папке с настройками.

Приложение будет хранить свои настройки и другие данные в папке, смонтированной к пути /irene (в примере выше - $HOME/irene).

Дополнительные плагины можно класть в подпапку plugins внутри папки смонтированной по пути /irene (в примере выше это будет $HOME/irene/plugins). Дополнительные зависимости для плагинов можно установить следующей командой:

docker run -it --rm --entrypoint pip -v "$HOME/irene:/irene" --user="$(id -u):$(id -g)" alexeybond/irene:latest install -t /irene/deps <имя_зависимости>

Или если для плагина есть список зависимостей в виде файла requirements.txt:

cat путь/к/requirements.txt | \
  docker run -i --rm --entrypoint pip -v "$HOME/irene:/irene" --user="$(id -u):$(id -g)" alexeybond/irene:latest install -t /irene/deps -r /dev/stdin

Из исходников

Работоспособность с версиями python<3.9 не гарантирована.

Перед запуском из исходного кода следует установить зависимости следующей командой:

pip install -r requirements.txt

Эта команда установит все зависимости, какие только могут понадобиться для работы любых плагинов, доступных в этом репозитории. Если Вы не собираетесь использовать некоторые плагины, то от установки некоторых зависимостей можно отказаться, отредактировав файл requirements.txt. Например, если Вы не собираетесь использовать TTS-движок Silero, то можно отказаться от установки библиотеки torch, которая занимает много места и времени.

Для работы веб-интерфейса, нужно собрать его. Для этого понадобится node.js (версии 16.17.0 или выше) и npm. Сборка осуществляется следующими командами:

cd ./frontend
npm ci && npm run build
cd ..

После установки зависимостей, запустить приложение можно следующей командой:

python3 -m irene

По-умолчанию, приложение создаст папку irene в домашней папке текущего пользователя и будет хранить там настройки и другие данные. Расположение этой папки можно изменить передав переменную окружения IRENE_HOME:

IRENE_HOME="$PWD/irene-home" python3 -m irene

Запустить приложение с консольным интерфейсом можно следующей командой:

python3 -m irene -T console

Такая форма команды запуска перепишет часть текущих настроек, так что их придётся откатить вручную.

Для просмотра дополнительных параметров командной строки можно использовать следующую команду:

python3 -m irene --help

Поддерживаемые команды и плагины

Плагины, доступные по-умолчанию реализуют следующие команды:

См. embedded_plugins.

Поддерживается следующие TTS движки:

Дополнительные плагины можно расположить в папке plugins папки данных Ирины (упомянутой ранее IRENE_HOME или папки /irene в Docker-контейнере). Совместимость с плагинами, написанными для оригинальной Ирины не является полной. Инструкция по написанию новых плагинов доступна здесь.

Веб-интерфейс

Веб-интерфейс позволяет взаимодействовать с ассистентом голосом или при помощи текстовых сообщений, а так же редактировать настройки плагинов через графический интерфейс:

Скриншоты веб-интерфейса

Имеется возможность управлять внешним видом интерфейса и набором используемых методов ввода-вывода (см. настройки плагина web_face_frontend) а так же управления доступом к различным ресурсам на веб-сервере (см. настройки плагина web_authentication), например, для ограничения доступа к чтению/изменению настроек для случаев когда веб-сервер доступен из публичной сети.

Telegram-бот

С Ириной можно взаимодействовать через Telegram. Для начала работы достаточно зарегистрировать бота при помощи BotFather, указать токен в настройках плагина face_telegram и перезапустить приложение.

По-умолчанию, бот будет работать только с авторизованными пользователями. Чтобы авторизовать пользователя, воспользуйтесь инструкциями к плагину telegram_auth. Чтобы бот работал с любыми пользователями без авторизации, плагин telegram_auth можно отключить.

По-умолчанию, бот будет как реагировать на текстовые команды, так и распознавать голосовые сообщения и отвечать голосовыми сообщениями дублируя содержимое сообщения текстом. Это поведение можно настраивать отключая/включая плагины telegram_input_audio, telegram_output_audio, telegram_io_plaintext и меняя их настройки.

Клиент для ESP32

В версии 0.5.0 добавлен (пока экспериментальный) способ использования устройств на контроллерах ESP32 в качестве клиентов для сервера Ирины. Подробности с.м. в README в папке подпроекта.