Streams block game. Plays block game. Talking with people.
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
- Speech
- 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. Общается с игроками и зрителями в реальном времени.
Подробнее с проектом можно ознакомиться на хабре, здесь только общее описание технической части.
Это что-то вроде списка технологий, фич и содержания одновременно =)
- Бот для автоматической игры - (хабр) - (репо) + 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
- Диалоговая система - (хабр) - HyperAI_Models/LLM
-
RAG-like подход (хабр со всеми схемами)
-
шаблоны промптов можно перезагружать прямо во время выполнения (они перезагружаются каждый раз при генерации текста, это сделано для непрерывного тестирования и разработки)
-
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-окно с доступом к основным функциям
- Система выбора релевантного вопроса - .../ChooseQuestion
⚠️раздел находится в доработке⚠️
👨🏻💻инструкция не для начинающих👨🏻💻
Это просто краткий гайдлайн, настоящая инструкция будет делаться позже если будет востребована. Подробности некоторых моментов можно вычерпнуть из хабра.
🖥️ ▷ Системные требования
Характеристика | Рекомендуется | Минимально |
---|---|---|
ОС | Windows | - |
ОЗУ | 48 | 16 |
Видеопамять | 24 | 4 |
Версия Python | 3.9.7 | - |
Место на диске | 60 Гб | 30 Гб |
При любых характеристиках, отличающихся от рекомендованных, работа автоматической системы не гарантирована.
Пометка 🚧 означает неготовность раздела
-
Установка игрового клиента
- Установите Minecraft версии 1.18 и скачайте последний релиз Java-бота.
- Установите загрузчик модов Fabric для вашего Minecraft.
- Переместите .jar файл в папку .minecraft/mods.
-
Виртуальный аватар
- Начало: установка модели
- Установите VTubeStudio, например, со Steam.
- Установите модель, которая вам понравится. Автор использовал LiveroID, куча крутых моделей есть в Steam Workshop, можно ставить прямо оттуда.
- Выберите нужную модель в VTube Studio.
- Установка взаимодействия с Python-скриптом.
- Включите VTube Studio Plugins API на порте 8001.
- Позже, при запуске главного скрипта, вам нужно будет разрешить подключающийся к VtubeStudio плагин "test", выйдет диалоговое окно.
- Настройте липсинк
- Включите VTube Studio Plugins API на порте 8001.
- Начало: установка модели
-
Проброс звука через виртуальный кабель
- Установите виртуальный кабель, например, VB-Audio и перезагрузитесь
- Установите в настройках виртуального кабеля (всех возможных, и в разделе динамиков, и в разделе микрофона) пресет "2 канала, 16 бит, 48 000 Гц".
- По умолчанию этот скрипт заточен под VB-Cable A.
- Если вы не устанавливали несколько кабелей, вам придётся в HyperAI.py сменить имя звукового устройства на то, которое используете вы для проброса звука.
- Установите виртуальный кабель, например, VB-Audio и перезагрузитесь
-
Настройка стриминговой программы
- Для проведения трансляций скачайте и установите OBS.
- Создайте 2 сцены - NetTyan и NetTyanDisclaimer.
- они нужны для корректной работы главного скрипта
- В настройках аудио OBS выберите ранее настроенное и выбранное аудиоустройство
- Выведите персонажа на экран добавив источник вебкамера/VTubeStudioCam
- Добавьте субтитры с помощью источника "Браузер". В поле URL вбейте - http://localhost:5000/subtitles/
- Аналогично добавьте значки состояния системы: http://localhost:5000/info/
- Установите оставшиеся настройки OBS - ключ для трансляций, отрегулируйте звук на ваше усмотрение и т.д.
- Для поддержки функций управления трансляцией из скрипта включите OBS WebSocket Server: Сервис/Настройка сервера WebSocket.
-
Подготовка главного скрипта Python
- Клонируйте (скачайте) этот репозиторий (github.com/3ndetz/NeuroDeva) - в любую папку на диске.
- Установите все зависимости Python из requirements.txt (лежит в корневой папке репозитория).
- Для этого у вас должен быть установлен Python
- Идеальная версия - 3.9.7, на ней работал автор
- Автоматизировать скачку и установку библиотек вы сможете, используя IDE PyCharm Community для открытия этого репозитория.
- В нём же автор запускал итоговую программу
- Тип проекта в PyCharm выбирайте "venv", место для папки библиотек - корневая папка репозитория.
- Версия Python: 3.9.7 (оптимальная)
- Для этого у вас должен быть установлен Python
- Отредактируйте затравки в HyperAI_Models/LLM/...
- Переместите из папки .../PROMPTS_HELP эти файлы в папку выше (LLM):
- .../LLMExamples.py
- .../prompts.py
- Отредактируйте string'и в .../prompts.py в соответствии со своими предпочтениями для затравки диалоговой модели.
- Используйте 2 символа "#" для активации перетусовочного механизма.
- Например, текст "#игривый лось#" при выдаче модели будет рандомно перетусован в один из двух вариантов:
- "игривый лось"
- "лось игривый".
- Например, текст "#игривый лось#" при выдаче модели будет рандомно перетусован в один из двух вариантов:
- Отредактируйте большие string'и в .../LLMExamples.py аналогично (вашим предпочтениям)
- Изменение переменных (конфигурация)
- Поменяйте список ников в HyperAI.py/botNicknames на те, которые ваш персонаж будет использовать в игре и в социальных сетях
- Создайте в корневой папке репозитория файл HyperAI_Secrets.py и добавьте туда строковые переменные DiscordToken, DockerAuthKey, TrovoClientID, TrovoAccessToken, Razrabs и OBS_WS_PASSWORD.
- Создайте в папке HyperAI_Docker/other файл HyperAI_DockerSecrets.py и введите туда DockerAuthKey = b"ваш_пароль_к_docker". То же значение той же переменной установите в HyperAI_Secrets.py из предыдущего шага.
-
Подключение к социальным сетям (раздел требует сильной доработки ~~ 🚧)
Если кратко, то надо открыть разраб панель в google dev console, discord. В гугл подключить youtube-data-api-v3, получить все секретные токены закинуть их в папку HyperAI_Social/youtube. В той же папке + HyperAI_YT сменить все токены/id каналов на свои. Подробнее распишу позже, если это понадобится!
-
LLM и STT - Docker (~ 🚧)
- Скачайте и установите Docker Desktop. Если вы на Windows, включите в нём поддержку WSL (загуглите, если не найдёте в настройках).
- Отдельно запустите с помощью Python файл HyperAI_Docker.py и дождитесь окончания работы скрипта. Он установит нужный Docker-контейнер.
- Настройте STT (Speech-to-text) модель
- Скачайте модель .nemo https://huggingface.co/nvidia/stt_ru_fastconformer_hybrid_large_pc/tree/main
- Положите её в по следующему пути
/HyperAI_Models/STT/docker_to_send/stt_ru_fastconformer_hybrid_large_pc/stt_ru_fastconformer_hybrid_large_pc.nemo
-
Запуск главного скрипта (~ 🚧)
- Убедитесь, что все предыдущие шаги настройки выполнены в полном объёме.
- Запустите Minecraft 1.18 с установленным клиентом. Установите ваш ник, который вы указали в коде ранее.
- Запустите
docker_reciever.py
- Откройте терминал созданного контейнера в Docker Desktop
- Введите
python docker_reciever.py
- Дождитесь окончания загрузки STT и LLM
- Запустите Python-скрипт HyperAI.py
- Дождитесь открытия панели управления
-
Запуск трансляции (~ 🚧)
- Выполните все шаги из предыдущего пункта "Запуск главного скрипта"
- Подключитесь к нужному серверу Minecraft с запущенного клиента
- Полностью автоматическая игра в SkyWars поддерживается на данный момент только на MusteryWorld, но там новая капчу, придётся её ввести вручную
- Вы можете использовать другие сервера со SkyWars с запуском вручную:
- подключайтесь к нужной игре
- дожидайтесь запуска
- вводите команду @test killall для включения терминатора
- Запустите стриминговую программу OBS и убедитесь, что всё работает
- Воу, что же это?
- Воин, первым покоривший эверест:
TBI550
- Воин, первым покоривший эверест:
3ndetz, 2024