Разное

Поиск похожего изображения: поиск по фото — Найти похожие фотографии онлайн

24.04.2021

Содержание

Поиск похожих изображений, разбор одного алгоритма / Блог компании FunCorp / Хабр

Пришлось мне недавно решать задачку по оптимизации поиска дубликатов изображений.

Существующее решение работает на довольно известной библиотеке, написанной на Python, — Image Match, основанной на работе «AN IMAGE SIGNATURE FOR ANY KIND OF IMAGE» за авторством H. Chi Wong, Marshall Bern и David Goldberg.

По ряду причин было принято решение переписать всё на Kotlin, заодно отказавшись от хранения и поиска в ElasticSearch, который требует заметно больше ресурсов, как железных, так и человеческих на поддержку и администрирование, в пользу поиска в локальном in-memory кэше.

Для понимания того, как оно работает, пришлось с головой погружаться в «эталонный» код на Python, так как оригинальная работа порой не совсем очевидна, а в паре мест заставляет вспомнить мем «как нарисовать сову». Собственно, результатами этого изучения я и хочу поделиться, заодно рассказав про некоторые оптимизации, как по объёму данных, так и по скорости поиска. Может, кому пригодится.

Disclaimer: Существует вероятность, что я где-то напортачил, сделал неправильно или не оптимально. Ну что уж, буду рад любой критике и комментариям. 🙂

Как оно работает:

  1. Изображение преобразуется к 8-битному чёрно-белому формату (одна точка — это один байт в значении 0-255)
  2. Изображение обрезается таким образом, чтобы отбросить 5% накопленной разницы (подробнее ниже) с каждой из четырёх сторон. Например, чёрную рамку вокруг изображения.
  3. Выбирается рабочая сетка (по умолчанию 9×9), узлы которой будут служить опорными точками сигнатуры изображения.
  4. Для каждой опорной точки на основании некоторой области вокруг неё рассчитывается её яркость.
  5. Для каждой опорной точки рассчитывается насколько она ярче/темнее своих восьми соседей. Используется пять градаций, от -2 (сильно темнее) до 2 (сильно ярче).
  6. Вся эта «радость» разворачивается в одномерный массив (вектор) и обзывается сигнатурой изображения.

Схожесть двух изображений проверяется следующим образом:

Чем меньше d — тем лучше. По факту, d<0.3 — это практически гарантия идентичности.

Теперь более подробно.

Шаг первый


Думаю, что про преобразование в grayscale рассказывать особого смысла нет.

Шаг второй


Допустим, у нас есть такая картинка:
Видно, что тут присутствует чёрная рамка по 3 пикселя справа и слева и по 2 пикселя сверху и снизу, которая нам в сравнении совсем не нужна

Граница обрезания определяется по такому алгоритму:

  1. Для каждого столбца рассчитываем сумму абсолютных разностей соседних элементов.
  2. Обрезаем слева и справа такое количество пикселей, вклад которых в общее накопленное различие менее 5%.


Аналогичным же образом поступаем и для столбцов.

Важное уточнение: если размеры получившегося изображения недостаточны для осуществления шага 4, то обрезания не делаем!

Шаг третий


Ну тут совсем всё просто, делим картинку на равные части и выбираем узловые точки.

Шаг четвёртый


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

Шаг пятый


Для каждой опорной точки вычисляется разность её яркости с яркостью её восьми соседей. Для тех точек, у которых не достаёт соседей (верхний и нижний ряды, левая и правая колонка), разница принимается за 0.

Далее эти разницы приводятся к пяти градациям:


Получается примерно вот такая матрица:

Шаг шестой


Думаю в пояснениях не нуждается.

А теперь про оптимизации


В оригинальной работе справедливо указывается, что из получившейся сигнатуры можно совершенно спокойно выкинуть нулевые значения по краям матрицы, так как они будут идентичны для всех изображений.
Однако если внимательно посмотреть, то видно, что для любых двух соседей их взаимные градации будут равны по модулю. Следовательно, на самом то деле, можно смело выкинуть четыре дублирующихся значения для каждой опорной точки, сократив размер сигнатуры в два раза (без учёта боковых нулей).
Очевидно, что при расчете суммы квадратов, для каждого x обязательно будет присутствовать равный по модулю x’ и формулу расчета нормы можно записать примерно так (не углубляясь в переиндексацию):
Это справедливо как для числителя, так и для обоих слагаемых знаменателя.

Далее в оригинальной работе замечается, что для хранения каждой градации достаточно трёх бит. То есть, например, в Unsigned Long влезет 21 градация. Это довольно большая экономия на размере, но, с другой стороны, добавляет сложности при расчёте суммы квадратов разницы двух сигнатур. Надо сказать, что идея эта меня чем-то очень зацепила и не отпускала пару дней, пока однажды вечером не озарило, как можно и

рыбку съесть, место сэкономить и расчёт упростить. Следим за руками.

Используем для хранения такую схему, по 4 бита на градацию:


Да, в один Unsigned Long влезет всего 16 градаций, против 21, но зато массив разницы двух сигнатур будет вычисляться одним xor’ом и 15 сдвигами вправо с вычислением количества выставленных бит на каждой итерации сдвига. Т.е.
Знак нам безразличен, так как все значения будут возводиться в квадрат.

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

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

Собственно, всё. Спасибо за внимание. 🙂

Поиск похожего изображения :: Ilya Siganov’s blog

Небольшой отчет о создании приложения KawaiiSearch — поиска похожих фотографий с помощью сверточной нейросети и kNN

tl;dr; Качаем фотографии из интернетов. Натренированной нейросетью VGG19 вычисляем 4096-мерные вектора каждого изображения. Косинусной метрикой находим ближайшего соседа к целевой картинке. Получаем наиболее похожие картинки в каком-то смысле. Profit!
Source code.

Введение⌗

Еще каких-то 5 лет назад, чтобы сделать свой поиск по картинкам, приходилось погружаться в тонкости машинного зрения. Нужно было придумывать то, каким образом преобразовать картинку в некоторый индекс, отпечаток, по которому можно найти другую, похожую на неё. Судя по всему, для этих целей могли использовать перцептивные хеши и вариации, разные преобразования характеристик изображений и даже каскады Хаара. В общем, всё это напоминало классические алгоритмы эпохи до машинного обучения, когда исследователям основываясь на их восприятии самим приходилось придумывать некоторые модели. Это всё безумно интересно и серьезно, можно защитить не один диплом и диссертацию. Но что примечательно, сейчас существует достаточно простой способ для построения своего собственного движка поиска похожих картинок и начать решать свои бизнес задачи немного проще, чем это было раньше.

Что такое “похожие” изображения⌗

Sheepdog or mop?

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

Как видите, есть некоторые трудности в постановке задачи. Обычно даже не говорят, что две фотографии похожи, а рассматриваю некоторую величину похожести от, скажем, нуля — совершенно похожи, до бесконечности — совершенно не похожи. Измерение этой величины будет зависеть от той формы индексов, которые будет давать некоторый алгоритм; это может быть расстояние Хемминга или расстояние между точками в многомерном пространстве, или ещё что-то. Выбор метрики естественно будет влиять на результат не меньше, чем сам алгоритм поиска признаков в изображениях.

Обзор существующих классических решений⌗

Если посмотреть на обычные алгоритмические методы сравнения изображений, то в основном всё сводится к вычислению некоторой хеш функции над изображением, а потом вычислению расстояния, например, Хэмминга между двумя значениями хешей. Чем меньше расстояние, тем больше картинки похожи между собой.

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

Есть еще несколько алгоритмов, даже на основе каскадов Хаара, но в результате так или иначе, алгоритм очень сильно страдает от преобразований над изображением: от поворотов, отражений, изменений размера, модификации цветности. Но тем не менее они очень быстро работают. Их можно использовать для поиска дубликатов с незначительными искажениями. Но для поиска изображениях, в которых “похожие” определяются в том смысле, что на них изображены коты, а не собаки, алгоритмы этого типа не подходят, да в принципе этого от них и не требуют. Забавно, что еще в 2011 году в комментариях к статьям писали, что невозможно написать такой алгоритм для кошек-собак.

Предлагаемый подход весьма наивный и простой, основывается на использовании машинного обучения и нейросетей. Так сразу в лоб и не совсем понятно чему надо обучать модель. Мы сами не можем сформулировать понятие “похожесть”. Тем не менее есть способ, и для его использования нам понадобится для начала решить задачу классификации.

Классификация изображений⌗

На качественно ином уровне задачу классификации изображений начали решать с 2013 года. Тогда на наборе данных ImageNet пробили барьер в 15% ошибок классификации тысячи видов объектов. С тех пор за 5 лет было спроектировано и натренированно очень много разных моделей нейросетей, и был пробит барьер в 5% ошибок. Самыми успешными из них считаются: VGG16, ResNet50, Inception, GoogLeNet и много других. Большинство их них построено на основе свёрточных нейросетей.

На рисунке вы можете посмотреть как выглядит схематически архитектура VGG16.

VGG16

Слои нейросети на изображении состоят из набора разных фильтров-сверток. Каждый из фильтров отвечает за поиск определенного шаблона, и когда он находит некоторый участок изображения, в котором есть этот узор, то фильтр посылает сигнал в следующий слой. В свою очередь сигналы предыдущего слоя составляют новое изображение для следующего слоя. На рисунке архитектуры VGG16 вы можете видеть, что сначала было цветное RGB изображение размера 224×224 пикселей с 3 каналами(red, green, blue). Потом после прохода первого слоя сверток у нас получилось изображение размера 224×224 пикселей с 64 каналами. Эти каналы уже представляют не цвета, а результаты работы каждого из 64 фильтров-свёрток. И так далее, до изображения 7×7 пикселей с 512 каналами.

Свёртка ищет бублик: https://www.youtube.com/watch?v=p_7GWRup-nQ

Строя каскады свёрточных слоёв и обучая модель, вы получаете слои, содержащие в себе абстракции изображений. Первые слои в себе могут содержать мелкие детали: линии. Далее идут комбинации деталей — фигуры. Следующие слои уже могут содержать формы, а в конце целые объекты.

Feature Visualization of Convnet trained on ImageNet from [Zeiler & Fergus 2013]

Обратите внимание еще на одну интересную особенность свёрточных слоев в этой модели: каждый следующий слой “толще”, так как в нём больше фильтров, но “меньше”, так как изображение специально уменьшают с помощью операции MaxPooling (субдискретизация). Используют этот прием по следующей причине: важнее факт детекции некоторого признака-объекта, чем знание точного расположения этого объекта на изображении. Именно поэтому берут максимум внутри небольшого окошка, тем самым создавая карту расположений признаков.

Max Pool 2×2, http://cs231n.github.io/convolutional-networks/

Ближе к выходу модели у нас имеется маленькое изображение — карта признаков размера 7×7 пикселей с 512 фильтрами. По этой трёхмерной карте всё еще невозможно сделать предсказания классов объектов на изображении — котик или собака. Для того чтобы перейти уже к предсказаниям классов, эту карту укладывают на плоскости с помощью операции Flatten и соединяют с полносвязным скрытым слоем из 4096 нейронов. А дальше классическая схема: еще один скрытый слой с 4096 нейронами и выходной слой с 1000 нейронами, каждый из которых выдает вероятность принадлежности к одному из 1000 классов в задаче ImageNet.

