Skip to content

3ndetz/NeuroDeva

Repository files navigation

NeuroDeva

Streams block game. Plays block game. Talking with people.

Глаза2.gif

Automatic virtual streaming system. Completely autonomous.

Project name aliases: NeuroDeva, NetTyan

Languages: Python, Java (for Minecraft-part)

ML stack:
  • NLP
    • Speech
      • TTS
      • STT
    • generative: T5 LLM
      • dialog system
    • classification: BERT (modified, multiple)
      • toxic detection
      • phrase type classification
  • CV (MC captcha resolver)
    • keras-ocr
    • onnx
Some python packages
  • torch
  • multiprocessing
  • multithreading
  • flask
  • websocket
  • asyncio
  • pysimplegui
  • py4j
  • sqlite
  • tensorflow (a bit)
  • and more, of course...
IDE and other software:
  • JB PyCharm Community and Intellij Idea
  • OBS
  • VTube Studio
  • Docker Desktop (WSL)
  • Made on Windows 10
RepoCodeDisclaimer ⚠️

The "code" presented in the repository is mostly for prototyping. It should not be considered as a sample, it can be useful only to those who will be interested in repeating my experience, and not for "seekers of other people's mistakes" =)

The emphasis was on the fact that in the shortest possible time to make a project that can really impress someone and once again prove the fact that everything is possible 💪

In the code you can see huge commented out dumps, don't pay attention, because I had a choice to publish the code or not. I didn't format it in any way and didn't prepare it for publishing, so I didn't hesitate to leave crutches and other nasty things in there, like debug prints. However, I did format some things, but only the most attentive will notice this "feature".

Коротко о главном

Полностью автоматическая виртуальная стримерша. Играет в Minecraft в мини-режим SkyWars. Общается с игроками и зрителями в реальном времени.

Подробнее с проектом можно ознакомиться на хабре, здесь только общее описание технической части.

ФИЧИ

Это что-то вроде списка технологий, фич и содержания одновременно =)
Структура структуры 📘

Формат: Название - (ссылки) - связанные файлы в репозитории, путь

Ссылки:

  • (хабр): соответствующий раздел статьи на Хабре для подробностей по разработке (для удобства в ней также есть своя навигация).
  • (репо): ссылка на другой репозиторий в GitHub

Проскочить раздел


  • Бот для автоматической игры - (хабр) - (репо) + HyperAI_BRIDGE.py
    • Java-часть: (репо) (хабр)
    • HyperAI_Bridge: сетевой мост между главным Python-скриптом и Java-ботом
    • Собственный ИИ для распознавания MC-капчи (репо) (хабр) (потыкать на HF space)
    • Гифка: сбор ресурсов с побеждённого игрока
  • Виртуальный аватар: VTube Studio - HyperAI_VTube
    • Live 2D: LiveroiD (автор разрешает использование для проведения трансляций)
    • Связь аватара с игрой и речью: эмоции, взгляд - (хабр) - HyperAI.py + HyperAI_BRIDGE.py
    • Гифка: аватар поворачивает взгляд в сторону цели игрового бота
  • Синтез речи - (хабр) - HyperAI.py/TTS_PROCESS
    • Silero TTS (silero-models)
    • Realtime субтитры в OBS через веб-приложение на Flask (хабр)
    • "Проброс" звука в OBS через virtual audio cable (хабр)
  • Наложение динамических элементов в OBS
    • Элементы передаются и обновляются в OBS через веб-приложение на Flask (хабр)
    • Элементы: индикатор настроения и псевдосинхронизированные субтитры (хабр)
  • Диалоговая система - (хабр) - HyperAI_Models/LLM
    • RAG-like подход (хабр со всеми схемами)

    • шаблоны промптов можно перезагружать прямо во время выполнения (они перезагружаются каждый раз при генерации текста, это сделано для непрерывного тестирования и разработки)

    • Пикча схемы сборщика промпта (абстрактно)
    • Хранение постоянных данных с помощью sqlite

      HyperAI.py + HyperAI_Database.py

    • LLM - FredT5 (на Docker) (Почему он? Ответ на хабр!)

    • Фильтры ИИ: токсичность, запретные темы (хабр) - HyperAI_Models/Filters

    • Обычный list-like фильтр на самые "опасные" слова - HyperAI_Models/Filters

  • Распознавание речи - (хабр) - HyperAI_Models/STT/docker_to_send
    • Docker-based. Удобная mount-система, весь не-контейнерный код (и модель) подгружается через диск, поэтому редачьте файлы как хотите прямо в основной репе, в докер лезть не надо)
    • Модель: Nvidia fastconformer hybrid large (HF)
  • Подключение к социальным сетям - чтение чата и публикация ответов (хабр)
    • youtube-data-api
    • twitch-api
    • trovo-api
    • discord-bot-api (pycord)
  • Связующая система - HyperAI.py/...
    • Система выбора релевантного вопроса - .../ChooseQuestion
      • здесь сходятся все полученные сообщения и в приоритет ответа выбирается наиболее релевантный и наименее "агрессивный" вопрос
    • Система синхронизации между процессами
      • (multiprocessing.namespace)
    • Система автоматического принятия решений - .../CentralDecisionMaker/...
      • объявления - доклад "статуса", интересные (или не очень) факты, приветствия зрителей - .../BroadcastProcesser
      • реакция на внутриигровые события (убийство/смерть) - .../EventProcesser
      • реакция на пожертвования DonationAlerts - .../DonateProcesser
      • ответы в чате .../CentralChatProcesser
    • Оболочка диалоговой системы - .../FredT5Chatbot
    • Панель управления
      • Консольное приложение для отладки конкретных функций
      • PySimpleGui-окно с доступом к основным функциям

