1 место Большой пак для работы с изображениями: уникализация, нарезка и анализ схожести изображений

spesy

Активный пользователь
Регистрация
08.08.2016
Сообщения
161
Благодарностей
168
Баллы
43
Всем привет!
Наверное многие знают меня по темам по ВК, ФБ и Инсте. Но если не знаете, не суть)

При работе с социальными сетями очень много внимания приходится уделять работе с изображениями. Обрезка, уникализация, очистка екзифа и многое другое. Многое, подсмотрел из апи соцсетей. Кое-что делал исходя из собственных гипотез. Сегодня я хотел бы поделиться некоторыми своими наработками по такому плану:
1. Простейшая уникализация (по большому счету для обучения работы графикой на зенке+c#)
2. Шаб по разрезке картинок для лендинга Инсты (практическая применимость на уровне медиум. Можно переделать под разные задачи)
3. Уникальный шаблон по поиску и анализу похожести изображений на основе подсчета расстояния Хемминга. (здесь практическая применимость максимальна: можно использовать в любых коммерческих проектах по работе с изображениями, создавать свои нейронки, включать в свои проекты и не бояться повторов изображений при постинге (как например делаю я). Если прикинуть, то с легкостью можно найти ещё до десятка применений)

1. Простейшая уникализация.

5ca06e8b28a52e88b88eeea8fcc20ee8-1024x683.jpg


Алгоритм взял из одного сервиса по постингу в соцсеть.
Суть следующая:
1 Генерим массив координат картинки (пикселей), в примере 1000 значений
2 Прогоняем в цикле этот массив и присваиваем пикселю, который находится по значению массива, цвет соседнего пикселя.
На выходе картинка практически не меняется визуально, но уже другая. Для большей уникализации можно менять не на соседний, а через несколько пикселей. В этом случае картинка будет меняться визуально больше, но и уникализация выше.
Сделано максимально на c#

2. Шаб по разрезке картинок для лендинга Инсты

178411-358458-1-1540589255.jpg


Была такая мода делать ленгинги для Инсты разрезанием на несколько картинок большой картинки.
Алгоритм:
1 Рассчитывается картинка как резать
2 Разрезается на 12 квадратов
3 Заполняются поля
Получаем картинки для загрузки в аккаунт. Также можно делать и для ВК, если изменить циферки. Довольно часто приходится что то резать, заполнять в изображениях. Поэтому разобраться в алгоритме думаю будет полезно.
Сделано максимально на c#

3. Уникальный шаблон по поиску и анализу похожести изображений

photo_2019-09-10_17-15-05.jpg


Ну и наконец, серьезная научная штука):dq:
Изначально мне надо было НЕ постить в свои группы похожие посты. Т.е. собирал я их из разных групп/доноров, но похожих тематик. И вероятность того, что со временем попадется одинаковый пост стремилась к 99.99999% . Что для меня было просто возмутительно. Можно было бы конечно искать по тексту поста, но это так себе способ. Всё таки картинка может быть и с другим текстом. Поэтому было принято решение - рыть! В итоге нашелся способ определеня похожих картинок. Вот здесь он описан очень подробно.
Краткий алгоритм:
1. Уменьшаем размер картинки,
чтобы видны были только наиболее выделяющиеся контуры.
Самый быстрый способ избавиться от высоких частот — уменьшить изображение. В данном случае мы уменьшаем его до 8х8, так что общее число пикселей составляет 64. Можно не заботиться о пропорциях, просто загоняйте его в квадрат восемь на восемь. Таким образом, хэш будет соответствовать всем вариантам изображения, независимо от размера и соотношения сторон.
2. Убираем цвет. Маленькое изображение переводится в градации серого, так что хэш уменьшается втрое: с 64 пикселей (64 значения красного, 64 зелёного и 64 синего) всего до 64 значений цвета.
3. Находим среднее значение яркости получившегося изображения.
4. Бинаризация картинки. Оставляем только те пиксели, которые больше среднего (считаем их за 1, а все остальные за 0).
5. Строим хэш. Переводим полученные 64 значений 1 и 0 картинки в одно 64-битное значение хэша.
Теперь осталось самая малость)) Закодить его в зенке, точнее большая часть на c#. Сказано-сделано-затестировано. Работает замечательно. Чем меньше разница хешей, тем более похожее изображение.
Сделано максимально на c#