Fine Tuning и переиспользование модели⌗

Как оказалось, сети обученные на данных ImageNet можно переиспользовать для других задач компьютерного зрения. Например, у нас задача отличать кошку от собаки. Вам не надо создавать свою модель CatDogVGG, искать миллионы картинок и обучать с нуля сеть. Всё куда проще! Вы берёте предобученную модель VGG, срезаете последние полносвязные слои нейронов, отвечающие за финальную классификацию(да, так можно), оставляя только внутренние 4096 нейронов, которые соединяете со своими 2 нейрона для выхода кошка-собака. Получается, что вам нужно будет только дообучить модель этим 2*4096 связям, что делается легко и быстро.

Какой физический смысл в срезании последнего слоя сети и подстановки нового? Оказывается, что все слои свертки внутри себя заключают способность “понимать” изображение. А поскольку обучение происходило на тысяче разных классов, то и обобщающая способность этих слоев достаточно сильная. В итоге внешние 4096 нейронов на самом деле выдают вектор характеристик(признаков) любого изображения в целом. Поэтому для того чтобы проходила наша классификация, отличная от изначальной, нам остается дообучить нейросеть только и только переводить этот 4096-мерный вектор в наш вектор предсказаний принадлежности классов, не меняя существующую глубокую свёрточную сеть.

Подобный финт можно провернуть не только с VGG, но и с другими свёрточными архитектурами распознавания изображений. Для этой цели в библиотеке Keras есть даже специальные конструкты, которые вы можете изучить это в разделе keras-applications. Распознавание образов еще никогда не было таким простым!

Поиск похожих изображений с помощью нейросети⌗

Как мы поняли из предыдущего параграфа, срезанная нейросеть производит по своей сути извлечение признаков из изображения и переводит изображение в осмысленный вектор. Получение такого вектора раньше требовало экспертной оценки и придумывания очередного алгоритма хеширований. Полученные теми методами вектора (64-битные хешсуммы) заключали в себе информацию, в лучшем случае, о контурах и простых формах в целом. Нейросеть же даёт как минимум 4096-мерное представление, в котором заключена и форма, и цвет, и целые объекты.

Хорошо, нами получен вектор признаков изображения, что мы делаем дальше? Считать расстояние Хэмминга, как мы это делали с хешами, тут бессмысленно. Здесь мы должны использовать другой подход. Представьте, каждый из векторов куда-то направлен в пространстве, это направление характеризует изображение. Если мы посчитаем вектора для множества картинок, то логично предположить, что похожие картинки будут иметь вектора характеристик расположенные в пространстве близко. Отличной метрикой близости векторов в многомерном пространстве служит косинусная метрика, хорошо себя зарекомендовавшая в задачах классификации текстов.

Косинусная метрика

Чем меньше метрика, тем ближе объекты в векторном пространстве, тем больше похожи изображения по “мнению” нейросети.

Собираем модель как конструктор⌗

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

Я предлагаю построить веб-приложение, похожее на Google Image Search. Для его построения нам понадобятся следующие библиотеки для Python3:

  • Keras и Tensorflow для работы с нейросетями;
  • Numpy (a.k.a np) для математических функций;
  • Sklearn для алгоритма ближайших соседей и косинусной метрики;
  • Flask для веба;
  • Pandas, pillow, scipy, h5py для разных вспомогательных нужд.

Ещё нужно откуда-то взять много изображений на одну тематику. Я скачал все фотографии из блога tokio-fashion (около 50 тысяч фото), надеясь что нейросеть будет находить похожие образы или позы или еще что-нибудь. Кстати анализ fashion-индустрии это отдельная интересная область исследований!

Опишем базовые use-cases, которые мы хотим реализовать:

  • пользователь заходит на страницу;
  • пользователь жмёт кнопку “мне повезет”, тем самым выбирая случайную картинку из всего набора данных;
  • сервер ищет методом ближайших соседей K самых близких вектора к случайно выбранному, эти K векторов будут описывать самые похожие картинки;
  • пользователь видит на странице исходную картинку и 9 похожих с метрикой похожести в подписи.

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

Векторизация базы фотографий⌗

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

from keras.applications import VGG19

model = VGG19(weights='imagenet', include_top=False)

Для более тонкой настройки можно указать имя определенного слоя. Как найти имя слоя — это отдельный анекдот, поэтому я смотрел в исходники модели.

from keras.applications import VGG19
from keras.engine import Model

bm = VGG19(weights='imagenet')
model = Model(inputs=bm.input, outputs=bm.get_layer('fc1').output)

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

from keras.preprocessing import image
from keras.applications.vgg19 import preprocess_input

img = image.load_img(path, target_size=(224, 224)) # чтение из файла
x = image.img_to_array(img)  # сырое изображения в вектор
x = np.expand_dims(x, axis=0)  # превращаем в вектор-строку (2-dims)
x = preprocess_input(x) #  библиотечная подготовка изображения
vec = model.predict(x).ravel()
# ... PROFIT!

Теперь всё тайное стало явью, и осталось дело техники — итерироваться по всем изображениям и для каждого из него произвести векторизацию. Потом сохранить эти вектора в БД или csv файла, не важно. Это мы оставим за кулисами.

Поиск похожего методом kNN⌗

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

from sklearn.neighbors import NearestNeighbors

knn = NearestNeighbors(metric='cosine', algorithm='brute')
vecs = load_images_vectors() #  а это мы уже сделали!
knn.fit(vecs)

Мы выбрали cosine метрику и активировали полный перебор, загрузили все вектора в knn методом fit. Обычно этот метод запускает обучение, но в данном случае он просто сохранит все вектора внутри объекта knn, так как это алгоритм обучения без учителя.

Чтобы получить ближайших соседей, то есть похожие изображения, пишем следующе:

filenames = load_images_filenames()
vec = load_target_image()

dist, indices = knn.kneighbors(vec, n_neighbors=10)
similar_images = [
    (filenames[indices[i]], dist[i]) 
    for i in range(len(indices))
]

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

Тонкий момент. Функция load_images_filenames() возвращает список файлов ровно в том же порядке, в котором они перечислены в массиве load_images_vectors(), так как нам нужно точное соответствие вектора картинке.

Результат⌗

Теперь вы видите, что с точки зрения кода задача теперь стала весьма простой. Но это всё благодаря развитию нейросетей и добрым экспериментаторам, которые выкладывают предобученные модели в интернет, иначе вам пришлось бы это всё самим обучать очень долго и мучительно.

А что в результате получилось? С моим результатом вы можете ознакомиться на сайте kawaii-search, исходники которого доступны на github. Всё это крутиться на сервере google-cloud n1-standard-1 c 3.75GB RAM чего не хватает и пришлось добавить еще столько же swap. Так как задача предсказания не сильно сложная, то видеокарта не нужна.

А в каком смысле теперь определено “похоже”. В случае с fashion датасетом, похожими считаются изображения, на которых есть объекты одних классов. Например, фотографии с только с портфелями, только с обувью одного типа, портреты, прически, руки. Смотрите сами:

ПортфелиОбувьКолье, чокер

Что здесь интересного? Сеть сама решила что для нее похожее. Мы это не контролировали, оно получилось само. Мы потеряли некоторый контроль, но мы можем его вернуть, если сделаем обучения сами. И меня впечатляет то, что я не знаю как можно всё это сделать обычными алгоритмическими методами.

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

Похож = есть один и тот же предмет

Что можно с этим делать⌗

Какие еще реальные задачи можно решать подобным этому подходом? Приведу список первого, что пришло в голову:

  • Написать своё приложение под Android для поиска книги в магазине по фотографии обложки.
  • Приложение-экскурсовод, которое говорит что за здание на фотографии.
  • Простая модель идентификации человека по лицу.
  • Я думаю о том, как бы создать приложение для поиска похожих стилей в fashion-фото.

А что еще можно сделать? Предлагайте в комментариях!

Литература⌗

3 лучших онлайн инструмента для поиска по картинке или изображению | DesigNonstop

3 лучших онлайн инструмента для поиска по картинке или изображению

3

А вы знали, что существуют специальные онлайн сервисы для поиска по картинке или изображению? Скорее всего, вы даже не догадываетесь о том, какую пользу вы можете извлечь для себя, пользуясь этими инструментами. Ну что ж, для тех, кто вообще не имеет представления о том, что же это такое, рассказываем. Поиск по картинке (Reverse image search) — это уникальный метод, включающий в себя поиск копий, похожих или оригинальных изображений в интернете. Поиск по изображению поможет именно в тот момент, когда вам нужен максимально точный результат, а обычного описания по кейвордам недостаточно. Ведь ничто не может более точно описать изображение, как само изображение. В этой пятиминутной статье мы расскажем вам о том, как пользоваться этой техникой, а также о том, какие онлайн-сервисы наиболее удобны, точны и безопасны.


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


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

SmallSeoTools.com
Поиск по картинке от SST является одним из самых впечатляющих инструментов в интернете потому, что с его помощью вы легко сможете найти самые точные и визуально похожие изображения, их дубликаты, а также первоисточники. А все потому, что SST использует искусственный интеллект для анализа контента от Google, Bing и даже Yandex!
 


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


Использовать SST очень просто. Вам нужно перейти по ссылке https://smallseotools.com/ru/reverse-image-search/, после чего вы попадаете на онлайн-платформу по поиску похожих картинок. Там нажимаете синюю кнопку Загрузить и выбираете на компьютере фото, которое вы хотите просканировать на предмет уникальности. Затем нажимаете кнопку Поиск похожих изображений.
 


 
 


Также можно загрузить изображение с внешних источников, например,с Dropbox или Google диск, нажав на соответствующие иконки. Или же вы просто вводите урл изображения в соответствующую графу, и затем также также нажимаете Поиск. Сервис предоставит вам все связанные результаты, которые будут учитывать его оригинальность, использование в интернете и даже авторские права!
 

DupliChecker.com
Возможно, вы уже знаете, что Duplichecker — это известный СЕО инструмент, в состав которого также входит функция поиска по картинкам, что делает его одним из самых продвинутых в интернете. Поиск по картинке охватывает свыше 25 миллиардов проиндексированных изображений. И их число увеличивается каждый день, поскольку база данных сервиса регулярно обновляется.
 


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


Возможности Duplichecker действительно впечатляют — всего за 15 секунд обработать гигантскую базу из 25 миллиардов изображений и выдать более 30 тысяч релевантных результатов! Сервис бесплатен для использования и не требует регистрации.
 

SearchEngineReport.net
Этот бесплатный сервис также является одним из наиболее известных в интернете. Он максимально эффективен в использовании, а также надежен и безопасен. Его отличие в том, что по желанию вы можете сохранить свои результаты поиска, и это будет, прежде всего, безопасно для вас. Недаром, SearchEngineReport считается одним из самых безопасных в интернете.
 


Функционал сервиса интуитивно понятен и предельно прост. Просто смотрим на интерфейс и выбираем нужные опции. Суть такая — загружаем картинку для поиска, нажимаем ввод и получаем результат. Также будет представлена сопутствующая техническая информация об изображении, данные о копиях и плагиате, а также об обратных ссылках и многое другое!
 

Telegram-бот для поиска похожих изображений в канале

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