Инструкция по установке и запуску

⚠️раздел находится в доработке⚠️ 👨🏻‍💻инструкция не для начинающих👨🏻‍💻

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

🖥️ ▷ Системные требования
Характеристика Рекомендуется Минимально
ОС Windows -
ОЗУ 48 16
Видеопамять 24 4
Версия Python 3.9.7 -
Место на диске 60 Гб 30 Гб
При любых характеристиках, отличающихся от рекомендованных, работа автоматической системы не гарантирована.

Пометка 🚧 означает неготовность раздела

  1. Установка игрового клиента
    1. Установите Minecraft версии 1.18 и скачайте последний релиз Java-бота.
    2. Установите загрузчик модов Fabric для вашего Minecraft.
    3. Переместите .jar файл в папку .minecraft/mods.
  2. Виртуальный аватар
    1. Начало: установка модели
      1. Установите VTubeStudio, например, со Steam.
      2. Установите модель, которая вам понравится. Автор использовал LiveroID, куча крутых моделей есть в Steam Workshop, можно ставить прямо оттуда.
      3. Выберите нужную модель в VTube Studio.
    2. Установка взаимодействия с Python-скриптом.
      1. Включите VTube Studio Plugins API на порте 8001.
        • Позже, при запуске главного скрипта, вам нужно будет разрешить подключающийся к VtubeStudio плагин "test", выйдет диалоговое окно.
      2. Настройте липсинк
        1. Установите настройки, у меня такие:
        2. img.png
        3. Выберите устройство звука, через которое будет проходить выводиться TTS вашего персонажа.
          • Я использовал виртуальный аудио кабель, но с помощью него надо пробросить звук по пути tts процесс-vtube-obs
  3. Проброс звука через виртуальный кабель
    1. Установите виртуальный кабель, например, VB-Audio и перезагрузитесь
      1. Установите в настройках виртуального кабеля (всех возможных, и в разделе динамиков, и в разделе микрофона) пресет "2 канала, 16 бит, 48 000 Гц".
        • Если на Windows, то настройки будут в панели управления звуковыми устройствами

        • В любом случае надо изменить настройки и в самой программе кабеля. На Windows она обычно устанавливается в Диск/Program Files/VB/CABLE-A/VBCABLE_ControlPanel.exe

        • img_1.png
      2. По умолчанию этот скрипт заточен под VB-Cable A.
        • Если вы не устанавливали несколько кабелей, вам придётся в HyperAI.py сменить имя звукового устройства на то, которое используете вы для проброса звука.
  4. Настройка стриминговой программы
    1. Для проведения трансляций скачайте и установите OBS.
    2. Создайте 2 сцены - NetTyan и NetTyanDisclaimer.
      • они нужны для корректной работы главного скрипта
    3. В настройках аудио OBS выберите ранее настроенное и выбранное аудиоустройство
    4. Выведите персонажа на экран добавив источник вебкамера/VTubeStudioCam
    5. Добавьте субтитры с помощью источника "Браузер". В поле URL вбейте - http://localhost:5000/subtitles/
    6. Аналогично добавьте значки состояния системы: http://localhost:5000/info/
    7. Установите оставшиеся настройки OBS - ключ для трансляций, отрегулируйте звук на ваше усмотрение и т.д.
    8. Для поддержки функций управления трансляцией из скрипта включите OBS WebSocket Server: Сервис/Настройка сервера WebSocket.
      • Установите пароль и порт, и введите их в HyperAI_OBS.py. img_3.png
  5. Подготовка главного скрипта Python
    1. Клонируйте (скачайте) этот репозиторий (github.com/3ndetz/NeuroDeva) - в любую папку на диске.
    2. Установите все зависимости Python из requirements.txt (лежит в корневой папке репозитория).
      • Для этого у вас должен быть установлен Python
        • Идеальная версия - 3.9.7, на ней работал автор
      • Автоматизировать скачку и установку библиотек вы сможете, используя IDE PyCharm Community для открытия этого репозитория.
        • В нём же автор запускал итоговую программу
        • Тип проекта в PyCharm выбирайте "venv", место для папки библиотек - корневая папка репозитория.
        • Версия Python: 3.9.7 (оптимальная)
    3. Отредактируйте затравки в HyperAI_Models/LLM/...
      1. Переместите из папки .../PROMPTS_HELP эти файлы в папку выше (LLM):
      2. .../LLMExamples.py
      3. .../prompts.py
      4. Отредактируйте string'и в .../prompts.py в соответствии со своими предпочтениями для затравки диалоговой модели.
      5. Используйте 2 символа "#" для активации перетусовочного механизма.
        • Например, текст "#игривый лось#" при выдаче модели будет рандомно перетусован в один из двух вариантов:
          • "игривый лось"
          • "лось игривый".
      6. Отредактируйте большие string'и в .../LLMExamples.py аналогично (вашим предпочтениям)
    4. Изменение переменных (конфигурация)
      1. Поменяйте список ников в HyperAI.py/botNicknames на те, которые ваш персонаж будет использовать в игре и в социальных сетях
      2. Создайте в корневой папке репозитория файл HyperAI_Secrets.py и добавьте туда строковые переменные DiscordToken, DockerAuthKey, TrovoClientID, TrovoAccessToken, Razrabs и OBS_WS_PASSWORD.
      3. Создайте в папке HyperAI_Docker/other файл HyperAI_DockerSecrets.py и введите туда DockerAuthKey = b"ваш_пароль_к_docker". То же значение той же переменной установите в HyperAI_Secrets.py из предыдущего шага.
  6. Подключение к социальным сетям (раздел требует сильной доработки ~~ 🚧)

    Если кратко, то надо открыть разраб панель в google dev console, discord. В гугл подключить youtube-data-api-v3, получить все секретные токены закинуть их в папку HyperAI_Social/youtube. В той же папке + HyperAI_YT сменить все токены/id каналов на свои. Подробнее распишу позже, если это понадобится!

  7. LLM и STT - Docker (~ 🚧)
    1. Скачайте и установите Docker Desktop. Если вы на Windows, включите в нём поддержку WSL (загуглите, если не найдёте в настройках).
    2. Отдельно запустите с помощью Python файл HyperAI_Docker.py и дождитесь окончания работы скрипта. Он установит нужный Docker-контейнер.
    3. Настройте STT (Speech-to-text) модель
  8. Запуск главного скрипта (~ 🚧)
    1. Убедитесь, что все предыдущие шаги настройки выполнены в полном объёме.
    2. Запустите Minecraft 1.18 с установленным клиентом. Установите ваш ник, который вы указали в коде ранее.
    3. Запустите docker_reciever.py
      • Откройте терминал созданного контейнера в Docker Desktop
      • Введите python docker_reciever.py
      • Дождитесь окончания загрузки STT и LLM
    4. Запустите Python-скрипт HyperAI.py
      • Дождитесь открытия панели управления
  9. Запуск трансляции (~ 🚧)
    1. Выполните все шаги из предыдущего пункта "Запуск главного скрипта"
    2. Подключитесь к нужному серверу Minecraft с запущенного клиента
      • Полностью автоматическая игра в SkyWars поддерживается на данный момент только на MusteryWorld, но там новая капчу, придётся её ввести вручную
      • Вы можете использовать другие сервера со SkyWars с запуском вручную:
        • подключайтесь к нужной игре
        • дожидайтесь запуска
        • вводите команду @test killall для включения терминатора
    3. Запустите стриминговую программу OBS и убедитесь, что всё работает
    4. Воу, что же это?
      • Воин, первым покоривший эверест: TBI550

3ndetz, 2024