Estoy utilizando la técnica de hash perceptual para encontrar imágenes casi duplicadas y duplicadas exactas. El código funciona perfectamente para encontrar imágenes duplicadas exactas. Sin embargo, encontrar imágenes casi duplicadas y ligeramente modificadas parece ser difícil. Como la puntuación de diferencia entre su hash es generalmente similar a la diferencia de hash de imágenes aleatorias completamente diferentes.
Para abordar esto, traté de reducir la pixelación de las imágenes casi duplicadas a 50x50 píxeles y convertirlas en blanco y negro, pero aún no tengo lo que necesito (puntuación de pequeña diferencia).
Esta es una muestra de un par de imágenes casi duplicadas:
Imagen 1 (a1.jpg):
Imagen 2 (b1.jpg):
La diferencia entre la puntuación de hash de estas imágenes es: 24
Cuando están pixelados (50x50 píxeles), se ven así:
rs_a1.jpg
rs_b1.jpg
¡La puntuación de diferencia de hash de las imágenes pixeladas es aún mayor! : 26
A continuación, dos ejemplos más de pares de imágenes casi duplicadas según lo solicitado por @ann zen:
par 1
par 2
El código que uso para reducir el tamaño de la imagen es este:
from PIL import Image with Image.open(image_path) as image: reduced_image = image.resize((50, 50)).convert('RGB').convert("1")Y el código para comparar el hashing de dos imágenes:
from PIL import Image import imagehash with Image.open(image1_path) as img1: hashing1 = imagehash.phash(img1) with Image.open(image2_path) as img2: hashing2 = imagehash.phash(img2) print('difference : ', hashing1-hashing2)