Parfois, deux fichiers d'images peuvent être différents au niveau du fichier, mais un être humain les considérerait comme perceptivement identiques. Supposons maintenant que vous ayez une énorme base de données d'images et que vous souhaitiez savoir si un humain penserait qu'une image X est présente dans la base de données ou non. Si toutes les images avaient un hachage perceptif / une empreinte digitale, alors on pourrait hacher l'image X et il serait facile de voir si elle est dans la base de données ou non.
Je sais que des recherches ont été menées sur le sujet et que certains algorithmes existent, mais existe-t-il un outil, tel qu'un outil de ligne de commande UNIX ou une bibliothèque que je pourrais utiliser pour calculer un tel hachage sans avoir à implémenter un algorithme à partir de zéro ?
edit : code pertinent de findimagedupes, utilisant ImageMagick
try $image->Sample("160x160!");
try $image->Modulate(saturation=>-100);
try $image->Blur(radius=>3,sigma=>99);
try $image->Normalize();
try $image->Equalize();
try $image->Sample("16x16");
try $image->Threshold();
try $image->Set(magick=>'mono');
($blob) = $image->ImageToBlob();
éditer : Attention ! L'objet ImageMagick $image semble contenir des informations sur l'heure de création d'un fichier image qui a été lu. Cela signifie que le blob que vous obtenez sera différent même pour la même image, si elle a été récupérée à un moment différent. Pour s'assurer que l'empreinte digitale reste la même, utilisez $image->getImageSignature() comme dernière étape.