Этот проект предназначен для поиска похожих изображений в базе товарных картинок с учетом различных трансформаций: поворот, отзеркаливание, изменение размера, кадрирование, изменение фона, цветовая коррекция, ретушь и наложение градиентов.
Система использует несколько методов сравнения изображений:
- HashComparator — быстрый поиск по среднему хэшу (для точных и почти точных копий).
- PerceptualHashComparator — устойчив к небольшим изменениям, использует перцептивные, дифференциальные и вейвлет-хэши (pHash, dHash, wHash).
- FeatureComparator (ORB) — сравнение по ключевым точкам (ORB), устойчиво к повороту, масштабированию, частичному кадрированию.
- NeuralComparator (ResNet18) — извлекает признаки с помощью нейросети (ResNet18) и сравнивает их косинусным сходством, что позволяет находить даже сильно изменённые, но похожие по смыслу изображения.
Результирующая оценка — взвешенное среднее всех методов. Для каждого совпадения выводятся оценки каждого метода отдельно.
- Создайте и активируйте виртуальное окружение:
python3 -m venv venv source venv/bin/activate - Установите зависимости:
pip install -r requirements.txt
-
Поместите изображения для поиска в папку
images/. -
Запустите поиск похожих изображений:
python -m image_comparison_system.main images/image1.png images/ 0.7
где:
- image1.png — путь к целевому изображению,
- images — папка с базой изображений,
0.7— порог похожести (от 0 до 1).
-
В результате вы увидите список похожих изображений с общей оценкой и оценками каждого метода сравнения.
- Создайте новый класс-компаратор в папке comparators/, унаследованный от BaseComparator.
- Реализуйте метод compare(self, img1, img2).
- Зарегистрируйте компаратор и его вес в CompositeComparator (composite_comparator.py).
Для демонстрации устойчивости системы к различным трансформациям были использованы следующие изображения:
- image1.png — перевёрнутое изображение оригинала
- image2.png — отзеркаленное изображение оригинала
- image3.png — точная копия image1.png
- image4.jpg — другое изображение с похожими объектами (трубы, но другие)
- image5.png — оригинал
Результаты сравнения (целевое изображение: image5.png, порог похожести: 0):
❯ python3 -m image_comparison_system.main images/image5.png images/ 0
Found 4 similar images:
images/image1.png (similarity: 0.659)
HashComparator: 0.719
PerceptualHashComparator: 0.651
FeatureComparator: 0.227
NeuralComparator: 0.915
images/image3.png (similarity: 0.659)
HashComparator: 0.719
PerceptualHashComparator: 0.651
FeatureComparator: 0.227
NeuralComparator: 0.915
images/image2.png (similarity: 0.594)
HashComparator: 0.531
PerceptualHashComparator: 0.521
FeatureComparator: 0.227
NeuralComparator: 0.954
images/image4.jpg (similarity: 0.455)
HashComparator: 0.484
PerceptualHashComparator: 0.469
FeatureComparator: 0.024
NeuralComparator: 0.709Комментарий:
Средняя оценка больше 0.5 относится ко всем случаям когда изображение было изменено, средняя оценки ниже 0.5 относится к другому изображению труб.