Алгоритм работы бота
Описанный в статье бот, будет иметь самую минимальную, но работающую реализацию.
Запущенный бот добавляется в канал в качестве администратора и с этого момента начинает индексировать все поступающие в канал картинки.
При нахождении дубликатов, администратору бота присылается отчёт с ссылками на посты копий. Так как всегда существует риск ложного срабатывания, решение об удалении картинки принимает сам администратор.
Бот может запускаться раз в час или даже раз в сутки. Как следствие, бот может быть запущен на локальном компьютере, без необходимости в сервере.
Каналов может быть сколь угодно много, для каждого будет вестись своя база данных.

В базе данных хранится хэш картинки и минимальная информация для нахождения поста в канале.

Остальное уже можно дорабатывать по своему усмотрению. Ссылка на репозиторий с исходниками в конце статьи.

Обработчик бота
Для обращения к Telegram API я буду использовать библиотеку java-telegram-bot-api.

  1. // build.gradle

  2. dependencies {

  3.     implementation ‘com.github.pengrad:java-telegram-bot-api:4.9.0’

  4. }


  1. public class Main {

  2.     public static void main(String[] args) {

  3.         final String botToken = stringProp(«BOT_TOKEN»)

  4.                 .orElseThrow(() -> new IllegalArgumentException(«BOT_TOKEN is required»));

  5.         final var handler = new BotHandler(botToken);

  6.         handler.setAdminId(longProp(«ADMIN_ID»).orElse(0L));

  7.         handler.run();

  8.     }

  9.  

  10.     private static Optional<String> stringProp(String name) {

  11.         return Optional.ofNullable(System.getenv(name))

  12.                 .or(() -> Optional.ofNullable(System.getProperty(name)));

  13.     }

  14.  

  15.     private static Optional<Long> longProp(String name) {

  16.         return stringProp(name).map(Long::parseLong);

  17.     }

  18. }


Настройки для бота (токен бота и id администратора) будут задаваться при запуске из переменной окружения (System.getenv) или из системных параметров (System.getProperty).

Основная работа с ботом будет проходить в классе BotHandler.

  1. public class BotHandler {

  2.     private final TelegramBot bot;

  3.     private long adminId;

  4.  

  5.     public BotHandler(String botToken) {

  6.         bot = new TelegramBot.Builder(botToken)

  7.                 .updateListenerSleep(20_000L)

  8.                 .build();

  9.     }

  10.  

  11.     public void setAdminId(long adminId) {

  12.         this.adminId = adminId;

  13.     }

  14.  

  15.     public void run() {

  16.         bot.setUpdatesListener(updates -> {

  17.             // TODO code

  18.         });

  19.     }

  20. }


В методе run() задаётся обработчик обновлений bot.setUpdatesListener. В updates содержится список из максимум 100 объектов Update. Это именно то, что нам нужно! Так как боту необязательно быстро отслеживать постинг в каналы, период обновления можно повысить (в конструкторе я задал updateListenerSleep(20_000L) 20 секунд), хотя можно запускать бота и раз в день на одну минуту, всё зависит от частоты постинга в канал.

Теперь фильтруем из всех апдейтов только картинки в канале:

  1. bot.setUpdatesListener(updates -> {

  2.     final List<Message> channelPosts = updates.stream()

  3.             .map(Update::channelPost)

  4.             .filter(Objects::nonNull)

  5.             .filter(msg -> msg.photo() != null)

  6.             .collect(Collectors.toList());

  7.     // …

  8. });


Теперь в каждом объекте Message списка channelPosts гарантированно будет массив PhotoSize[], получаемый из метода msg.photo().

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

Здесь кроется возможное улучшение бота. По превью можно также находить похожие видео, анимации или документы (все медиа, у которых доступен PhotoSize getThumb()).

  1. // … channelPosts

  2. for (var post : channelPosts) {

  3.     final PhotoSize photo = getSmallestPhoto(post.photo());

  4. }

  5. // …

  6.  

  7. private PhotoSize getSmallestPhoto(PhotoSize[] photoSizes) {

  8.     return Arrays.stream(photoSizes)

  9.             .min(Comparator.comparingInt(ps -> ps.width() * ps.height()))

  10.             .orElse(photoSizes[0]);

  11. }


Минимальное изображение ищется по количеству пикселей, хотя можно и по размеру файла в байтах (ps.fileSize()).

Теперь нужно скачать файл и получить из него BufferedImage. Также для удобства указания поста в канале я создам класс, который будет хранить два значения: id канала и id сообщения:

  1. for (var post : channelPosts) {

  2.     final PhotoSize photo = getSmallestPhoto(post.photo());

  3.     try {

  4.         final var tgFile = bot.execute(new GetFile(photo.fileId())).file();

  5.         final var url = new URL(bot.getFullFilePath(tgFile));

  6.         final BufferedImage image = ImageIO.read(url);

  7.         final var originalPost = new Post(post.chat().id(), post.messageId());

  8.         // TODO image index

  9.     } catch (IOException | SQLException e) {

  10.         System.err.format(«Error while processing photo»);

  11.     }

  12. }

  13.  

  14. public class Post {

  15.     private final Long channelId;

  16.     private final Integer messageId;

  17.     // constructor, getters

  18.     // equals and hashCode

  19. }


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

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

  1. // build.gradle

  2. repositories {

  3.     jcenter()

  4. }

  5.  

  6. dependencies {

  7.     implementation ‘com.github.pengrad:java-telegram-bot-api:4.9.0’

  8.     implementation ‘com.github.kilianB:JImageHash:3.0.0’

  9.     implementation ‘com.h3database:h3:1.4.200’

  10. }


Работу над индексацией я буду делать в класс ImageIndexer. В библиотеке есть класс h3DatabaseImageMatcher, который предназначен для хранения и поиска хэшей в базе данных. Сделаем метод для инициализации этой базы в зависимости от id канала.
  1. public class ImageIndexer {

  2.     private final Map<Long, h3DatabaseImageMatcher> databases = new HashMap<>(5);

  3.     private final DifferenceHash differenceHash = new DifferenceHash(32, Precision.Double);

  4.     private final PerceptiveHash perceptiveHash = new PerceptiveHash(32);

  5.  

  6.     // TODO processImage

  7.  

  8.     private h3DatabaseImageMatcher getDatabaseForChannel(Long channelId) throws SQLException {

  9.         var db = databases.get(channelId);

  10.         if (db != null) {

  11.             return db;

  12.         }

  13.         var jdbcUrl = «jdbc:h3:./imagesdb_» + channelId;

  14.         var conn = DriverManager.getConnection(jdbcUrl, «root», «»);

  15.         db = new h3DatabaseImageMatcher(conn);

  16.         db.addHashingAlgorithm(differenceHash, 0.4);

  17.         db.addHashingAlgorithm(perceptiveHash, 0.2);

  18.         databases.put(channelId, db);

  19.         return db;

  20.     }

  21. }


БД сохраняется в файл с именем imagesdb_<id канала>. Самая ответственная часть заключается в этих строках:
  1. private final DifferenceHash differenceHash = new DifferenceHash(32, Precision.Double);

  2. private final PerceptiveHash perceptiveHash = new PerceptiveHash(32);

  3. // …

  4. db.addHashingAlgorithm(differenceHash, 0.4);

  5. db.addHashingAlgorithm(perceptiveHash, 0.2);

Это выбор алгоритмов хэширования. DifferenceHash масштабирует изображение до 9×8 пикселей в оттенках серого и сравнивает разницу между соседними пикселями. PerceptiveHash тоже масштабирует изображение, но затем применяет дискретное косинусное преобразование, что позволяет находить дубликаты даже если они немного обрезаны или искажены.

Подробнее об этих и других хэшах можно почитать здесь.

В данном случае, для алгоритмов я подобрал такие параметры, которые нормально индексируют цветные фотографии и рисунки. Для чёрно-белых рисунков или комиксов придётся подбирать другие значения.

Теперь нужен метод, который будет принимать картинку скачанную ботом, добавлять её в базу и выдавать результат нахождения копий.

  1. public SimilarImagesInfo processImage(Post originalPost, BufferedImage image) throws SQLException {

  2.     final Long channelId = originalPost.getChannelId();

  3.     final String uniqueId = originalPost.getMessageId().toString();

  4.     final var db = getDatabaseForChannel(channelId);

  5.     if (db.doesEntryExist(uniqueId, differenceHash)) {

  6.         return new SimilarImagesInfo(originalPost, List.of());

  7.     }

  8.     final List<ImageResult> results = db.getMatchingImages(image)

  9.             .stream()

  10.             .map(r -> {

  11.                 final int messageId = Integer.parseInt(r.value);

  12.                 final var similarPost = new Post(channelId, messageId);

  13.                 return new ImageResult(similarPost, r.distance);

  14.             })

  15.             .filter(r -> !r.isSamePost(originalPost))

  16.             .collect(Collectors.toList());

  17.     db.addImage(uniqueId, image);

  18.     return new SimilarImagesInfo(originalPost, results);

  19. }

  20.  

  21. public class SimilarImagesInfo {

  22.     private final Post originalPost;

  23.     private final List<ImageResult> results;

  24.     // constructor, getters

  25. }

  26.  

  27. public class ImageResult {

  28.     private final Post post;

  29.     private final double distance;

  30.  

  31.     // constructor, getters

  32.  

  33.     public boolean isSamePost(Post other) {

  34.         return post.equals(other);

  35.     }

  36. }


db.getMatchingImages(image) возвращает похожие изображения. db.addImage(..) добавляет изображение в базу. В качестве ключа используется id сообщения в канале, по которому можно восстановить, к какому посту принадлежала копия изображения.

Отчёт о похожих изображениях
Остаётся связать обработчик бота с классом индексирования:

  1. // Main.java

  2. public static void main(String[] args) {

  3.     final String botToken = stringProp(«BOT_TOKEN»)

  4.             .orElseThrow(() -> new IllegalArgumentException(«BOT_TOKEN is required»));

  5.     final ImageIndexer indexer = new ImageIndexer();

  6.     final var handler = new BotHandler(botToken, indexer);

  7.     handler.setAdminId(longProp(«ADMIN_ID»).orElse(0L));

  8.     handler.run();

  9. }

  10.  

  11. // BotHandler.java

  12. final var similarImagesInfos = new ArrayList<SimilarImagesInfo>();

  13. for (var post : channelPosts) {

  14.     final PhotoSize photo = getSmallestPhoto(post.photo());

  15.     try {

  16.         // download image

  17.         final SimilarImagesInfo info = indexer.processImage(originalPost, image);

  18.         if (info.hasResults()) {

  19.             similarImagesInfos.add(info);

  20.         }

  21.     } catch (IOException | SQLException e) {

  22.         System.err.format(«Error while processing photo in %s%n», linkToMessage(post));

  23.     }

  24. }

  25. if (!similarImagesInfos.isEmpty()) {

  26.     sendReport(similarImagesInfos);

  27. }


