Это форк/ремейк оригинальной Ирины от @janvarev.
Отличия от оригинальной версии:
- более гибкая архитектура. При разработке этого форка я стремлюсь к тому, чтобы как можно больше функциональности можно было изменить, заменить, расширить или настроить без вмешательства в исходный код приложения. Для этого, в частности, большая часть функциональности вынесена в плагины и может быть заменена или расширена дополнительными плагинами. Например, большинство плагинов от оригинальной версии (формат которых отличается от каноничного формата плагинов для этого форка) поддерживаются за счёт плагина-загрузчика оригинальных плагинов.
- приложение более адаптировано для распространения через установщики/пакетные менеджеры. Предусмотрена возможность разделения пользовательских (принадлежащих пользователю и хранящихся на его устройстве) и встроенных (распространяемых вместе с приложением, управляемых автором приложения) данных и плагинов. Это позволяет распространять приложение с набором предварительно загруженных данных (например, моделей для TTS), встроенных плагинов и файлов настроек по-умолчанию в виде неизменяемого пакета (например, Docker-образа). При этом, сохраняется возможность обновлять приложение не затрагивая пользовательские файлы.
- более гибкий, эффективный и задокументированный сетевой протокол для работы с клиентскими программами и устройствами. Плагины могут расширять протокол для использования функций новых клиентов. Основной недостаток - отсутствие совместимости с клиентами оригинальной версии.
- единый веб-интерфейс, позволяющий работать с сервером в различных режимах плюс управлять настройками.
- локальный голосовой интерфейс, web-интерфейс и Telegram-бот реализованы в виде плагинов и могут работать одновременно в одном процессе.
- поддерживается голосовой вывод на разных языках. Используется в плагине переводчика. Для работы нужно настроить и включить голосовые профили (см. plugin_voice_profiles.py). Пока поддерживается только ограниченное количество языков (см. languages.py).
На данный момент наиболее предпочтительным способом запуска Ирины является запуск её из официального 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: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 движки:
- pyttsx (не работает в Docker-версии, не работает, как минимум, в некоторых Linux'ах)
- Silero V3
Дополнительные плагины можно расположить в папке plugins
папки данных Ирины (упомянутой ранее IRENE_HOME
или папки
/irene
в Docker-контейнере). Совместимость с плагинами, написанными для оригинальной Ирины не является полной.
Инструкция по написанию новых плагинов доступна здесь.
Веб-интерфейс позволяет взаимодействовать с ассистентом голосом или при помощи текстовых сообщений, а так же редактировать настройки плагинов через графический интерфейс:
Имеется возможность управлять внешним видом интерфейса и набором используемых методов ввода-вывода
(см. настройки плагина web_face_frontend
) а так же управления доступом к различным ресурсам на веб-сервере
(см. настройки плагина web_authentication
), например, для ограничения доступа к чтению/изменению настроек для случаев
когда веб-сервер доступен из публичной сети.
С Ириной можно взаимодействовать через Telegram.
Для начала работы достаточно зарегистрировать бота при помощи BotFather, указать токен в
настройках плагина face_telegram
и перезапустить приложение.
По-умолчанию, бот будет работать только с авторизованными пользователями.
Чтобы авторизовать пользователя, воспользуйтесь инструкциями к плагину
telegram_auth
.
Чтобы бот работал с любыми пользователями без авторизации, плагин telegram_auth
можно отключить.
По-умолчанию, бот будет как реагировать на текстовые команды, так и распознавать голосовые сообщения и отвечать
голосовыми сообщениями дублируя содержимое сообщения текстом.
Это поведение можно настраивать отключая/включая плагины telegram_input_audio
, telegram_output_audio
,
telegram_io_plaintext
и меняя их настройки.
В версии 0.5.0 добавлен (пока экспериментальный) способ использования устройств на контроллерах ESP32 в качестве клиентов для сервера Ирины. Подробности с.м. в README в папке подпроекта.