Я сделал адаптивную подсветку монитора

в смысле сам написал

Очень давно на ютуб канале AlexGyver видел подобный проект и хотел сделать что то подобное, но как то не доходили руки. Как то раз я все таки купил адресную РГБ ленту, ардуинки и прочую электронную рассыпуху, но уже не помню зачем, наверное для подобного проекта, но для телека, но это не точно.

Короче как то воскресным утром я проснулся, вспомнил что все компоненты у меня и так валяются, и подумал че бы не сделать подсветку, раз уж комп недавно собрал. Пересмотрел тот ролик и понял что мне скучно просто загрузить софт, и все просто включить, поэтому я решил написать все сам.

Я сделал адаптивную подсветку монитора

Изначально я ожидал закончить все за день, так как не видел ничего сложного и у меня есть chatGPT, который должен был написать все за меня кек (спойлер, справился за два, а нейросетка не очень справляется со средней сложностью проектом)
Начал с очевидного, как читать картинку с монитора, самый тупой вариант делать несколько скриншотов каждую секунду, идея явно будет нагружать комп, но потестить идею все же хотелось. Начал писать скрипт на питоне, ибо я гнусный ящер из штатов, БОЙТЕСЬ МЕНЯ РУСЫ!!!!!! Первый запрос чатГПТ выдал мне модуль mss как "оптимизированный" для частых скриншотов, и результат был так себе, 10 - 15 скриншотов в секунду на моей сборке с райзен 9700x и rtx4080 super и 4k монике. Честно я ожидал чего то подобного, поэтому решил перейти на c++ ибо оно явно будет быстрее. Думал что может попробовать брать картинку каким то образом прям с видеокарты. Поиск привел меня к d3dshot для пайтона и c++, но ни там, ни здесь у меня ничего не заработало. Пока я искал способ делать много скриншотов так же наткнулся в гугле на модуль dxcam для пайтона, немного с ним побадался, так как он возвращает в большинстве случаев None и надо "ждать" новой картинки, что было немного не очевидно. Но результат того стоил, эта штука способна была обеспечить мне 30фпс скриншотов что меня устроило. так то было больше, но надо ведь еще обрабатывать каждую картинку, так что остановился на 30.

Дальше перешел к анализу картинки, померил ленту на мой моник подошло 18 диодав на горизонтальные стороны и 10 на вертикальные. Написал скрипт что бы высчитывать средний цвет на соответствующему диоду зону. Получились примерно такие зоны:

Это кстати спойлер к далнейшему функционалу.
Это кстати спойлер к далнейшему функционалу.

В результате со скриншотами и анализом оказалось что мой комп стабильно может делать 30 итераций в секунду, вообще и 45 и даже 60 иногда, но для стабильности остановился на 30. И для этого, судя по диспетчеру задач, программа жрет примерно 15% ресурсов cpu. Немало, но полагаю что основная проблема в том что у меня 4к моник, тестил скриншот только четверти экрана в 1080 и там все было намного быстрее и менее затратно.

В целом убедившись в работоспособности концепции перешел к графическому интерфейсу, и состряпал эту штуку:

Я сделал адаптивную подсветку монитора

Вот тут уже жестко помогал chatGPT, до этого он был не супер полезен, мне приходилось и самому находить оптимизированный модуль для скриншотов, и писать анализатор для цветов, но опыта с графическим интерфейсом в питоне у меня опыта не было, поэтому полностью решил довериться нейросетке.
Прошло не без эксцессов, изначально он мне подсунул 2 модуля для GUI для окна с настройками и для той функции с превью зонами. Пришлось разбираться самому, переписывать и требовать чтобы он переписывал. С 2 модулями просто был конфлик с работой в фоне и попытке открыть окно настроек повторно пока программа работает. Плюс к этому моменту нейросетка просто не способна была оценивать весь код и при новых генерациях просто выбрасывала куски кода фикся только то что ее просили. И тем не менее интерфейс тоже был закончен.

Дальше перешел к отправке данных в ардуинку и чтение их на ардуинке. Опыта в этом у меня тоже небыло, поэтому я сделал тупую херню отправляя несжатые данные в виде текста. Получилось так хреново что фпс ленты упал с 30 до 1-2. Чат подсказал как правильно, за что ему спасибо, и все восстановилось до 30фпс.
Ну а дальше все просто. Наклеил ленту на моник, спаял углы, припоял к ардунке, поправил последовательность зон, и боялся я только того что питания от юсб 3.0 не хватит на 56 диодов, по подсчетам в максимуме оно жрет 2 ампера, но все же решил рискнуть и оказалось что все работает от одного юсб.

Ну и как результат вышло красиво, мне понравилось немного развить опыт в пайтоне, и испотльзовать эту херню я вряд ли вообще буду) ибо оно жрет 15% проца. Для видосов норм и даже круто, но не для игр. Наверное можно это переписать на c++ и выйдет все гораздо быстрее, в 60 кадрах и 2-3% нагрузки, но займусь я этим наверное никогда.
Если кому интересно глянуть на исходники, то они на моем гитхабе:

Хотя я вот запустил сх2, выглядило красиво и терял я только 3-4 фпс, но и игра не работает в стабильных 60 правда. наверное все же попробую установить чужие программы, надеюсь их писали не такие криворукие как я.

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

479479
3535
1717
77
33
22
22
159 комментариев

Цыганщина какая-то, такой стиль явно не моё

40
5
3
2
1
Ответить

@Anidafio удаляй пост, @Comix Zone не понравилось

20
Ответить

Это стиль, ты ничего не понимаешь!

8
Ответить

Просто яркость убавить процентов до 30 и будет приятная подсветочка, но все равно конечно в филипсах это более продумано и симпатичнее выглядит чем такой колхоз

6
Ответить

Ну я и написал что вряд ли этим буду пользоваться, мне важнее было сделать проект сам по себе

2
Ответить

Напряженщина скорее

Ответить