Также нужно вывести отчёт и прислать его администратору бота в личку (если указан id админа). По id канала и id сообщения будет сгенерирована ссылка на пост.
  1. private void sendReport(List<SimilarImagesInfo> infos) {

  2.     String report = infos.stream().map(info -> {

  3.         String text = «For post » + formatPostLink(info.getOriginalPost()) + » found:\n»;

  4.         text += info.getResults().stream()

  5.                 .map(r -> String.format(»  %s, dst: %.2f», formatPostLink(r.getPost()), r.getDistance()))

  6.                 .collect(Collectors.joining(«\n»));

  7.         return text;

  8.     }).collect(Collectors.joining(«\n\n»));

  9.  

  10.     if (adminId == 0) {

  11.         System.out.println(report);

  12.     } else {

  13.         bot.execute(new SendMessage(adminId, report).parseMode(ParseMode.Markdown));

  14.     }

  15. }

  16.  

  17. private String formatPostLink(Post post) {

  18.     String link = linkToMessage(post.getChannelId(), post.getMessageId());

  19.     return String.format(«[#%d](%s)», post.getMessageId(), link);

  20. }

  21.  

  22. private String linkToMessage(Message msg) {

  23.     return linkToMessage(msg.chat().id(), msg.messageId());

  24. }

  25.  

  26. private String linkToMessage(Long chatId, Integer messageId) {

  27.     return «https://t.me/c/» + chatId.toString().replace(«-100», «») + «/» + messageId;

  28. }

Запуск
Если сейчас запустить бота, то получим ошибку:

Для указания токена бота нужно передать его в переменных окружения. В Intellij IDEA это делается через Run -> Edit Configurations.

В поле Environment variables указываем параметры, разделяя их точкой с запятой.

Добавляем бота в канал в качестве администратора и постим две картинки, оригинал и восьмибитную копию:


В личку (не забудьте начать диалог с ботом, чтобы он мог писать вам, либо не указывайте ADMIN_ID, тогда результат будет выведен в консоль) придёт сообщение о найденном дубликате.

Теперь отправляем ещё одно изображение, на этот раз с изменённой яркостью и наложенным текстом:

Получаем:

Наконец, отправляем ещё две картинки, оригинал и ещё более изменённое и обрезанное изображение:


Бот присылает отчёт:

По значению dst можно судить, насколько похожа картинка. dst 0 означает, что совпадение максимально, а dst 7 говорит о том, что были изменения.



Исходный код проекта: https://github.com/annimon-tutorials/Similar-Images-Bot

Правильный поиск картинки в Интернете или как найти похожее фото в сети [ОБЗОР]

Открою один маленький секрет для начинающих неопытных пользователей (остальные его и так наверняка знают) — искать в сети Интернет можно не только ответы на вопросы заданные поисковикам текстовым методом, но и похожие изображения.

Речь в статье пойдёт про поиск по картинке в Интернете через самые популярные в наших широтах поисковые системы — Яндекс и Google.

Чтоб совсем правильно поняли, уточняю — искать будем изображение, которое в компьютере находится и надо отыскать его первоисточник, копию с другим разрешением, другого размера или качества.

Как найти похожую картинку

Однажды, мне пришлось менять название, меню сайта и его «шапку». Неактуальной стала и картинка используемая как логотип…

Сделал новую, но она оказалась крайне низкого качества…

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

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

Поиск картинки в Google

Всё очень просто — чтоб найти похожее изображение в Google нужно перейти на специальную страницу этого поискового гиганта «Картинки Google» (сделайте закладку на всякий случай)…

…и кликнуть по маленькому фотоаппарату, что правее в строке поиска. Если картинка находится где-то в Интернете (в ленте любимой социальной сети, например), то укажите в появившейся поисковой строке ссылку на неё, а если нужно найти картинку, которая в компьютере находится — тыкаем на вкладку «Загрузить файл»…

Читайте также на сайте:

…загружаем её через кнопку «Обзор…»…

…и сразу получаем результат поиска по картинке в Google…

Кликаем на «Все размеры» и вуаля…

Поисковик нашёл строго конкретное изображение — именно моё, уже сжатое и переделанное. Попытаем счастья в «Похожие» и уже через несколько секунд поиска по картинке — отыскался настоящий качественный первоисточник в высоком разрешении…

Скачал изображение, сделал логотип из него качественный… но моей «фокус-группе» он не понравился и пришлось другой искать (это уже совсем другая история).

Поиск картинки в Яндекс

Отыскать картинку в Яндексе точно также легко, как и в Google — переходим на «Картинки Яндекс» и тыкаем на всё тот же маленький фотоаппарат…

Алгоритм последующих действий не изменился — указываем ссылку на изображение из сети Интернет или загружаем свой файл…

…и получаем результат поиска по картинке в Яндекс, разного разрешения и качества…

Ещё там ниже есть разделы «Похожие картинки» и «Сайты, где встречается картинка», которые иногда тоже здорово помогают отыскать нужное изображение (его первоисточник).

Вместо заключения

Конечно, есть куча других методов и способов найти похожее фото в сети Интернет (разные плагины для браузеров и специальные сервисы), но описал именно классическое простое и лёгкое решение.

Такой поиск картинки в Интернете. До новых полезных советов, компьютерных программ… и интересных андроид-приложений. 😉

ПОЛЕЗНОЕ ВИДЕО

Уверенный пользователь трех домашних ПК с многолетним опытом, «компьютерщик» для всех родственников, соседей и знакомых, в течении 10-ти лет автор более тысячи обзоров интересных и полезных программ для компьютера на собственном софтовом блоге OptimaKomp.RU

Я только обозреваю программы!

Любые претензии — к их производителям!

Все комментарии проходят модерацию

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

Уже более 8-ми тысяч читателей подписалось — присоединяйтесь! 😉

Google поиск похожих изображений API



Я пытаюсь выяснить, есть ли способ сделать поиск похожих изображений google через API?

Я знаю, что поиск изображений api обесценился, но можно ли его использовать? https:/ / developers.google.com / поиск изображений/

Также… Кажется, что вы можете выполнять поиск изображений с помощью пользовательского поиска api, но я не могу понять, возможен ли подобный поиск изображений. http://thenextweb.com/dd/2012/02/14/googles-custom-search-api-now-supports-image-only-results/

Любые зацепки на советы по работе с этим нашим будут оценены по достоинству.

Спасибо!

image api search
Поделиться Источник Joe Hamilton     07 марта 2013 в 22:56

2 ответа


  • Google поиск изображений API для iOS приложение

    Я создаю приложение, в котором пытаюсь реализовать поиск изображений google с помощью Google — image-search API. Я ссылаюсь на это [google API link] ( https:/ / developers.google.com/image-search/v1 / ) .), но у меня есть одна проблема, упомянутая на этой странице (DEPRECATED). Так Могу ли я…

  • Google Поиск Изображений Устарела

    Мне нужно интегрировать поиск Google Images На свой сайт, но я обнаружил, что API устарел. Поэтому в основном я хочу создать интегрированный поиск изображений (не имеет значения, использую ли я yahoo, google, more?), а логотипы брендинга не имеют значения, пока пользователи могут оставаться на…



12

Если у вас есть URL для размещенного изображения (с помощью Dropbox, imgur и т. д.), ответ на https://stackoverflow.com/a/15134958/116891 покажет вам, как найти похожие изображения. В основном,

http://images.google.com/searchbyimage?image_url=YOUR_HOSTED_URL

Поделиться Pat     02 сентября 2013 в 22:28



0

Это обесценивается.
Но мне нужен формат JSON подобных изображений результата.
Итак, я пытаюсь использовать google cse, но это не поддерживается поиском похожих изображений.
Это просто отображаемые Результаты поиска изображений в пользовательском домене.

Другой метод, который я пробую, — это URL.
http:/ / images.google.com/searchbyimage?image_url=YOUR_HOSTED_URL
Но это не то решение, которое мне нужно.
Именно потому, что умеет пользоваться в браузере. Мне нужно JSON.

В заключение я решаю использовать Vision API из Google. Это очень просто.

https:/ / cloud.google.com / видение/

Вы можете попробовать сверху.

Во-первых, получите доступ к URL.
Во-вторых, загрузите свой файл изображения на «Try API»
В-третьих, нажмите «JSON» tab menu на результат.

Вы можете увидеть JSON о подобных изображениях.

Поделиться Unknown     04 июля 2017 в 02:02


Похожие вопросы:


Google поиск изображений api в .NET

У меня есть один api для поиска изображений google, но этот старый и не работает в настоящем поиске изображений google, так что есть ли последний api для поиска изображений google?


Как включить поиск изображений в Google Custom Search API

Пожалуйста, помогите мне с параметрами запроса GET . Проблема: как включить поиск изображений в Google Custom Search API? Руководство находится здесь , но оно работает только для веб-поиска….


Поиск изображений через google в iOS

Мне нужно реализовать поиск изображений в моем приложении iOS с помощью Google search. Я нашел google objective-c API (http:/ / code.google.com/p / gdata-objectivec-client/). Но не нашел примеров…


Google поиск изображений API для iOS приложение

Я создаю приложение, в котором пытаюсь реализовать поиск изображений google с помощью Google — image-search API. Я ссылаюсь на это [google API link] ( https:/ / developers.google.com/image-search/v1…


Google Поиск Изображений Устарела

Мне нужно интегрировать поиск Google Images На свой сайт, но я обнаружил, что API устарел. Поэтому в основном я хочу создать интегрированный поиск изображений (не имеет значения, использую ли я…


Поиск изображений Google через Upload

Поиск изображений API от Google был обесценен: https:/ / developers.google.com / поиск изображений / Мой вопрос в том, где мы теперь можем получить те же самые данные? Он говорит, что перешел на…


Поиск изображений Google в скрипте приложений

Моя цель — иметь электронную таблицу Google docs с ключевыми словами, которую я могу перебирать, выполнять поиск изображений по каждому ключевому слову и сохранять полученное изображение URL в той…


Google Custom Search API-обратный поиск изображений

У меня есть коллекция изображений, для которых мне не хватает информации. Я хотел бы иметь возможность сделать обратный поиск изображений Google, чтобы найти имена, ключевые слова, ссылки на похожие…


Поиск изображений в Google

Я хочу реализовать поиск изображений google в моем приложении android. Но их api возвращают только 64 предмета. Я хочу бесконечный результат поиска, как веб-сторона. Кто-нибудь знает какое-нибудь…


google rest api обратный поиск изображений

Я пытаюсь выполнить обратный поиск изображений с помощью Google REST API с изображением, хранящимся локально. Я использую новый-не устаревший-REST API. Я могу сделать текстовый поиск и получить…

Поиск похожих изображений, разбор одного алгоритма

Пришлось мне недавно решать задачку по оптимизации поиска дубликатов изображений.

Существующее решение работает на довольно известной библиотеке, написанной на Python, — Image Match, основанной на работе «AN IMAGE SIGNATURE FOR ANY KIND OF IMAGE» за авторством H. Chi Wong, Marshall Bern и David Goldberg.

По ряду причин было принято решение переписать всё на Kotlin, заодно отказавшись от хранения и поиска в ElasticSearch, который требует заметно больше ресурсов, как железных, так и человеческих на поддержку и администрирование, в пользу поиска в локальном in-memory кэше.

Для понимания того, как оно работает, пришлось с головой погружаться в «эталонный» код на Python, так как оригинальная работа порой не совсем очевидна, а в паре мест заставляет вспомнить мем «как нарисовать сову». Собственно, результатами этого изучения я и хочу поделиться, заодно рассказав про некоторые оптимизации, как по объёму данных, так и по скорости поиска. Может, кому пригодится.

Disclaimer: Существует вероятность, что я где-то напортачил, сделал неправильно или не оптимально. Ну что уж, буду рад любой критике и комментариям. 🙂

Как оно работает:

  1. Изображение преобразуется к 8-битному чёрно-белому формату (одна точка — это один байт в значении 0-255)
  2. Изображение обрезается таким образом, чтобы отбросить 5% накопленной разницы (подробнее ниже) с каждой из четырёх сторон. Например, чёрную рамку вокруг изображения.
  3. Выбирается рабочая сетка (по умолчанию 9×9), узлы которой буду служить опорными точками сигнатуры изображения.
  4. Для каждой опорной точки на основании некоторой области вокруг неё рассчитывается её яркость.
  5. Для каждой опорной точки рассчитывается насколько она ярче/темнее своих восьми соседей. Используется пять градаций, от -2 (сильно темнее) до 2 (сильно ярче).
  6. Вся эта «радость» разворачивается в одномерный массив (вектор) и обзывается сигнатурой изображения.

Схожесть двух изображений проверяется следующим образом:

Чем меньше d — тем лучше. По факту, d<0.3 — это практически гарантия идентичности.

Теперь более подробно.

Шаг первый


Думаю, что про преобразование в grayscale рассказывать особого смысла нет.

Шаг второй


Допустим, у нас есть такая картинка:
Видно, что тут присутствует чёрная рамка по 3 пикселя справа и слева и по 2 пикселя сверху и снизу, которая нам в сравнении совсем не нужна

Граница обрезания определяется по такому алгоритму:

  1. Для каждого столбца рассчитываем сумму абсолютных разностей соседних элементов.
  2. Обрезаем слева и справа такое количество пикселей, вклад которых в общее накопленное различие менее 5%.


Аналогичным же образом поступаем и для столбцов.

Важное уточнение: если размеры получившегося изображения недостаточны для осуществления шага 4, то обрезания не делаем!

Шаг третий


Ну тут совсем всё просто, делим картинку на равные части и выбираем узловые точки.

Шаг четвёртый


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

Шаг пятый


Для каждой опорной точки вычисляется разность её яркости с яркостью её восьми соседей. Для тех точек, у которых не достаёт соседей (верхний и нижний ряды, левая и правая колонка), разница принимается за 0.

Далее эти разницы приводятся к пяти градациям:


Получается примерно вот такая матрица:

Шаг шестой


Думаю в пояснениях не нуждается.

А теперь про оптимизации


В оригинальной работе справедливо указывается, что из получившейся сигнатуры можно совершенно спокойно выкинуть нулевые значения по краям матрицы, так как они будут идентичны для всех изображений.
Однако если внимательно посмотреть, то видно, что для любых двух соседей их взаимные градации будут равны по модулю. Следовательно, на самом то деле, можно смело выкинуть по четыре дублирующихся значений для каждой опорной точки, сократив размер сигнатуры в два раза (без учёта боковых нулей).
Очевидно, что при расчете суммы квадратов, для каждого x обязательно будет присутствовать равный по модулю x’ и формулу расчета нормы можно записать примерно так (не углубляясь в переиндексацию):
Это справедливо как для числителя, так и для обоих слагаемых знаменателя.

Далее в оригинальной работе замечается, что для хранение каждой градации достаточно трёх бит. То есть, например, в Unsigned Long влезет 21 градация. Это довольно большая экономия на размере, но, с другой стороны, добавляет сложности при расчёте суммы квадратов разницы двух сигнатур. Надо сказать, что идея эта меня чем-то очень зацепила и не отпускала пару дней, пока однажды вечером не озарило, как можно и рыбку съесть, место сэкономить и расчёт упростить. Следим за руками.

Используем для хранения такую схему, по 4 бита на градацию:


Да, в один Unsigned Long влезет всего 16 градаций, против 21, но зато массив разницы двух сигнатур будет вычисляться одним xor’ом и 15 сдвигами вправо с вычислением количества выставленных бит на каждой итерации сдвига. Т.е.
Знак нам безразличен, так как все значения будут возводиться в квадрат.

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

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

Собственно, всё. Спасибо за внимание. 🙂

4 лучшие поисковые системы для поиска визуально похожих изображений

автор Иван Енич

Эксперт по поиску и устранению неисправностей

Последнее обновление:


  • Изображения являются сегодня одной из самых важных частей Интернета, и некоторые системы упрощают нам их поиск.
  • Вы хотите узнать название какой-нибудь удивительной картины или обоев, которые использует ваш друг, вы используете поисковую систему.
  • Google может помочь вам найти визуально похожие изображения благодаря механизму поиска определенного изображения по внешнему виду.
  • Если вы хотите узнать, как найти похожие изображения и другие движки, продолжайте читать нашу статью ниже для получения дополнительной информации.
Лучшее программное обеспечение, которое вам нужно, — это VPN!
VPN — обязательный инструмент для каждого устройства, подключенного к Интернету. Вот что делает для вас Private Internet Access (PIA):
  • Защищает от хакеров и киберпреступников
  • Скрывает ваш IP-адрес и географическое положение
  • Помогает разблокировать контент
    (фильмы, веб-сайты)
  • Останавливает мониторинг и регулирование интернет-провайдера
  • Снижает пинг во время игры

Мы ищем новые изображения ежедневно, особенно если наша работа связана с поиском и использованием различных изображений.Но иногда мы имеем представление о том, чего хотим, но не знаем, что именно.

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

Лучшие предложения хостинга для наших читателей — Ограниченное предложение

Продвинутая технология поисковых систем позволяет нам искать изображения просто по их внешнему виду.

Таким образом, мы составили список лучших поисковых систем для поиска визуально похожих изображений, даже не вводя их настоящих названий.


Какая поисковая система лучше всего подходит для поиска визуально похожих изображений?

Обратный поиск изображений — Найдите похожие изображения

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

Что такое обратный поиск изображений?

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

Преимущества использования инструментов поиска изображений / техники обратного изображения!

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

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

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

Мы обсудили два основных метода обратного поиска, выберите тот, который вам больше всего подходит!

Система поиска изображений Google!

Первый и самый простой способ — использовать обычную поисковую систему Google.Вы должны открыть поисковую систему в своем браузере вместе с расширением изображений. Теперь, когда вы откроете инструмент, вы увидите небольшое изменение в инструменте, и это будет небольшой значок камеры на панели поиска. Этот значок камеры является основным носителем этой техники, и, нажав на этот значок, вы можете просто перетащить любое количество изображений из своей галереи изображений и выполнить поиск по ним в Google. Вы также можете использовать URL-адрес изображения в строке поиска и нажать кнопку поиска, чтобы собрать всю информацию об изображении, о котором идет речь.Единственная проблема с этим простым методом заключается в том, что он сохраняет ваш контент в своей базе данных, что совсем небезопасно, особенно в отношении частных изображений!

Не волнуйтесь, этот инструмент поможет вам решить эту проблему!

Инструмент поиска изображений от Duplichecker!

Инструмент поиска изображений от duplichecker — лучший инструмент обратного поиска фотографий, доступный в Интернете, и это происходит по многим причинам, включая его интересные особенности. Если вы хотите безопасный и надежный поиск изображений, нажмите на эту ссылку https: // www.duplichecker.com/reverse-image-search.php и приступить к поиску похожих изображений и относительных результатов. Использование инструмента становится очень понятным, как только вы его откроете, поэтому мы не будем его подробно обсуждать, но мы расскажем вам об особенностях инструмента!

  • Инструмент бесплатен и не имеет ограничений, и вы можете искать по изображениям сколько угодно.
  • Средство поиска изображений удобно и максимально упрощает работу пользователей.
  • Вы можете выполнять поиск по изображениям, используя URL-адреса изображений, а также относительные фразы / слова.
  • Инструмент предлагает вам результаты, относящиеся к различным поисковым системам, и вы можете просто отфильтровать их и включить в список те, которые вам нужны.
  • Этот инструмент является наиболее безопасным для этой цели, поскольку он не сохраняет ваши данные в своей базе данных!

Алисия возглавляет стратегию создания контента для LearnWorthy, управляя командой производителей контента, стратегов и копирайтеров. Она творчески курирует информационные программы, информационные кампании, отчеты об исследованиях и другие интегрированные маркетинговые проекты.

Поиск похожих изображений для гистопатологии: SMILY

Архитектура нейронной сети

SMILY основан на архитектуре сверточной нейронной сети, называемой сетью глубокого ранжирования. 34 Мы решили использовать нейронные сети для этой задачи из-за их успеха в последние годы в задачах, связанных с изображениями, таких как классификация и обнаружение объектов, за счет изучения отличительных характеристик вместо того, чтобы быть специально разработанными. 35 Вкратце, сеть глубокого ранжирования основана на встраивающе-вычислительном модуле, который сжимает фрагменты входного изображения (с размерами ширина x высота x каналы) в вектор фиксированной длины. Этот модуль содержит уровни операций свертки, объединения и конкатенации.Во время обучения в сеть подавались маркированные наборы из трех изображений: эталонное изображение I определенного класса, второе изображение I + того же класса и третье изображение I другого класса. Затем сеть использует модули для вычисления вложений каждого из трех изображений. Затем сеть обучается назначать меньшее расстояние между вложениями ( I , I + ), чем расстояния встраивания ( I , I ).Наша сеть была обучена примерно на 500 000 000 «естественных изображений» (например, собак, кошек, деревьев, искусственных объектов и т. Д.) Из 18 000 различных классов. Таким образом, сеть научилась отличать похожие изображения от несходных, вычисляя и сравнивая вложения входных изображений. 34,36 Эта сеть была успешно использована для создания эмбеддингов, позволяющих различать клеточные фенотипы при скрининге с высоким содержанием. 37

Создание базы данных внедрения SMILY

Для экспериментов, описанных в этой статье, мы использовали слайды из Атласа генома рака (TCGA). 21 TCGA был использован, потому что он общедоступен и широко используется для гистопатологических исследований. Образцы тканей TCGA были собраны с одобрения местных институциональных экспертных советов (IRB), с информированного согласия пациентов. Проверка этики и освобождение от IRB для использования обезличенных изображений в этом исследовании было получено от Quorum Review IRB (Сиэтл, Вашингтон).

Дополнительные сведения о наборе данных каждого эксперимента приведены в соответствующих разделах исследования. SMILY использует модуль встраивания-вычислений из сети глубокого ранжирования (рис.1) для сжатия фрагментов входного изображения (3-канальные изображения RGB (красный-зеленый-синий) размером 300 × 300 пикселей) во встраиваемые векторы размером 128. Поскольку гистопатологические изображения не зависят от ориентации, мы дополнительно генерируем четыре поворота на 90 градусов каждое входное изображение, а также зеркальные и повернутые версии для восьми ориентаций и, соответственно, восьми вложений размером 128 на каждый фрагмент изображения, уменьшение размерности в 260 раз. Даже при отсутствии какого-либо дополнительного сжатия для хранения этих вложений требовалось разумное дополнительное значение 0.4% накладных расходов на хранение по сравнению с хранением только исходных изображений.

Для создания фрагментов изображения при заданном увеличении изображения (например, при большом увеличении, таком как × 40 и × 20, или при среднем увеличении, например, × 10), мы извлекли тысячи неперекрывающихся фрагментов для каждой категории (Таблица 1). Для реального варианта использования могут использоваться перекрытия, чтобы гарантировать, что каждая гистологическая особенность полностью содержится в фрагменте с соответствующим увеличением, вместо того, чтобы потенциально делиться пополам на два фрагмента.

Запросы к базе данных

Чтобы получить совпадения из базы данных, SMILY сначала вычисляет внедрение для выбранного фрагмента изображения запроса, а затем сравнивает это внедрение с вложениями, хранящимися в базе данных.Для этой работы нашей функцией сравнения было расстояние L 2 между парами векторов встраивания размером 128. Для обработки восьми ориентаций (см. Выше) мы отфильтровали результаты поиска таким образом, чтобы была возвращена наиболее похожая ориентация, и только одна ориентация для каждого отдельного фрагмента изображения была представлена ​​в каждом наборе результатов поиска. Кроме того, чтобы увеличить разнообразие результатов поиска, мы отфильтровали результаты, чтобы гарантировать, что никакие результаты не находятся в пределах 1000 пикселей друг от друга.

Наши эксперименты (описанные ниже) потребовали большого количества вложенных сравнений, от 40 000 до 90 000.Чтобы обеспечить эффективный поиск, мы использовали k-мерные (k-d) деревья 38 с размером листа 40 и глубиной 6; это настраивается в соответствии с вычислительными ресурсами и требованиями к скорости. Чтобы еще больше оптимизировать скорость поиска, мы распараллелили сравнения на нескольких машинах (Результаты). Эти шаги обеспечили сублинейное время поиска по количеству сравнений.

Пользовательский интерфейс SMILY

SMILY был реализован как веб-приложение для просмотра всего слайда (рис. 2). Для проведения поиска пользователь выбирает прямоугольный фрагмент изображения от 200 до 400 пикселей в высоту и ширину.Для фрагмента запроса размером не 300 × 300 пикселей SMILY изменяет размер до 224 × 224 пикселей с помощью билинейной интерполяции перед вычислением встраивания. Встраивание затем используется для поиска в базе данных на основе текущего увеличения в выбранной области, и результаты отображаются в виде настраиваемого количества фрагментов изображения. При желании также могут отображаться любые существующие аннотации на уровне пикселей или метаданные на уровне слайдов, такие как исходный диагноз.

Оценки

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

Крупномасштабные количественные исследования

Наши крупномасштабные количественные эксперименты были основаны на регионах, аннотированных патологами различными метками (Таблица 1). В каждом случае патологи аннотировали слайды с различными гистологическими признаками (до десяти категорий: артерия, капилляр, жир, лимфатический сосуд, лимфоцит, нерв, нормальный эпителий, гладкая мускулатура, строма, вена) или паттернами Глисона (четыре категории: неопухолевые и три паттерна Глисона). Аннотации были выполнены тремя патологоанатомами с помощью программы просмотра всего слайда Hamamatsu NDPview2, 39 , используя инструмент для рисования и маркировки от руки.Патологов попросили аннотировать около 80% каждого слайда, а также искать и аннотировать более редкие гистологические особенности по мере сбора данных и значительного расхождения между категориями. Из-за большого размера каждого слайда и сложности внешнего вида каждой интересующей функции аннотации не были на 100% точными. Вместо этого аннотации должны были быть достаточно точными, чтобы иметь ~ 70% «чистоту» по отношению к интересующей этикетке. Образец этих аннотаций показан на крайнем левом изображении на рис.1. Эти аннотации использовались только для оценки SMILY, а не для разработки нейронной сети встраивания SMILY.

Патчи размером 300 × 300 пикселей для каждой гистологической особенности или категории паттернов Глисона затем были извлечены на основе аннотаций и сохранены в базе данных SMILY вместе с их вложениями, вычисленными при соответствующем увеличении. Чтобы избежать дисбаланса классов для этих экспериментов, мы отобрали от сотен до тысяч патчей без замены для каждой категории (таблица 1).Одним исключением были эксперименты, оценивающие совпадение как паттерна Глисона, так и гистологического признака, где пятна были отфильтрованы только для тех, которые содержали оба типа аннотаций.

Проспективные исследования с участием патологов

Помимо крупномасштабных исследований, мы провели аналогичные исследования, попросив патологов оценить качество результатов поиска. Поскольку наши аннотации (для крупномасштабных количественных исследований) не были исчерпывающими, эти исследования с участием патологов позволили правильно оценить области, содержащие несколько меток (но аннотированные только одной меткой).Использовалась та же база данных из крупномасштабных количественных исследований, но данные запроса были разбиты на сотни, а не на тысячи, чтобы сохранить поддающееся обработке количество результатов поиска для ручной оценки патологами. Чтобы имитировать вариант использования, когда пользователь оценивает несколько результатов поиска для одного запроса, каждый запрос генерировал четыре результата поиска, и патолог оценивал каждый из четырех результатов (система оценок для каждого эксперимента описана ниже). Окончательный средний балл для каждого исследования — это средний балл по всем результатам поиска по всем запросам.

Мы использовали несколько критериев оценки сходства. Сходство по гистологическим признакам, органам и паттерну Глисона оценивалось аналогично крупномасштабным исследованиям с использованием двоичных баллов (100 для «совпадения» и 0 для «несоответствия»). Для общей «оценки качества матча», объединяющей несколько осей, мы разработали 100-балльную оценку с шагом 25 баллов (Таблица 3). Несколько примеров пользовательского интерфейса для оценки гистологических характеристик и сходства органов представлены на дополнительном рисунке 3.

Всего в этом исследовании приняли участие три патолога-анатома из разных слоев общества: 1 U.S. сертифицирован советом директоров, 1 не имеет сертификата совета директоров США и 1 прошел обучение в резидентуре США. В качестве отрицательного контроля, чтобы наши патологоанатомы не оценивали результаты поиска SMILY искусственно, 25% запросов давали результаты поиска случайным образом (то есть все четыре изображения были из SMILY или все четыре изображения были выбраны случайным образом). Патологоанатомы не знали об источнике результатов поиска: SMILY против случайного.

Статистический анализ

Для оценки статистической значимости наших результатов мы использовали тест Макнемара для различий в «двоичных» показателях точности и тест Манна – Уитни U для различий в недвоичных показателях точности (избегая допущений). нормальности).Из-за большого размера каждого исследования большинство различий было статистически значимым, за исключением случаев, отмеченных в одном случае (соответствие нервов по гистологическим признакам). 95% доверительные интервалы были вычислены с использованием интервала Клоппера Пирсона для двоичных показателей (которые используют топ-5 точности для суммирования результатов каждого запроса) и стандартной ошибки ± 1,96 для показателей небинарной точности (которые усредняются для результатов поиска. для каждого запроса).

Сводка отчетов

Дополнительная информация о дизайне исследования доступна в Сводке отчетов по исследованиям природы, связанной с этой статьей.

Как найти похожие картинки на вашем компьютере? — PictureEcho

Жесткий диск вашего компьютера заполнен нерелевантными изображениями? Получаете ли вы постоянные уведомления о том, что один (или более) раздел жесткого диска становится опасно близким к заполнению? Это слишком сбивает с толку, поскольку в недавнем прошлом вы не копировали ни одного огромного количества данных. Так как же эти диски могут внезапно начать заполняться?

Ответ кроется в похожих изображениях. Эти изображения поразительно похожи и могут быть удалены без лишних хлопот.Так зачем тратить больше времени и позволять этим изображениям занимать ценное место для хранения? Решением является однократное сканирование PictureEcho , которое с легкостью отсеивает все визуально похожие изображения.

PictureEcho — проверенная программа | Скачать сейчас

Совместимость с Windows 10 , 8 и 7 | Ознакомьтесь с условиями службы

Подробнее см. В блоге PictureEcho

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

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

Итак, сейчас у вас в голове вопрос: как мне это сделать? Как мне сравнить тысячи (или больше) изображений на жестком диске моего ноутбука, отфильтровать виновных и избавиться от них, не удаляя по ошибке ни одного из ваших самых ценных изображений? И вы наверняка хотите, чтобы это произошло в течение нескольких минут (если только вы не супер-терпеливый человек, который может часами сидеть, сохранять самообладание и не допускать появления усталости).

Описание в последних строках достаточно, чтобы напугать большинство читателей. Или, говоря более реалистично, заставить их осознать серьезность стоящей перед ними задачи.

Процесс

Значит, мы должны найти выход, чтобы обнаруживать и удалять похожие изображения. Это определенно непростая задача, но PictureEcho делает ее очень простой. Он очень консервативен в использовании системных ресурсов, но при этом выполняет свою задачу с максимальной эффективностью.Результат — больше свободного места и более высокая производительность компьютера.

Итак, как использовать PictureEcho для бесплатного обнаружения и удаления похожих изображений на вашем компьютере / ноутбуке Windows ? Читай дальше.

  1. Загрузите и установите PictureEcho на свой компьютер.
  2. Запустите программу и щелкните Добавить путь , чтобы добавить папки, разделы жесткого диска, внешние диски (сколько угодно) для поиска похожих изображений .
  3. Выберите Подобное совпадение (находится сразу после поля местоположения целевого файла). Настройка подобия , чтобы выбрать желаемый уровень подобия. На скриншоте ниже обратите внимание, что оба изображения кажутся точными копиями друг друга, но есть большая разница в размере их файлов. Это приводит к тому, что они классифицируются как похожих , а не как повторяющиеся / идентичные изображения.

    Обнаружены похожие изображения

  4. Щелкните Начать поиск , чтобы запустить сканирование.Несмотря на то, что он работает быстро, PictureEcho может занять некоторое время для завершения сканирования, поскольку это зависит от эффективности процессора, а также от количества сканируемых изображений.
  5. Щелкните Выбрать дубликаты , чтобы выбрать единый критерий для дубликатов, которые вы хотите сохранить. И нажмите Выберите действие , чтобы выбрать, хотите ли вы удалить дубликаты навсегда или переместить их в папку, которую вы можете указать.

Как именно PictureEcho определяет сходство изображений?

PictureEcho предоставляет на выбор 4 различных уровня сходства.Вы можете выбрать желаемый вариант, щелкнув Настройка сходства , расположенный прямо под Подобное совпадение в самой верхней области пользовательского интерфейса.

Уровень 1 найдет похожие изображения, сделанные с интервалом 30 секунд и друг от друга. Аналогично, соответствующее значение для уровня 2 составляет 1 минута и 60 минут для уровня 3 . В то время как Уровень 4 не ориентируется на время и требует, чтобы пользователь внимательно изучил результаты и сделал собственное суждение.

Заключительное слово

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

heytitle / visually-similar-image-search: поиск визуально похожего изображения с использованием предварительно обученных нейронных сетей и приблизительного поиска ближайшего соседа

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

Мотивация

Нейронные сети учатся извлекать особенности из данных без каких-либо явных знаний. Эти функции не только важны для решения заданных задач, для решения которых они обучены, они также могут быть полезны для других задач. В этом случае мы используем три предварительно обученные сети, а именно VGG16, ResNet152 и DenseNet. Мы стремимся использовать эти функции в качестве представления каждого изображения.Мы надеемся, что визуально похожие изображения будут иметь аналогичное представление. Другими словами, эти изображения тесно лежат в этом пространстве признаков.


Рис. 1: Обзор проекта

В этом представлении мы можем выполнять поиск ближайшего соседа. Мы используем Annoy, выполняя приблизительный поиск ближайшего соседа.

Инструмент анализа


Рис. 1: Обзор проекта

Мы разработали веб-сайт, который предоставляет интерфейс для изучения результатов наших экспериментов информативным и воспроизводимым способом.Если вы заинтересованы в самостоятельном изучении и изучении результатов, попробуйте 😎.

Эксперимент 1: визуально похожие произведения

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


Рис. 2: Визуально похожие произведения

Из Рис. 2 мы можем видеть, что ближайшие соседи в этих пространствах признаков каким-то образом связаны с данными изображениями.Например, если мы посмотрим на рисунок Pettibon со строками , аналогичные рисунки из ResNet152 и Densenet содержат лица. Пожалуйста, изучите наш инструмент анализа, чтобы увидеть больше примеров.

Эксперимент 2: Восстановление возмущенных произведений искусства

Цель этого эксперимента — проверить, являются ли особенности нейросети близких изображений более или менее одинаковыми. Другими словами, эти образы семантически одинаковы для нас. Как показано на рис. 3, мы используем пять профилей для возмущения 1000 исходных изображений из коллекции MoMa, создавая близкие изображения для эксперимента.


Рис. 3: Профили возмущений

Следовательно, если представление изображения и его измененные версии схожи, мы должны иметь возможность восстановить эти искаженные изображения при выполнении поиска ближайшего соседа.


Рис. 4: Восстановленные произведения искусства

Как показано на рис. 4, мы можем видеть, что два исходных изображения и их измененные версии примерно близки в пространствах признаков, в частности в пространстве признаков VGG16.Для этих двух примеров пространство функций VGG16 позволяет нам восстанавливать поврежденные версии 4/5, в то время как пространства функций других сетей дают соотношение 3/5.

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

  • Точность: № правильно возвращенные образцы / нет. вернули образцы
  • Отзыв: No. правильно возвращенные образцы / нет. все соответствующие образцы в данных
  • f1-оценка: 2 * (точность * отзыв) / (точность + отзыв)

В данном случае нет.правильно возвращенные образцы — это просто количество возвращаемых нарушенных версий изображения. нет. все соответствующие выборки в данных — 5, потому что у нас есть пять профилей возмущений, а - нет. возвращенные образцы — это k , значения которых равны 1, 3, 5 .


Рис.5: Усредненная точность, отзыв и оценка F1

Из рис. 5 видно, что VGG16 в среднем работает неплохо и лучше, чем другие архитектуры для этой цели исследования.Их большой разброс, по-видимому, предполагает, что в некоторых случаях ResNet152 и DenseNet могут вставлять близкие изображения в близлежащие места в пространствах функций. Это может быть хорошим дальнейшим анализом.

Работа в будущем

  • Попробуйте еще образцы. Может быть, 10 000 произведений искусства?
  • Использовать возможности автоэнкодеров (vanila, VAE)
  • Обучите автоэнкодеры по следующей схеме: возмущенное изображение -> автоэнкодер -> исходное изображение .

Разработка

См. DEVELOPMENT.md .

Благодарности

Building SMILY, ориентированный на человека инструмент поиска похожих изображений для патологии

Второй пример использования SMILY, на этот раз поиск лобулярной карциномы, определенного подтипа рака груди.
Инструменты для доводки SMILY
Однако проблема возникла, когда мы наблюдали, как патологи взаимодействуют с SMILY.В частности, пользователи пытались ответить на туманный вопрос: «Что похоже на на это изображение?» чтобы они могли извлечь уроки из прошлых случаев, содержащих похожие изображения. Тем не менее, у инструмента не было возможности понять цель поиска: пытался ли пользователь найти изображения с похожими гистологическими характеристиками, морфологией желез, общей архитектурой или чем-то еще? Другими словами, пользователям нужна была возможность направлять и уточнять результаты поиска в каждом конкретном случае, чтобы на самом деле найти то, что они искали.Кроме того, мы заметили, что эта потребность в уточнении итеративного поиска коренится в том, как врачи часто проводят «итеративную диагностику» — генерируя гипотезы, собирая данные для проверки этих гипотез, исследуя альтернативные гипотезы и повторно или повторно проверяя предыдущие гипотезы итеративным способом. Стало ясно, что SMILY для удовлетворения реальных потребностей пользователей должен поддерживать другой подход к взаимодействию с пользователем.

Благодаря тщательному исследованию, ориентированному на человека, описанному в нашей второй статье, мы разработали и дополнили SMILY набором интерактивных инструментов уточнения, которые позволяют конечным пользователям оперативно выражать, что означает сходство: 1) уточнять по регионам позволяет патологоанатомам обрезать интересующую область на изображении, ограничивая поиск только этой областью; 2) уточнение по примеру дает пользователям возможность выбрать подмножество результатов поиска и получить больше подобных результатов; и 3) ползунка для уточнения концепции можно использовать для указания того, что более или менее клиническая концепция присутствует в результатах поиска (например,г., сросшиеся железы). Вместо того, чтобы требовать, чтобы эти концепции были встроены в модель машинного обучения, мы разработали метод, который позволяет конечным пользователям создавать новые концепции постфактум, настраивая алгоритм поиска в соответствии с концепциями, которые они считают важными для каждого конкретного случая использования. Это позволяет проводить новые исследования с помощью апостериорных инструментов после того, как модель машинного обучения уже обучена, без необходимости повторно обучать исходную модель для каждой интересующей концепции или приложения.

