вторник, 24 декабря 2024 г.

Мои итоги 2024

моё лицо, когда я пишу эти строки

Я воздержался в своё время от итогов 2023, так как они вышли невнятными и депрессивными, но в этом году всё же решился, всё же предыдущие были три года назад. Я вступал в год без каких-то серьёзных планов и собирался импровизировать на ходу. Раскрою сразу конец поста: эта часть не меняется. Увы, планировать что-то сложное в условиях исторических событий является бессмысленным занятием. Нет, я не предлагаю продать всё (и пропить), но большие планы в условные 20 пунктов — это полная ерунда в нынешнее время.

суббота, 21 декабря 2024 г.

Короткий депрессивный пост про мотивацию

 Наткнулся на мысль, что современные управленческие идеи, пришедшие из культуры бигтеха по определению, ведут не то к депрессии, не то к шизофрении, выгоранию в общем :)

Базовая идея мотивации заключается в 100% вовлечении человека в работу, чтобы он прямо ей горел, всего себя ей отдавал. И это хорошо работает, если проект интересный и дела в нём идут замечательно, он выстреливает, растёт, а с проектом — и ценность сотрудника.

Проблемы начинаются с того момента, когда перспективы становятся неясными, что не всегда зависит от сотрудника и компании — есть конъюнктура рынка и другие внешние рамки, которые могут помешать выстрелить. И в этих условиях, когда человек никак не может изменить результат, есть два варианта: 100% гореть, что ведёт к депрессии (сколько ни копай, всё равно не выкопаешь), иначе хотя бы завести хобби. Во втором случае рано или поздно окажется, что проще работать формально и где-то забивать побольше. Очевидно, что второе для конечного индивидуума лучше — проект потом можно и новый начать, а вот расстройство от неудач ещё сто́ит пережить. Но идеи-то требуют противоположного!

В общем, такая себе проблема. Как по мне, идеального решения здесь нет.

вторник, 10 декабря 2024 г.

k-means и pixel-art

 У меня на практике давно встала нехитрая задача перевода картинки в ограниченное количество цветов, по сути — пиксель-арт на минималках. Нужно это в нескольких случаях:

  • Изображение сильно большое и тратить время пиксель-артиста — очень дорого, да и мало кто возьмётся.
  • На изображении немного чётких деталей, так что тратить на него ценное время художника не стоит.
Довольно долго я использовал ручной скриптик на питоне, который считал статистику пикселей, их цветов, пытался как-то через евклидову норму их группировать, но результаты частенько не устраивали — важные цвета терялись, а неважные иногда считались важными.
Попробовал подумать глубже в тему и пришёл к выводу, что технически это... задача кластеризации же! У нас  известно количество кластеров, под которыми подразумеваются результирующие цвета, и нам надо по ним разложить исходные.
Чтобы протестировать эту идею, я взял условный k-means из scikit (sklearn) Питона и попробовал сделать через него — т. е. пиксель по умолчанию имеет тот цвет, что и центр кластера, в который попадает. Но здесь я немного сделал пару хаков - во-первых, цвета взял в HSV, чтобы не кластеризовать условные красные, зелёные и синие цвета, а скорее исходить из оттенка, а во-вторых, добавил мультипликаторы для исходных значений, которые должны давать потенциальное улучшение результата.
Чтобы подизерить результат через евклидово расстояние ищется ближайший подходящий кластер, в который не входит текущий пиксель, оцениваются расстояния до текущего центра и второго и вычисляется вероятность того, что будет браться другой цвет. Это создаёт неплохой эффект, но не идеальный — потому что рандомный дизеринг сам по себе не очень.
В целом результатом доволен, хотя явно можно лучше. В будущем планирую попробовать другие алгоритмы кластеризации, ну и как-то стоит анализировать и само изображение для более хорошего дизеринга.

В заключение небольшой пример:

Исходное изображение

Результат (32 базовых цвета, альфа сохранена, т.к. важное)

Не идеально, но в принципе ок.