/Irene-Voice-Assistant

Ирина - русский голосовой ассистент для работы оффлайн. Поддерживает скиллы через плагины.

Primary LanguagePythonOtherNOASSERTION

Голосовой ассистент Ирина

Ирина - русский голосовой ассистент для работы оффлайн. Требует Python 3.5+ (зависимость может быть меньше, но в любом случае Python 3)

Поддерживает плагины (скиллы)

Статья на Хабре

Установка / быстрый старт

  1. Для быстрой установки всех требуемых зависимостей можно воспользоваться командой: pip install -r requirements.txt

  2. Для запуска запустите файл runva_vosk.py из корневой папки. По умолчанию он запустит оффлайн-распознаватель vosk для распознавания речи с микрофона, и pyttsx движок для озвучивания ассистента Подробнее о pyttsx здесь.

  3. После запуска проверить можно простой командой - скажите "Ирина, привет!" в микрофон

Решение некоторых проблем при установке под Linux здесь: LINUX_INSTALL.md

Общая логика

Запуск всех команд начинается с имени ассистента (настраивается в options/core.json, по умолчанию - Ирина). Так сделано, чтобы исключить неверные срабатывания при постоянном прослушивании микрофона. Далее будут описываться команды без префикса "Ирина".

В движок встроена поддержка локального управления через веб-интерфейс плейером MPC-HC, так что при прочих равных рекомендуется использовать его. Его можно настроить в options/core.json

Плагины

Поддержка плагинов сделана на собственном движке Jaa.py - минималистичный однофайловый движок поддержки плагинов и их настроек.

Плагины располагаются в папке plugins и должны начинаться с префикса "plugins_".

Настройки плагинов, если таковые есть, располагаются в папке "options" (создается после первого запуска).

Готовые плагины/скиллы (уже в папке plugins)

Для каждого плагина написано, требуется ли онлайн. Для отключения удалите из папки

Полная информация: PLUGINS.md

Сторонние плагины

Если вы хотите узнать:

  • какие еще есть плагины от других разработчиков
  • запостить ссылку на свой сделанный плагин

Посетите: janvarev#1

Настройки ядра (core.json)

Настройки конкретных плагинов лучше смотреть в плагинах

{
    "isOnline": true, # при установке в false будет выдавать заглушку на команды плагинов, требующих онлайн. Рекомендуется, если нужен только оффлайн.
    "logPolicy": "cmd", # all|cmd|none . Когда распознается речь с микрофона - выводить в консоль всегда | только, если является командой | никогда
    "mpcHcPath": "C:\\Program Files (x86)\\K-Lite Codec Pack\\MPC-HC64\\mpc-hc64_nvo.exe", # путь до MPC HC, если используете
    "mpcIsUse": true, # используется ли MPC HC?
    "mpcIsUseHttpRemote": true, # MPC HC - включено ли управление через веб-интерфейс?
    "ttsEngineId": "pyttsx", # используемый TTS-движок
    "v": "1.7", # версия плагина core. Обновляется автоматически, не трогайте
    "voiceAssNames": "ирина|ирины|ирину" # Если это появится в звуковом потоке, то дальше будет команда. (Различные имена помощника, рекомендуется несколько)
}

Отладка и разработка (для разработчиков)

Для отладки можно использовать запуск системы через файл runva_cmdline.py.

Она делает запуск ядра (VACore in vacore.py) через интерфейс командной строки, это удобнее, чем голосом диктовать.

  • Подключить собственный навык можно, создав плагин в plugins_. Смотрите примеры.
  • Подключить собственный TTS можно плагином. Как примеры, смотрите plugins_tts_console.py, plugins_tts_pyttsx.py.
  • Также, создав собственный runvoice_ файл, можно, при желании, подключить свойт Speech-To-Text движок.

Speech-to-Text через SpeechRecognition

SpeechRecognition - классический движок для запуска распознавания через Google и ряд других сервисов. Для запуска этого распознавания запустите систему через файл runva_speechrecognition.py.

Для работы потребуется:

pip install PyAudio

pip install SpeechRecognition

Если есть проблемы с установкой PyAudio, прочтите детали у EnjiRouz

Особенности: распознавание числительных. Одна и та же фраза распознается так:

  • VOSK: таймер десять секунд
  • SpeechRecognition (Google): таймер 10 секунд

Поддержка многоязычности

Проект в целом не предполагает поддержки многоязычности, т.к. использует кастомный парсинг слов в плагинах. Но, тем не менее, ядро (vacore.py) совершенно не привязано к языку, и вы можете собрать собственную инсталляцию на другом языке, просто переписав для них плагины.

Несколько языковых фраз, определяющих core-поведение языкового помощника (его имя, а также фразы типа "Я не поняла") настраиваются в файле конфигурации плагина core.

Удаленная работа (сервер-клиент)

Ирина с версии 3.0 поддерживает работу в режиме "сервер-клиент", где на сервере сконфигурировано всё, а на клиентах - только распознавание текста. Так можно делать установку с мультиуправлением.

Для запуска запустите runva_webapi.py

Потребуется дополнительно установка

pip install fastapi
pip install "uvicorn[standard]"

После этого будет запущен Web-сервер, к которому можно будет обращаться за выполнением команд Ирины.

Клиент можно написать самому или взять готовые здесь: https://github.com/janvarev/Remote-Irene

От клиентов сейчас требуется только распознавание, т.е. мало ресурсов.

Детали по вызовам сервера см. в коде runva_webapi.py

Настройки сервера - host,ip,log_level настраиваются в options/webapi.json

Также можно посмотреть документацию fastapi - там есть веб-интерфейс для тестовых вызовов функций.

Contributing

Если вы хотите что-то добавить в проект, хорошо ознакомиться с Политикой CONTRIBUTING.md

Коротко:

  • Под плагины желательно делать отдельные Github-проекты (или размещать их где-то еще), которые вы готовы поддерживать. Ссылки можно кидать в janvarev#1, чтобы ваш плагин нашли другие. Кидать дополнительные плагины в этот проект не нужно - у меня нет времени и сил поддерживать то, в чём я не разбираюсь.
  • Делайте точечные изменения, улучшающие функциональность или фиксящие баги (например, нерабочесть в каких-то условиях). Такие Pull Request с высокой вероятностью будут приняты.
  • Массовые изменения кода (приведения стиля кода к единому, организация импортов) не будут рассматриваться и будут отклонены. Пожалуйста, не делайте их.

Благодарности

@EnjiRouz за проект голосового ассистента: https://github.com/EnjiRouz/Voice-Assistant-App, который стал основой (правда, был очень сильно переработан)

AlphaCephei за прекрасную библиотеку распознавания Vosk ( https://alphacephei.com/vosk/index.ru )