Skip to content

3ndetz/NeuroDeva

Folders and files

NameName
Last commit message
Last commit date

Latest commit

be6b756 · Feb 21, 2025

History

26 Commits
Jul 7, 2024
Jul 3, 2024
Jul 3, 2024
Jul 6, 2024
Sep 27, 2024
Jul 3, 2024
Jul 3, 2024
Jul 6, 2024
Jul 3, 2024
Sep 27, 2024
Jan 17, 2025
Jul 3, 2024
Jul 3, 2024
Jul 3, 2024
Jul 5, 2024
Jul 5, 2024
Jul 3, 2024
Jul 3, 2024
Feb 21, 2025
Jul 6, 2024
Jul 3, 2024
Jul 3, 2024
Jul 3, 2024

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)

Caution

This is FIRST OLD OPEN PROTOTYPE of NetTyan project

New agentic version currently is in active development and is not ready for final publishing

Caution

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