Слёзы, боль и оптимизация или как я пытался в VLM
Когда я начинал только изучать Python я думал, что данный язык может только в бэкенд, может выводить какую-то инфу в консоль или в веб, но не более. Но тут я загорелся написать приложение, которое сможет быть с UI, запускаться при помощи exe файла, чтобы ты мог работать с ним напрямую и в тоже время чтобы оно могло быть хоть кому-то полезным, а не очередная программа с концепцией того старого ролика “Смотрите я сделал”. Идея приложения пришла мне сама собой, мне захотелось сделать своё Lo-Fi Radio, но только чтобы оно еще и подстраивалось под то, что происходит на экране. Так я и начал свою работу. Для воспроизведения музыки я выбрал VK, только из-за его неизменяемого стиля, а значит неизменяемых годами селекторов. Под капотом у нас лежит связка Selenium + Moondream + CustomTkinter. Выбор был именно такой, чтобы максимально упросить себе жизнь и не нагружать бедный ноутбук. Работает всё это предельно просто, при запуске приложения нужно только указать какой плейлист в вк отвечает за то или иное настроение, после этого мы авторизовываемся в ВК с помощью Selenium, далее скрипт переходит на страницу плейлистов и ждет команды от VLM Moondream. Тем временем, пока мы авторизовывались у нас качалась сама модель. После того как она скачалась, скрипт делает скриншот экрана, передает его в модель, которая анализирует его и отвечает на то, что происходит на экране одним из предложенных вариантов. После ответа, она возвращает его в Selenium, который находит плейлист подходящий под то, что происходит на экране и запускает музыку. Также у приложения есть второй режим работы при котором оно работает как обычный плеер, без нейронки, а соответственно без нагрузки на устройство. Самое приятное, что после авторизации все процессы выполняются в Headless режиме, т.е браузер не виден, не мешается и всё работает без пользователя. Самое сложное, что было в процессе разработки это оптимизация, стоит сразу сказать, что мой ноутбук имеет только энергоэффективные ядра, а на борту имеет IntelN150 и 16gb RAM, таким образом я был очень ограничен в производительности. Чтобы всё получилось мне пришлось урезать скриншоты до минимального для модели размера ( чтобы она просто могла понимать что происходит на экране), вводить кеш уже сохраненных скриншотов в виде хэшей, которые каждый раз при скриншоте отправляются в модель, сравниваются по хэшу и если они похожи, то повторный анализ не выполняется. Таким образом у меня получилось сократить анализ изображения с 15-20 минут до 3-4 в зависимости от загруженности процессора. По итогу самым сложным при разработке данного приложения оказалась именно оптимизация, мне хотелось сделать так, чтобы на моем устройстве это было способно работать без причинения неудобств, а на более мощных компьютерах оно прям летало.
Если кто-то захочет ознакомиться с ним, то ссылка на гитхаб: Gagfas/VKMusicBot: Бот для автоматического переключения музыки ВКонтакте при помощи ИИ.