В ходе нашего исследования пользователей с патологами мы обнаружили, что SMILY на основе инструментов не только повысил клиническую полезность результатов поиска, но и значительно повысил доверие пользователей и вероятность принятия по сравнению с обычной версией SMILY без этих инструментов.Интересно, что эти инструменты уточнения, по-видимому, помогли патологоанатомам принимать решения такими способами, как , а не , просто улучшая результаты поиска сходства. Например, патологоанатомы использовали наблюдаемые изменения своих результатов в результате итеративного поиска как средство постепенного отслеживания вероятности гипотезы. Когда результаты поиска были неожиданными, многие перенаправили инструменты для тестирования и понимания лежащего в основе алгоритма, например, путем вырезания областей, которые, по их мнению, мешали поиску, или путем настройки ползунков концепций, чтобы увеличить присутствие концепций, которые, как они подозревали, использовались. игнорируется.Помимо того, что врачи были пассивными получателями результатов ML, врачи получили возможность с помощью агентства активно проверять гипотезы и применять свои экспертные знания, одновременно используя преимущества автоматизации.
Благодаря этим интерактивным инструментам, позволяющим пользователям адаптировать каждый поиск в соответствии с их желаемыми целями, мы рады возможности SMILY помогать в поиске в больших базах данных оцифрованных изображений патологий. Одно из возможных применений этой технологии — индексирование учебников изображений патологий с описательными подписями, а также предоставление возможности студентам-медикам или патологам, проходящим обучение, выполнять поиск в этих учебниках с помощью визуального поиска, что ускоряет учебный процесс.Другое приложение предназначено для исследователей рака, заинтересованных в изучении корреляции морфологии опухоли с результатами лечения пациентов, чтобы ускорить поиск похожих случаев. Наконец, патологоанатомы могут использовать такие инструменты, как SMILY, для обнаружения всех проявлений признака (например, признаков активного деления клеток или митоза) в образце ткани одного и того же пациента, чтобы лучше понять серьезность заболевания для принятия обоснованных решений по лечению рака. Важно отметить, что наши выводы дополняют совокупность доказательств того, что сложные алгоритмы машинного обучения должны сочетаться с ориентированным на человека дизайном и интерактивными инструментами, чтобы быть максимально полезными.

