Le comparateur d'images est une bibliothèque PHP pour la comparaison d'images et le hachage. Vous pouvez comparer 2 images et plus en utilisant la méthode de hachage perceptuelle.
Basé sur le package https://github.com/kennethrapp/phasher, avec le support PHP 8 et PHPUnit. Le projet original a été abandonné en novembre 2017.
Le hachage perceptuel est une méthode pour générer un hachage d'une image qui permet de comparer plusieurs images par un indice de similitude. Vous pouvez en savoir plus sur le facteur de pirate et Phash.org.
Pour installer la bibliothèque, exécutez:
composer require sapientpro/image-comparator
ImageComparator est la classe de base de la bibliothèque:
use SapientPro ImageComparator ImageComparator ;
$ imageComparator = new ImageComparator()Après avoir créé une instance, vous pouvez utiliser l'une des méthodes disponibles:
$ imageComparator -> compare ( ' your-images/your-image1.jpg ' , ' your-images/your-image12.jpg ' ); Si le chemin d'image ne peut pas être résolu, ImageResourceException sera lancé:
$ imageComparator -> hashImage ( ' your-images/non-existent-image.jpg ' ); // SapientProImageComparatorImageResourceException: Could not create an image resource from fileExemple d'utilisation:
Nous avons deux images:
https://github.com/sapientpro/image-comparator/blob/master/tests/images/ebay-image.png?raw=true


Maintenant, comparons-les:
use SapientPro ImageComparator ImageComparator ;
$ image1 = ' https://github.com/sapientpro/image-comparator/blob/feature/phasher-implementation/tests/images/ebay-image.png?raw=true ' ;
$ image2 = ' https://github.com/sapientpro/image-comparator/blob/feature/phasher-implementation/tests/images/amazon-image.png?raw=true '
$ imageComparator = new ImageComparator ();
$ similarity = $ imageComparator -> compare ( $ image1 , $ image2 ); //default hashing without rotation
echo $ similarity ; //87.5Plus le résultat est élevé, plus la similitude des images est élevée.
Comparons différentes images:


