Wikipedia article on TinEye говорит, что Perceptual Hashing даст результаты похожие на TinEye's. Они ссылаются на this detailed description of the algorithm. Но TinEye refuses to comment.
Самая большая проблема с подходом Перцептивная Hashing является то, что в то время как он эффективен для идентификации и того же изображения (в зависимости от перекосов, контрастные изменения и т.д.), это не большой на выявление совершенно иной образ тот же объект (например, перед автомобилем против стороны автомобиля).
TensorFlow имеет отличную поддержку для глубоких нейронных сетей, которые могут дать вам лучшие результаты. Ниже приведено подробное описание того, как вы можете использовать глубокую нейронную сеть в TensorFlow для решения этой проблемы:
Начните с предварительно обученного NN (например, GoogLeNet) или подготовьте его самостоятельно на таком наборе данных, как ImageNet. Теперь нам дана новая картина, которую мы пытаемся идентифицировать. Подайте это в NN. Посмотрите на активацию довольно глубокого слоя в NN. Этот вектор активаций подобен «отпечатку пальца» для изображения. Найдите изображение в своей базе данных с ближайшим отпечатком пальца. Если это достаточно близко, это, вероятно, один и тот же объект.
Интуиция, стоящая за этим подходом, заключается в том, что в отличие от Perceptual Hashing NN создает высокоуровневое представление изображения, включая идентификацию краев, фигур и важных цветов. Например, отпечаток пальца яблока может включать информацию о его круглой форме, красном цвете и даже его маленьком стебле.
Вы также можете попробовать что-то вроде this 2012 paper on image retrieval который использует убивание подобранных функций, таких как SIFT, региональные цветовые моменты и фрагменты контура объекта. Это, вероятно, гораздо больше работы, и это не то, что TensorFlow лучше всего.
UPDATE
OP предоставил пример пары изображений от его применения:
Ниже приведены результаты использования the demo on the pHash.org website на этой паре похожих изображений а также на пару совершенно разных изображений.
Сравнивая два изображения, предоставляемые OP:
Редька (радиальная хэш): pHash determined your images are not similar with PCC = 0.518013
DCT хэш: pHash determined your images are not similar with hamming distance = 32.000000.
Марр/мексиканская шляпа вейвлетов: pHash determined your images are not similar with normalized hamming distance = 0.480903.
Сравнение одного из его изображений со случайным изображением с моей машины:
РЕДИС (радиальная хэш): pHash determined your images are not similar with PCC = 0.690619.
DCT хэш: pHash determined your images are not similar with hamming distance = 27.000000.
Марр/мексиканская шляпа вейвлета: pHash determined your images are not similar with normalized hamming distance = 0.519097.
Заключение
Мы должны проверить больше изображений на действительно знаю. Но пока pHash, кажется, не очень хорошо. С порогами по умолчанию он не считает похожие изображения одинаковыми. И для одного алгоритма он фактически считает, что совершенно случайное изображение более похоже.
Зачем использовать TensorFlow? Хотя глубокое обучение является отличным инструментом для многих проблем с компьютерным видением, это, вероятно, не подходит для поиска изображений. –
Я открыт для предложений :) – reflog
Стандартный подход: извлечение локальных функций (SIFT или SIFT как) -> вычисление визуальных слов -> поиск изображений с похожими визуальными словами (аналогично поиску документов). необязательно проверить соответствие с использованием гомографии (или другой геометрической модели). Вы можете смотреть онлайн для поиска изображений в словах слов –