Andrew
логично однако
Andrew
об этом не подумал
Vitaliy
по-моему, достаточно свести изображения к одинаковому разрешению, и посчитать попиксельно разницу по каждому цвету (и прозрачности), сложить модули разниц, вывести процент различия по пикселу, посчитать среднее арифметическое для всего массива пикселей. получится вероятность различия. установить допустимый порог
Ohar
Ohar
Ну в общем надо подумать
Ohar
Спасибо за пищу для размышлений
Vitaliy
временная сложность O(N) где N — количество пикселей
Ohar
это да
Дима
Vitaliy
Vitaliy
хотя не, впадлу )
Andrew
все таки я думаю надо усреднять группы 2х2 или 3х3 или NxN или даже NxM
Andrew
так погрешность на всякие невидимые глазу артефакты будет размываться и пороги надо будет ставить ниже
Дима
Vitaliy
кстати, про альфа-канал )))
Vitaliy
Вредоносная версия картинки баннера имеет в своем составе зашифрованный скрипт, располагающийся в альфа-канале RGB изображения. Этот альфа-канал задает прозрачность каждого пикселя. Поскольку это изменение не сильно сказывается на внешнем виде картинки, она лишь незначительно отличается от ее оригинальной версии.
https://m.habrahabr.ru/company/eset/blog/317092/
Ohar
в общем как план сводить к 16×16 пикселей (условно) и считать различия цветов в пределах некой погрешности
Vitaliy
Дима
вы ещё не забывайте, что картинки некратных разрешений будут очень нетривиально различаться после интерполяции, если сравнивать попиксельно
Дима
Vitaliy
кажется, для этой проблемы лучше поискать готовое решение :)
Vitaliy
а перед этим точно определиться с требованиями к решению: какие случаи должны распознаваться как одна и та же картинка
Andrew
дак у чела по одному и тому же урлу я думаю одного и того же разрешения картинки прилетают
Andrew
он говорит они на глаз не различимы
Andrew
а хеши разные дают
Andrew
там достаточно чтобы 1 байт не совпал, чтобы хэши разные получились
Andrew
а челу надо определиться, это та же картинка или нет
Ohar
Всё так
Vitaliy
так вот, если разница в 1 пикселе — попиксельное сравнение ок, решает проблему же
Ohar
У них там какой-то CDN стоит, где пачка серваков с картинками и я так понимаю, они их чередуют. То есть картинки одни и те же, но, видимо, на каком-то из этих серваков они чуть иначе пожаты и я постоянно ловлю отчёты что картинки поменялись
Andrew
вероятнее всего да, чуть разные настройки алгоритма сжатия и привет
Alex ZeroDub
Тут opencv поможет
Alex ZeroDub
Там вроде были такие алгоритмы сравнения
Alex ZeroDub
Ну а я бы сеточку обучил на это :)
Andrew
сеточка как вариант да, но в любом случае там вычислительная сложность выше будет алгоритма в лоб, а точность не факт
Vladimir
https://github.com/mapbox/pixelmatch
Vint
https://github.com/mapbox/pixelmatch
Ага, и последние коммиты в некоторые файлы с сообщением "throw error on image size mismatch")
Но если задача сводится к действительно "одинаковым" картинкам, то похоже на хорошее решение.
ImageMagick тоже умеет такое, например.
Vladimir
Ну там оно под несколько специфичные цели, но посмотреть можно
Vladimir
Тем более если есть предположение что это из за пережатия
Vint
От пережатия спасёт, сам когда-то подобное внедрял, не помню даже на чём) Но вот любой ресайз/кроп/compose картинки - всё, труба. До гугла и всяких tineye - как до луны.
Anonymous
/stat@combot
Anonymous
/stat@combot
Vint
/stat@combot
Dmitry
господа, а кто как обновляет схему БД скажем монго дб, при обновлении приложения
Dmitry
скажем у вас релизится клиентам приложение, и нужно чтобы какие-нить поля добавились в коллекцию итд
Dmitry
как вы это делаете от релиза к релизу
Dmitry
?
Vladimir
Так схемы то нет
Dmitry
знал что будет такой вопрос
Dmitry
поэтому я "расширил" вопрос ниже предложением
Vladimir
В общем подход такой
Vladimir
Можно добавлять все поля как необязательные навсегда
Vladimir
Тогда ничего делать не нужно
Dmitry
я ща объясню к чему - я это. Вопрос консистенции. Когда я релижу сайтец у себя сам на сервере, в принципе это всеравно, но когда у тебя условно веб приложение, которое использует Компания А, ты ей отгрузил версию 1.0.0 но потом ты релизишься скажем несколько раз и там меняешь данные в бд, потом ребята хотят обновиться а БД поменялась скажем, получается что нужно добавлять как-то данные в коллекции
Dmitry
вот интересен опыт
Dmitry
кто как разруливает
Dmitry
я видел делают по принципу папочку и там скрипты, но видел я тока для SQL
Dmitry
как делается это для монги
Vladimir
Ну здесь можно сделать тоже самое
Dmitry
я тут нашел https://www.npmjs.com/package/database-updates
Dmitry
не знаю юзал кто?
Vladimir
Если речь о софте, который периодически обновляется, то это может непросто
Vladimir
Так как должна быть возможность мигрировать с произвольной версии
Dmitry
вот серия таких скриптов
Dmitry
на апдейт базы
Dmitry
и тогда можно с версии на версию
Dmitry
просто мало инфы вообще об этом
Dmitry
мало кто говорит вообще об этом
Ohar
ну нужно чото типа привязки скриптов миграции БД к версиям релизов
Dmitry
вот тоже к этому склоняюсь
Ohar
я бы делал по-нубски примитивно
Ohar
На старте приложения проверяется формат БД и если он не тот, который нужен, то сразу на горячую и исправляется
Ohar
Надёжно как топор
Vladimir
Слишком сложно проверять формат
Ohar
Но кому-то не подойдёт из-за увеличенного на пару сотен миллисекунд времени запуска
Ohar
Vladimir
Тоже сложно
Ohar
эээ чем?
Vladimir
Ну нужно проверить каждое поле на присутсвие по сути
Ohar
Нет, надо проверить таблицы и типы столбцов