Благодарности
Эта работа была бы невозможна без Джейсона Д. Хиппа, Юн Лю, Эмили Рейф, Дэниела Смилкова, Майкла Терри, Крейга Х. Мермеля, Мартина С. Стампа и сотрудников Google Health и PAIR. Препринты двух статей доступны здесь и здесь.

Авторы: Нараян Хегде, инженер-программист, Google Health, и Кэрри Дж. Кай, научный сотрудник, Google Research

. Достижения в области машинного обучения (ML) показали большие перспективы для оказания помощи специалистам в области здравоохранения, таких как помощь в обнаружении диабетического глаза. болезнь и метастатический рак груди.Хотя высокопроизводительные алгоритмы необходимы для того, чтобы завоевать доверие и признание клиницистов, их не всегда достаточно — то, что информация представляется врачам, и то, как врачи взаимодействуют с этой информацией, может быть решающим фактором в полезности технологии машинного обучения имеет для пользователей.

Медицинская специальность в области анатомической патологии, которая является золотым стандартом диагностики рака и многих других заболеваний посредством микроскопического анализа образцов тканей, может значительно выиграть от применения ML.Хотя диагностика через патологию традиционно проводится с помощью физических микроскопов, растет распространение «цифровой патологии», когда изображения образцов патологии с высоким разрешением можно исследовать на компьютере. Это движение дает возможность гораздо более легко искать информацию, поскольку это необходимо, когда патологи занимаются диагностикой сложных случаев или редких заболеваний, когда «общие» патологи обращаются к специалистам, и когда патологоанатомы-стажеры учатся. В таких ситуациях возникает общий вопрос: «Что это за особенность, которую я вижу?» Традиционное решение заключается в том, чтобы врачи спрашивали коллег или кропотливо просматривали справочные учебники или онлайн-ресурсы в надежде найти изображение с аналогичными визуальными характеристиками.Общее решение компьютерного зрения для подобных проблем называется поиском изображений на основе содержимого (CBIR), одним из примеров которых является функция «обратного поиска изображений» в Google Images, в которой пользователи могут искать похожие изображения, используя другое изображение в качестве входных данных .