use SapientPro ImageComparator ImageComparator ;
$ image1 = ' https://github.com/sapientpro/image-comparator/blob/feature/phasher-implementation/tests/images/ebay-image2.png?raw=true ' ;
$ image2 = ' https://github.com/sapientpro/image-comparator/blob/feature/phasher-implementation/tests/images/amazon-image2.png?raw=true '
$ imageComparator = new ImageComparator ();
$ similarity = $ imageComparator -> compare ( $ image1 , $ image2 ); //default hashing without rotation
echo $ similarity ; //54.7 L'angle de rotation peut être passé si l'image comparée est tournée. Vous devez passer sapIentpro ImageCompparator enum ImagerotationAngle Enum avec l'une des valeurs suivantes: D0 = 0 degresse, D90 = 90 degrés, D180 = 180 degrés, D270 = 270 degrés
use SapientPro ImageComparator Enum ImageRotationAngle ;
$ similarity = $ imageComparator -> compare ( $ image1 , $ image2 , ImageRotationAngle:: D180 ); //compared image will be considered rotated by 180 degrees
echo $ similarity ; //95.3 Vous pouvez également utiliser la méthode detect() qui fera tourner l'image comparée et renvoyer le pourcentage le plus élevé de similitude:
use SapientPro ImageComparator ImageComparator ;
$ image1 = ' https://raw.githubusercontent.com/sapientpro/phasher/feature/phasher-implementation/tests/images/forest1.jpg ' ;
$ image2 = ' https://raw.githubusercontent.com/sapientpro/phasher/feature/phasher-implementation/tests/images/forest1-copyrighted.jpg '
$ imageComparator = new ImageComparator ();
$ similarity = $ imageComparator -> detect ( $ image1 , $ image2 );
echo $ similarity ; //95.3 Avec les méthodes compareArray() et detectArray() vous pouvez comparer l'image source à n'importe quel nombre d'images que vous souhaitez. Le comportement est le même que dans les méthodes compare() et detect() .
use SapientPro ImageComparator ImageComparator ;
$ image1 = ' https://raw.githubusercontent.com/sapientpro/phasher/feature/phasher-implementation/tests/images/forest1.jpg ' ;
$ image2 = ' https://raw.githubusercontent.com/sapientpro/phasher/feature/phasher-implementation/tests/images/forest1-copyrighted.jpg '
$ image3 = ' https://raw.githubusercontent.com/sapientpro/phasher/feature/phasher-implementation/tests/images/forest.jpg '
$ imageComparator = new ImageComparator ();
$ similarity = $ imageComparator -> compareArray (
$ image1 ,
[
' forest ' => $ image2 ,
' anotherForest ' => $ image3
]
); // returns ['forest' => 95.33, 'anotherForest' => 75.22] Si nécessaire, vous pouvez créer une ressource d'image carrée à partir d'une autre image et la passer pour compare() , compareArray() , detect() , detectArray et hashImage() Méthodes:
use SapientPro ImageComparator ImageComparator ;
$ image1 = ' https://raw.githubusercontent.com/sapientpro/phasher/feature/phasher-implementation/tests/images/forest1.jpg ' ;
$ image2 = ' https://raw.githubusercontent.com/sapientpro/phasher/feature/phasher-implementation/tests/images/forest1-copyrighted.jpg '
$ imageComparator = new ImageComparator ();
$ squareImage1 = $ imageComparator -> squareImage ( $ image1 );
$ squareImage2 = $ imageComparator -> squareImage ( $ image2 );
$ similarity = $ imageComparator -> compare ( $ squareImage1 , $ squareImage2 );
echo $ similarity //96.43; Si nécessaire, vous pouvez convertir le tableau résultant de hashImage() en une chaîne binaire et le passer à la méthode compareHashStrings() :
use SapientPro ImageComparator ImageComparator ;
$ image1 = ' https://raw.githubusercontent.com/sapientpro/phasher/feature/phasher-implementation/tests/images/forest1.jpg ' ;
$ image2 = ' https://raw.githubusercontent.com/sapientpro/phasher/feature/phasher-implementation/tests/images/forest1-copyrighted.jpg '
$ imageComparator = new ImageComparator ();
$ hash1 = $ imageComparator -> hashImage ( $ image1 );
$ hash2 = $ imageComparator -> hashImage ( $ image2 );
$ hashString1 = $ imageComparator -> convertHashToBinaryString ( $ hash1 );
$ hashString2 = $ imageComparator -> convertHashToBinaryString ( $ hash2 );
$ similarity = $ imageComparator -> compareHashStrings ( $ hashString1 , $ hashString2 );
echo $ similarity //96.43; Par défaut, les images sont hachées à l'aide de l'algorithme de hachage moyen, qui est implémenté dans SapientProImageComparatorStrategyAverageHashStrategy . Cette stratégie est initialisée dans le constructeur de ImageComparator .
Il est également possible d'utiliser l'algorithme de hachage de différence, implémenté dans SapientPro ImageCaparator Strategy DifferenceHashStrategy. Pour l'utiliser, vous devez appeler la méthode setHashStrategy() d'ImageCaparator et passer l'instance de la stratégie:
use SapientPro ImageComparator Strategy DifferenceHashStrategy ;
$ imageComparator -> setHashStrategy ( new DifferenceHashStrategy ());
$ imageComparator -> hashImage ( ' image1.jpg ' ); Si la stratégie est définie par setHashingStrategy() , elle sera utilisée sous le capot dans d'autres méthodes de comparaison:
use SapientPro ImageComparator Strategy DifferenceHashStrategy ;
$ imageComparator -> setHashStrategy ( new DifferenceHashStrategy ());
$ imageComparator -> compare ( ' image1.jpg ' , ' image2.jpg ' ); // images will be hashed using difference hash algorithm and then compared Vous pouvez lire sur les méthodes disponibles dans notre page wiki