Спасибо за внимание! Будут вопросы - пишите!:bt:
 
Категория
Другое
Номер конкурса шаблонов
Четвертый конкурс шаблонов
Уровень сложности
Продвинутый

Вложения

Для запуска проектов требуется программа ZennoPoster или ZennoDroid.
Это основное приложение, предназначенное для выполнения автоматизированных шаблонов действий (ботов).
Подробнее...

Для того чтобы запустить шаблон, откройте нужную программу. Нажмите кнопку «Добавить», и выберите файл проекта, который хотите запустить.
Подробнее о том, где и как выполняется проект.

Master4eg

Client
Регистрация
06.04.2016
Сообщения
421
Благодарностей
122
Баллы
43
Лайк. 3 Способ как раз есть куда применить, только наоборот в поиске похожего изображения)
 
  • Спасибо
Реакции: spesy

DrunkDeath

Client
Регистрация
24.12.2014
Сообщения
589
Благодарностей
402
Баллы
63

Juniorcpa

Client
Регистрация
27.05.2014
Сообщения
2 031
Благодарностей
1 286
Баллы
113
Кайф, запилю к себе в проект полюбому что-то :-)
 
  • Спасибо
Реакции: spesy

Nike59

Client
Регистрация
05.08.2011
Сообщения
122
Благодарностей
122
Баллы
43
Отлично! Особенно впечатлил и порадовал алгоритм проверки изображений на похожесть. Прикручу к своим шаблонам.
 

Zennovods

Client
Регистрация
11.02.2019
Сообщения
212
Благодарностей
126
Баллы
43
Огонь!
 
  • Спасибо
Реакции: spesy

Dr.Pipetka

Client
Регистрация
12.12.2017
Сообщения
1 307
Благодарностей
865
Баллы
113
Годно! Как раз надо похожие изобрадения фильтровать.
 
  • Спасибо
Реакции: spesy

spesy

Активный пользователь
Регистрация
08.08.2016
Сообщения
161
Благодарностей
168
Баллы
43
Спасибо за хорошие отзывы! Если интересно, то можем совместно накидать варианты куда можно приделать проверку изображений)
 
  • Спасибо
Реакции: kagorec

Danko33

Client
Регистрация
07.03.2019
Сообщения
69
Благодарностей
23
Баллы
8
Не пойму, как пользоваться первым шаблоном (простая уникализация). Путь к первой картинке, путь ко второй картинке. Шаблон сравнивает их или уникализирует?
 
  • Спасибо
Реакции: spesy

spesy

Активный пользователь
Регистрация
08.08.2016
Сообщения
161
Благодарностей
168
Баллы
43
Не пойму, как пользоваться первым шаблоном (простая уникализация). Путь к первой картинке, путь ко второй картинке. Шаблон сравнивает их или уникализирует?
первый путь - исходная картинка
второй путь - уникализированная
 
  • Спасибо
Реакции: Danko33

Master4eg

Client
Регистрация
06.04.2016
Сообщения
421
Благодарностей
122
Баллы
43
Можно ли как-то "Увеличить четкость распознавания"? Я сейчас сравниваю разные части на одной картинке, выдало 3 места с минимальным значением, но мне нужно обязательно только одно самое подходящее
 

spesy

Активный пользователь
Регистрация
08.08.2016
Сообщения
161
Благодарностей
168
Баллы
43
Можно ли как-то "Увеличить четкость распознавания"? Я сейчас сравниваю разные части на одной картинке, выдало 3 места с минимальным значением, но мне нужно обязательно только одно самое подходящее
в этом алгоритме достаточно сложно увеличить градацию. Для увеличения четкости нужно использовать алгоритм основанный на расчете pHash. Он будет гораздо медленнее, но будет более терпимее к изменениям картинки. Но я подумаю как тут можно увеличить шаг.
 