Сегодня мы рады представить две исследовательские работы, описывающие дальнейший прогресс в исследованиях взаимодействия человека и компьютера для поиска похожих изображений в медицине. В статье «Поиск похожих изображений для гистопатологии: SMILY», опубликованной в журнале « Nature Partner Journal (npj) Digital Medicine », мы сообщаем о нашем инструменте на основе машинного обучения для поиска обратных изображений для патологии.В нашей второй статье « Человекоцентричные инструменты для борьбы с несовершенными алгоритмами при принятии медицинских решений » (препринт доступен здесь), получившей почетное упоминание на конференции ACM CHI 2019 по человеческому фактору в вычислительных системах, мы изучили различные способы уточнения поиска по изображениям и оценили их влияние на взаимодействие врача с SMILY.

SMILY Design
Первым шагом в разработке SMILY было применение модели глубокого обучения, обученной с использованием 5 миллиардов естественных, непатологических изображений (например.g., собаки, деревья, искусственные объекты и т. д.), чтобы сжать изображения в «итоговый» числовой вектор, называемый вложением . В процессе обучения сеть научилась отличать похожие изображения от несходных, вычисляя и сравнивая их вложения. Затем эта модель используется для создания базы данных фрагментов изображений и связанных с ними встраиваний с использованием корпуса обезличенных слайдов из Атласа генома рака. Когда в инструменте SMILY выбран фрагмент изображения запроса, встраивание фрагмента запроса вычисляется аналогичным образом и сравнивается с базой данных для получения фрагментов изображения с наиболее похожими вложениями.

