Рубрики
Без рубрики

Сдхаш

В этой статье рассказывается о пакете SDHASH, которая является библиотекой Python для Comp … Tagged с помощью Python, Sdhash, Perceptualhash, изображений.

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

Как люди, очень легко заметить, если два изображения «одинаковы». К сожалению, то же самое можно сказать о компьютерах. Простой подход, такой как сравнение двух изображений Pixel от Pixel, потерпит неудачу во всех, кроме самых простых случаев. Даже более сложный метод, такой как вычисление \ mathcal {l} _1 или \ mathcal {l} _2 среднего расстояния между изображениями и получения небольшого значения, подразумевающего сходство, не намного лучше.

Например, на исходном изображении A следующее должно создавать эквивалентные изображения:

  • Масштабирование с тем же соотношением сторон.
  • Масштабирование с очень сходным соотношением сторон.
  • Добавление высокочастотного шума.
  • Небольшое размытие/фильтрация высокого прохода.
  • Сжатие и реконструкция потеря.

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

Следующие состязательные преобразования должны также создавать эквивалентные изображения:

  • Удаление небольшой области с границ.
  • 90, 180, 270 градусов вращение.
  • Горизонтальный или вертикальный переворот.
  • Добавление или удаление водяного знака.
  • Изменение цветовых плоскостей, но не яркости.
  • Преобразование серого.
  • Крупномасштабное редактирование, ограниченное небольшой площадью (например, замена текста другим)

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

API, который он раскрывает, просто. test_duplicate Метод получает два изображения PIL в качестве входного и возвращающего любого Верно или Ложный в зависимости от того, считает ли он изображения эквивалентными или нет. hash_image Метод возвращает кодированный базовый 64 хэш MD5 «стабильного» содержимого изображения. test_duplicate Метод, по сути, является проверкой того, равны ли хэши аргументов. Для более продвинутого использования второй метод – это инструмент выбора.

Например, можно использовать таблицу базы данных хэшей, в результате чего hash_image как основной ключ. Всякий раз, когда нужно добавлять новое изображение, его можно проверить сначала в отношении таблицы, и только если оно еще не найдено, вставлено. Это позволяет выполнять сравнения O (1) для каждой вставки вместо O (n). Точно так же задание MapReduce может вычислить хэши изображений на стадии карты, что приведет к тому, что все идентичные изображения будут сгруппированы вместе с одним и тем же ключом на стадии уменьшения. Это позволяет алгоритм O (n) для обезвреживания большого набора данных.

В качестве бонуса Sdhash работает с Gif Animations. Это рассматривает их как последовательность кадров. Рассматриваются только первые, пятые, десятые кадры. Используется тот же базовый подход, но все кадры рассматриваются одновременно.

import sdhash
from PIL import Image

i1 = Image.open('test1.png')
i2 = Image.open('test1_noise.png')
i3 = Image.open('test2.png')

h = sdhash.Hash()

h.test_duplicate(i1, i2) # True
h.test_duplicate(i1, i3) # False
h.hash_image(i1) # [an md5 output]

Основной алгоритм прост:

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

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

Основные зависимости – в библиотеке изображений Python, Numpy/Scipy и т. Д. Таким образом, в зависимости от SDHASH приносит много багажа. В идеале и, поскольку это зависит только от очень маленькой функциональности, библиотека будет просто включать код DCT напрямую. Не стесняйтесь вносить хорошо протестированную реализацию.

Установка проста, через Pip :

pip install sdhash

Оригинал: “https://dev.to/horia141/sdhash-4iaj”