Master4eg

Client
Регистрация
06.04.2016
Сообщения
421
Благодарностей
122
Баллы
43

Zheka84

Client
Регистрация
13.10.2018
Сообщения
163
Благодарностей
24
Баллы
18
Для большей уникализации можно менять не на соседний, а через несколько пикселей
Здравствуйте, подскажите пожалуйста какие параметры менять, что бы добиться большей уникализации, что-то никак не пойму. И спасибо за шаблоны.
 
  • Спасибо
Реакции: spesy

tatarin

Client
Регистрация
28.10.2012
Сообщения
805
Благодарностей
137
Баллы
43
Попробывал уникализатор, для яндекса не помогло!:(
 

spesy

Активный пользователь
Регистрация
08.08.2016
Сообщения
161
Благодарностей
168
Баллы
43
Здравствуйте, подскажите пожалуйста какие параметры менять, что бы добиться большей уникализации, что-то никак не пойму. И спасибо за шаблоны.
Приветствую! Для более точного сравнения надо использовать алгоритм с вычислением pHash он похож (он в статье есть), но требует доработки. запланировал его сделать, т.к. попросило уже 4 человека. Поэтому примерно через 2 недели выложу его здесь. Пока просто ахтунг по времени.
Попробывал уникализатор, для яндекса не помогло!:(
яндекс и вообще поисковики используют алгоритм сравнения изображений из п.3 статьи. Поэтому надо или увеличивать шум или делать вращения/отображения картинки.
 
  • Спасибо
Реакции: Lanidor и daVinchi

Zheka84

Client
Регистрация
13.10.2018
Сообщения
163
Благодарностей
24
Баллы
18
Приветствую! Для более точного сравнения надо использовать алгоритм с вычислением pHash он похож (он в статье есть), но требует доработки. запланировал его сделать, т.к. попросило уже 4 человека. Поэтому примерно через 2 недели выложу его здесь. Пока просто ахтунг по времени.
Вероятно не правильно меня поняли... или я не понял :-) я спрашивал за первый шаблон - уникализатор. Вы написали "Для большей уникализации можно менять не на соседний, а через несколько пикселей ". Как это реализовать? Если я чего-то не понял - извините)
 

Eduard

Новичок
Регистрация
26.07.2013
Сообщения
15
Благодарностей
5
Баллы
3
яндекс и вообще поисковики используют алгоритм сравнения изображений из п.3 статьи. Поэтому надо или увеличивать шум или делать вращения/отображения картинки.
А в чем тогда смысл такой уникализации?
 

spesy

Активный пользователь
Регистрация
08.08.2016
Сообщения
161
Благодарностей
168
Баллы
43
Вероятно не правильно меня поняли... или я не понял :-) я спрашивал за первый шаблон - уникализатор. Вы написали "Для большей уникализации можно менять не на соседний, а через несколько пикселей ". Как это реализовать? Если я чего-то не понял - извините)
Вот эта строчка отвечает за замену на соседний пиксель - http://joxi.ru/nAyO6BPtgDpn1m +1 это смещение координаты на 1 . Если сделть смещение на +10 то будет картинка не такая четкая и более уникализированная.
Также совсем просто можно добавить инструментами кубика зенки Обработка изображений - поворот картинки, отображение и генерация exif . Это я не стал делать в примере, потому как реализации этого уже есть на форуме.
Всё в сочетании дает хороший универсальный результат.
 
  • Спасибо
Реакции: Lanidor

She

Client
Регистрация
11.01.2017
Сообщения
122
Благодарностей
23
Баллы
18
Здраствуйте @spesy.
2. Шаб по разрезке картинок для лендинга Инсты - режет картинки. У вас 3м пунктом указано, 3 Заполняются поля.
У меня получилось только разрезать. Подскажите как заполнять поля, где увидеть поля, как их редактировать?
 

She

Client
Регистрация
11.01.2017
Сообщения
122
Благодарностей
23
Баллы
18
Здраствуйте @spesy
 
  • Спасибо
Реакции: spesy

spesy

Активный пользователь
Регистрация
08.08.2016
Сообщения
161
Благодарностей
168
Баллы
43
2. Шаб по разрезке картинок для лендинга Инсты - режет картинки. У вас 3м пунктом указано, 3 Заполняются поля.
ага да, заполняем посты с этими картинками в аккаунте инсты. Только последовательность не перепутать
 

клок

Client
Регистрация
02.10.2019
Сообщения
17
Благодарностей
3
Баллы
3
первый путь - исходная картинка
второй путь - уникализированная
извиняюсь,всё таки, - шаблон сам уникализирует изображения, или вычисляет разницу между хэшами?
 
Регистрация
13.04.2016
Сообщения
650
Благодарностей
53
Баллы
28
это нечто на уровне: лишь бы ляпнуть...
из первого шаба - то что ты взял массив координат и пристроил ему сбоку пиксель это всё супер, можно внятно объяснить - зенка этого кренделя побрила сама или всё же нашла похожее фото в сети?
я к примеру потестил только первый шаб и нигде ничего уникализированного не нашёл, все поисковики прекрасно видят неуникальность фоток, к тому же фотки теряют качество многократно...
сам то прочти свой пост глазами стороннего наблюдателя, тут далеко не экстрасексы и не всем ясно что у кого в голове...
 

proffman

Client
Регистрация
24.01.2013
Сообщения
547
Благодарностей
51
Баллы
28
Для более точного сравнения надо использовать алгоритм с вычислением pHash... запланировал его сделать, т.к. попросило уже 4 человека.
Еще не передумали? Попробуете? Третий вариант работает совсем непредсказуемо, и точность.... Ну совсем никакая, как и определяет сходство с полностью другим текстом, так и сами копии текстов.
 

spesy

Активный пользователь
Регистрация
08.08.2016
Сообщения
161
Благодарностей
168
Баллы
43
Еще не передумали? Попробуете? Третий вариант работает совсем непредсказуемо, и точность.... Ну совсем никакая, как и определяет сходство с полностью другим текстом, так и сами копии текстов.
да, разбираюсь, непредсказуемо почему? вроде бы дубликаты очень хорошо отсеивает
 

proffman

Client
Регистрация
24.01.2013
Сообщения
547
Благодарностей
51
Баллы
28
да, разбираюсь, непредсказуемо почему? вроде бы дубликаты очень хорошо отсеивает
Хорошо, продолжай )) Одинаковые по размеру скриншоты из соц-сетей, скорее всего отсеивать будет хорошо. А изобраджения разного размера, с разницей в иконках или фото одного и того же человека, почти одни и те же цифры может показывать. Т. к., абсолютно разные человек на фото, но показатель схожести может быть выше (т. е., ближе к нулю), чем фото одного и того же человека. Но это так, с текстами такое же, для обычных постов из соц-сети я думаю будет норм. Я пробовал например скопировать часть текста с форума, помещать в word и менять стили, часто совсем разные тексты показывает, что они ближе похожие, чем одни и те же тексты, но уже с разными стилями, размер шрифта, картинки и т. п.
 

DarkSky

Client
Регистрация
10.01.2019
Сообщения
87
Благодарностей
7
Баллы
8
Здравствуйте ребят, может поможете.
хотим убрать лого с картинки, как переделать код чтоб уникализатор работал конкретно в определенных местах (там где лого)?
 

spesy

Активный пользователь
Регистрация
08.08.2016
Сообщения
161
Благодарностей
168
Баллы
43
хотим убрать лого с картинки, как переделать код чтоб уникализатор работал конкретно в определенных местах (там где лого)?
нужно разделить картинку на части = размеру лого и прогнать
 

smartwisard

Client
Регистрация
17.01.2017
Сообщения
824
Благодарностей
83
Баллы
28
Шаб Unik.xmlz не делает рандом. Правильно?
(P.S. Прошу прощения, что C# не умею читать)
 

Кто просматривает тему: (Всего: 0, Пользователи: 0, Гости: 0)