Схема этапов построения базы данных SMILY и процесса, с помощью которого фрагменты входного изображения используются для выполнения поиска похожих изображений.
Инструмент позволяет пользователю выбрать интересующую область и получить визуально похожие совпадения. Мы протестировали способность SMILY извлекать изображения по заранее заданной оси сходства (например, по гистологическим признакам или степени опухоли), используя изображения тканей груди, толстой кишки и простаты (3 наиболее распространенных очага рака).Мы обнаружили, что SMILY продемонстрировал многообещающие результаты, несмотря на то, что не был обучен специально на изображениях патологий и не использовал какие-либо отмеченные примеры гистологических особенностей или степени опухоли.
Пример выбора небольшой области на слайде и использования SMILY для получения похожих изображений. SMILY эффективно ищет в базе данных миллиарды обрезанных изображений за несколько секунд. Поскольку изображения патологии можно просматривать с разным увеличением (уровнями масштабирования), SMILY автоматически ищет изображения с тем же увеличением, что и исходное изображение.

Второй пример использования SMILY, на этот раз поиск лобулярной карциномы, определенного подтипа рака груди.
Инструменты уточнения для SMILY
Однако проблема возникла, когда мы наблюдали, как патологи взаимодействуют с SMILY. В частности, пользователи пытались ответить на туманный вопрос: «Что похоже на на это изображение?» чтобы они могли извлечь уроки из прошлых случаев, содержащих похожие изображения.Тем не менее, у инструмента не было возможности понять цель поиска: пытался ли пользователь найти изображения с похожими гистологическими характеристиками, морфологией желез, общей архитектурой или чем-то еще? Другими словами, пользователям нужна была возможность направлять и уточнять результаты поиска в каждом конкретном случае, чтобы на самом деле найти то, что они искали. Кроме того, мы заметили, что эта потребность в уточнении итеративного поиска коренится в том, как врачи часто проводят «итеративную диагностику» — генерируя гипотезы, собирая данные для проверки этих гипотез, исследуя альтернативные гипотезы и повторно или повторно проверяя предыдущие гипотезы итеративным способом.Стало ясно, что SMILY для удовлетворения реальных потребностей пользователей должен поддерживать другой подход к взаимодействию с пользователем.

Благодаря тщательному исследованию, ориентированному на человека, описанному в нашей второй статье, мы разработали и дополнили SMILY набором интерактивных инструментов уточнения, которые позволяют конечным пользователям оперативно выражать, что означает сходство: 1) уточнять по регионам позволяет патологоанатомам обрезать интересующую область на изображении, ограничивая поиск только этой областью; 2) уточнение по примеру дает пользователям возможность выбрать подмножество результатов поиска и получить больше подобных результатов; и 3) ползунка для уточнения концепции можно использовать для указания того, что более или менее клиническая концепция присутствует в результатах поиска (например,г., сросшиеся железы). Вместо того, чтобы требовать, чтобы эти концепции были встроены в модель машинного обучения, мы разработали метод, который позволяет конечным пользователям создавать новые концепции постфактум, настраивая алгоритм поиска в соответствии с концепциями, которые они считают важными для каждого конкретного случая использования. Это позволяет проводить новые исследования с помощью апостериорных инструментов после того, как модель машинного обучения уже обучена, без необходимости повторно обучать исходную модель для каждой интересующей концепции или приложения.

В ходе нашего исследования пользователей с патологами мы обнаружили, что SMILY на основе инструментов не только повысил клиническую полезность результатов поиска, но и значительно повысил доверие пользователей и вероятность принятия по сравнению с обычной версией SMILY без этих инструментов.Интересно, что эти инструменты уточнения, по-видимому, помогли патологоанатомам принимать решения такими способами, как , а не , просто улучшая результаты поиска сходства. Например, патологоанатомы использовали наблюдаемые изменения своих результатов в результате итеративного поиска как средство постепенного отслеживания вероятности гипотезы. Когда результаты поиска были неожиданными, многие перенаправили инструменты для тестирования и понимания лежащего в основе алгоритма, например, путем вырезания областей, которые, по их мнению, мешали поиску, или путем настройки ползунков концепций, чтобы увеличить присутствие концепций, которые, как они подозревали, использовались. игнорируется.Помимо того, что врачи были пассивными получателями результатов ML, врачи получили возможность с помощью агентства активно проверять гипотезы и применять свои экспертные знания, одновременно используя преимущества автоматизации.
Благодаря этим интерактивным инструментам, позволяющим пользователям адаптировать каждый поиск в соответствии с их желаемыми целями, мы рады возможности SMILY помогать в поиске в больших базах данных оцифрованных изображений патологий. Одно из возможных применений этой технологии — индексирование учебников изображений патологий с описательными подписями, а также предоставление возможности студентам-медикам или патологам, проходящим обучение, выполнять поиск в этих учебниках с помощью визуального поиска, что ускоряет учебный процесс.Другое приложение предназначено для исследователей рака, заинтересованных в изучении корреляции морфологии опухоли с результатами лечения пациентов, чтобы ускорить поиск похожих случаев. Наконец, патологоанатомы могут использовать такие инструменты, как SMILY, для обнаружения всех проявлений признака (например, признаков активного деления клеток или митоза) в образце ткани одного и того же пациента, чтобы лучше понять серьезность заболевания для принятия обоснованных решений по лечению рака. Важно отметить, что наши выводы дополняют совокупность доказательств того, что сложные алгоритмы машинного обучения должны сочетаться с ориентированным на человека дизайном и интерактивными инструментами, чтобы быть максимально полезными.

Благодарности
Эта работа была бы невозможна без Джейсона Д. Хиппа, Юн Лю, Эмили Рейф, Дэниела Смилкова, Майкла Терри, Крейга Х. Мермеля, Мартина С. Стампа и сотрудников Google Health и PAIR. Препринты двух статей доступны здесь и здесь.

Как выполнить обратный поиск изображений с вашего телефона

Image Search — это возможность выполнять поиск по термину и находить изображения, связанные с тем, что вы набрали. Большинство поисковых систем предлагают это, и это здорово.Но что, если у вас есть изображение и вы хотите узнать его происхождение? Или найти похожие фото? Это поиск обратного изображения .

Обратный поиск изображений Google — это легкий ветерок на настольном компьютере. Перейдите на images.google.com, щелкните значок камеры и вставьте URL-адрес изображения, которое вы видели в Интернете, загрузите изображение со своего жесткого диска или перетащите изображение из другого окна.

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

Google Обратный поиск изображений на мобильном телефоне

Google встроил функцию обратного поиска изображений в телефоны и планшеты, хотя и в ограниченном объеме.

Когда вы запускаете images.google.com на мобильном устройстве, значок камеры не отображается в строке поиска. Чтобы получить его, вам необходимо загрузить настольную версию на свое мобильное устройство в браузере Chrome, приложение для iOS и Android. Прокрутите вниз, коснитесь меню из трех точек и выберите Request Desktop Site .Это загрузит версию рабочего стола, и появится значок камеры, чтобы вы могли загружать фотографии из своей фотопленки.

В зависимости от вашего телефона Chrome также поддерживает обходной путь обратного поиска изображений. Когда у вас есть изображение, которое вы хотите найти, удерживайте палец на нем, пока не появится всплывающее меню; выберите «Искать это изображение в Google» внизу. Примечание. Это НЕ будет работать в приложении Google или других браузерах (даже в Safari). Работает только в Chrome. Это также не работает на новых iPhone; вам понадобится один с 3D Touch.

Если по какой-то причине это не работает, вы также можете выбрать «Открыть изображение в новой вкладке». Затем скопируйте URL-адрес, вернитесь на images.google.com и вставьте URL-адрес.

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

Google Lens также предлагает функцию обратного поиска изображений.У Lens есть собственное приложение, но он также является частью приложения Google и Google Assistant как на iOS, так и на Android. Вы можете узнать его по значку, который выглядит так:. Дело в том, что Lens больше помогает вам выполнять такие задачи, как мгновенный перевод, идентифицировать вещи или находить продукт для покупки, чем искать исходное изображение.

Визуальный поиск Bing на мобильном телефоне

Другая большая поисковая система, Bing от Microsoft, также выполняет обратный поиск изображений, но называет это «визуальным поиском».»В поле поиска вверху www.bing.com/images есть значок, похожий на камеру. Щелкните, и он запросит URL-адрес изображения, чтобы загрузить изображение, или перетащите изображение.

Настройка такая же на мобильном телефоне; щелкните значок камеры Bing в любом мобильном браузере. Во всплывающем окне сообщается, что для поиска изображения вам необходимо предоставить Bing доступ к вашей камере; принять или отклонить касанием.

На следующем экране нажмите кнопку «Обзор» в левом нижнем углу. Всплывающее меню позволит вам сделать снимок, просмотреть свою библиотеку фотографий или сторонние сервисы.Нажмите «Обзор», чтобы найти фотографии, хранящиеся в сторонних сервисах, таких как iCloud Drive, Google Drive и Dropbox.

Последние версии приложения Bing (iOS и Android) позволяют делать снимки и сразу искать по ним изображения. Вы можете загрузить фотографию из своей фотопленки, отсканировать QR-код или навести камеру на текстовые или математические задачи (читеры!). Коснитесь значка увеличительного стекла на экране загрузки, коснитесь камеры вверху и выберите способ поиска.

Сторонние системы поиска изображений

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

TinEye

На сегодняшний день просканировано более 36 миллиардов изображений. TinEye позволяет искать по URL, загружать или перетаскивать на рабочий стол. На мобильном устройстве просто щелкните значок загрузки (стрелка вверх), чтобы получить возможность сделать снимок, использовать его из библиотеки или загрузить из сторонних сервисов.

Яндекс

Российская поисковая система Яндекс чем-то напоминает Bing-go-Cyrillic. В нем есть уникальный поиск изображений, который работает на мобильных устройствах прямо из браузера.Щелкните Изображения, коснитесь значка камеры в строке поиска, и вы получите обычные варианты: сделать фотографию, загрузить фотографию или найти фотографию в стороннем сервисе.

Существуют также поисковые системы, специально предназначенные для того, чтобы помочь творческим работникам узнать, не украли ли их творческие работы. Ознакомьтесь с вариантами Berify и Pixsy. Имейте в виду, что их использование может стоить вам. Однако они также будут отслеживать украденные изображения автоматически и в автономном режиме, предупреждая вас, если ваше изображение используется без разрешения.Затем вы можете собирать кражи, и это делает их полезными.

Приложения для обратного поиска изображений

Если вы предпочитаете приложения браузеру, перейдите непосредственно к инструменту обратного поиска изображений, который вы всегда держите на смартфоне.

CamFind

Бесплатно для Android и iOS
Это основной инструмент для съемки с помощью смартфона и поиска похожих предметов, а также для сравнения цен, если это снимок продукта.

Поиск по изображению

Бесплатно для Android
Вы можете управлять изображением сколько угодно перед загрузкой через это приложение, чтобы получать результаты из Google, Bing, TinEye и Яндекс.

Reversee

Бесплатно для iOS
Это приложение отправляет ваши фотографии прямо в базу данных Google Images для поиска похожих изображений, но при обновлении до профессиональной версии за 3,99 доллара США вы также можете получать результаты от Bing и Яндекс.

Расширение поиска обратного изображения

0,99 долл. США для iOS
Это не приложение, в которое вы входите, а приложение, которое добавляет расширение к другим приложениям. Он разместит одну из этих кнопок расширения в фотографиях, Facebook и других приложениях, поэтому наряду с копированием или отправкой у вас будет возможность Search Image .

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *