pHash
pHash (Perceptual Hash, перцептивный хеш) — это алгоритм и метод создания цифрового отпечатка (хеша) для мультимедийных данных (изображений, аудио, видео), основанный на восприятии их содержания человеком, а не на точном побитовом сравнении. В отличие от криптографических хешей (например, MD5, SHA-1), где минимальное изменение исходного файла приводит к полному изменению хеша, перцептивный хеш остаётся схожим для визуально или аудиально близких объектов, что позволяет обнаруживать модифицированные, масштабированные, сжатые или перекодированные копии.
Принцип работы
Основная идея pHash заключается в преобразовании содержимого файла в компактное представление (обычно 64-битное число или строка), которое инвариантно к определённым трансформациям. Для изображений алгоритм, как правило, включает следующие этапы:
- Приведение к единому размеру. Изображение уменьшается до фиксированного размера (например, 32×32 пикселя), чтобы нивелировать разницу в разрешении.
- Преобразование в оттенки серого. Цветовая информация отбрасывается, так как она не является ключевой для восприятия формы и структуры.
- Применение дискретного косинусного преобразования (ДКП). Изображение разбивается на частотные компоненты. Низкие частоты (отвечающие за общую яркость и крупные детали) сохраняются, а высокие (шум, мелкие детали) отбрасываются.
- Вычисление среднего значения. Вычисляется средняя яркость всех пикселей полученного после ДКП изображения.
- Бинаризация. Каждый пиксель сравнивается со средним значением: если яркость пикселя выше среднего, ему присваивается значение «1», если ниже — «0». Полученная последовательность нулей и единиц и является перцептивным хешем.
Для сравнения двух хешей используется расстояние Хэмминга — количество позиций, в которых биты различаются. Чем меньше это расстояние, тем более похожи изображения. Пороговое значение, при котором изображения считаются дубликатами, обычно устанавливается эмпирически (например, до 10–15 различий для 64-битного хеша).
История и развитие
Концепция перцептивного хеширования была предложена в начале 2000-х годов как ответ на потребность в эффективном поиске дубликатов и модифицированных копий в больших коллекциях цифровых данных. Одним из пионеров в этой области стал исследователь Эван Клингер (Evan Klinger), который в 2006 году создал библиотеку pHash.org. Она стала одной из первых открытых реализаций, поддерживающих хеширование изображений, аудио и видео.
В 2013 году проект был приобретён компанией Hacker Factor (США), которая продолжила его развитие, но переход на коммерческую лицензию для некоторых функций ограничил использование оригинальной библиотеки в открытых проектах. Впоследствии появились альтернативные реализации, такие как pHash в составе библиотеки ImageMagick, dHash (Difference Hash) и aHash (Average Hash), а также встроенные функции в системах компьютерного зрения (например, в OpenCV).
Применение
Перцептивное хеширование нашло широкое применение в различных областях, где требуется идентификация контента без точного сравнения файлов.
Поиск дубликатов изображений
Сервисы фотохостинга (например, Flickr, Pinterest) и менеджеры фотографий (Google Photos, Apple Photos) используют pHash для обнаружения и группировки одинаковых или почти одинаковых снимков, включая те, которые были пережаты, обрезаны или изменены по цвету.
Модерация контента
Платформы социальных сетей и видеохостинги (например, YouTube, Facebook — организация признана экстремистской и запрещена в РФ) применяют перцептивные хеши для автоматического выявления запрещённого контента (насилие, порнография, экстремистские материалы). Создаётся база хешей известных нарушающих материалов, и любой загружаемый файл сравнивается с ней. Это позволяет блокировать повторные загрузки, даже если файл был перекодирован или изменён.
Защита авторских прав
Правообладатели (киностудии, музыкальные лейблы) используют pHash для отслеживания нелегального распространения своих произведений. Системы автоматически сканируют файлообменные сети и сайты, вычисляя хеши и сравнивая их с эталонными.
Кластеризация и дедупликация
В системах управления базами данных и облачных хранилищах pHash помогает находить и удалять дубликаты файлов, экономя место. В научных исследованиях (например, в биологии или астрономии) он используется для группировки схожих изображений, полученных с микроскопов или телескопов.
Ограничения и критика
Несмотря на эффективность, перцептивное хеширование имеет ряд недостатков:
- Чувствительность к сильным трансформациям. Алгоритм устойчив к масштабированию, небольшому сжатию и изменению яркости, но может давать сбои при сильном повороте, зеркальном отражении, кадрировании, добавлении водяных знаков или изменении перспективы.
- Коллизии. Теоретически возможно, что два совершенно разных изображения (например, чёрный квадрат и белый круг) будут иметь одинаковый хеш, хотя на практике вероятность этого мала для качественных реализаций.
- Зависимость от реализации. Разные библиотеки (pHash, dHash, aHash) могут давать разные хеши для одного и того же изображения, что затрудняет совместимость между системами.
- Уязвимость к атакам. Специально модифицированное изображение (например, с добавлением невидимого шума) может быть создано так, чтобы его хеш совпал с хешем целевого изображения-оригинала, что используется для обхода систем модерации.
Известные библиотеки и инструменты
- pHash.org — оригинальная библиотека на C++, поддерживающая изображения, аудио и видео (частично коммерческая).
- ImageMagick — утилита командной строки, содержащая реализацию pHash для изображений.
- OpenCV — библиотека компьютерного зрения, включает модуль
img_hashс реализациями pHash, aHash, dHash. - Python-библиотеки —
imagehash(популярная обёртка для pHash, aHash, dHash, whash),phash(обёртка для оригинальной библиотеки). - Java-библиотеки —
phash(реализация на Java).
Источники
- Klinger, E., & Starkweather, D. (2006). pHash: A perceptual hash library. pHash.org.
- Monga, V., & Evans, B. L. (2006). Perceptual image hashing via feature points: performance evaluation and trade-offs. IEEE Transactions on Image Processing.
- Zauner, C. (2010). Implementation and benchmarking of perceptual image hash functions. Upper Austria University of Applied Sciences.
- Hacker Factor. (2013). pHash: The Open Source Perceptual Hash Library. Hacker Factor Blog.
- Документация библиотеки OpenCV: модуль
img_hash.
BFOmetr — база данных и аналитика по компаниям России.
На главную BFOmetr →