Image Comparator ist eine PHP -Bibliothek für Bildvergleich und Hashing. Sie können 2 und mehr Bilder mithilfe der Wahrnehmungs -Hashing -Methode vergleichen.
Basierend auf https://github.com/kennethrapp/Phasher -Paket mit PHP 8 und Phpunit -Unterstützung. Das ursprüngliche Projekt wurde im November 2017 aufgegeben.
Wahrnehmungshashing ist eine Methode, um einen Hash eines Bildes zu erzeugen, mit dem mehrere Bilder durch einen Index der Ähnlichkeit verglichen werden können. Weitere Informationen finden Sie unter dem Hacker -Faktor und Phash.org.
Um die Bibliothek zu installieren, führen Sie aus:
composer require sapientpro/image-comparator
ImageComparator ist die Kernklasse der Bibliothek:
use SapientPro ImageComparator ImageComparator ;
$ imageComparator = new ImageComparator()Nach dem Erstellen einer Instanz können Sie eine der verfügbaren Methoden verwenden:
$ imageComparator -> compare ( ' your-images/your-image1.jpg ' , ' your-images/your-image12.jpg ' ); Wenn der Bildpfad nicht aufgelöst werden kann, wird ImageResourceException geworfen:
$ imageComparator -> hashImage ( ' your-images/non-existent-image.jpg ' ); // SapientProImageComparatorImageResourceException: Could not create an image resource from fileBeispiel Verwendung:
Wir haben zwei Bilder:
https://github.com/sapiENTPRO/Image-comparator/blob/master/tests/images/ebay-image.png?raw=true


Jetzt vergleichen wir sie:
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.5Je höher das Ergebnis, desto höher ist die Ähnlichkeit von Bildern.
Vergleichen wir verschiedene Bilder:


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 Der Rotationswinkel kann übergeben werden, wenn das Bild gedreht wird. Sie müssen SapientPro Imagebarator Enum Imagerotationangle enum mit einem der folgenden Werte: D0 = 0 Degress, D90 = 90 Grad, D180 = 180 Grad, D270 = 270 Grad passieren
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 Sie können auch die detect() -Methode verwenden, die das verglichene Bild dreht und den höchsten Prozentsatz der Ähnlichkeit zurückgibt:
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 Mit compareArray() und detectArray() -Methoden können Sie das Quellbild mit einer beliebigen Anzahl von Bildern vergleichen, die Sie möchten. Das Verhalten ist das gleiche wie in den Methoden compare() und 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] Bei Bedarf können Sie eine quadratische Bildressource aus einem anderen Bild erstellen und an compare() , compareArray() , detect() , detectArray und hashImage() -Methoden übergeben:
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; Bei Bedarf können Sie das resultierende Array von hashImage() in eine binäre Zeichenfolge konvertieren und an compareHashStrings() Methode übergeben:
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; Standardmäßig werden Bilder unter Verwendung des durchschnittlichen Hashing -Algorithmus gehasht, der in SapientProImageComparatorStrategyAverageHashStrategy implementiert wird. Diese Strategie wird im Konstruktor des ImageComparator initialisiert.
Es ist auch möglich, einen Differenzhashing -Algorithmus zu verwenden, der in SapiENTPRO ImageComparator Strategy Differenzhashstrategy implementiert ist. Um es zu verwenden, müssen Sie setHashStrategy() -Methode von ImageComparator aufrufen und die Instanz der Strategie bestehen:
use SapientPro ImageComparator Strategy DifferenceHashStrategy ;
$ imageComparator -> setHashStrategy ( new DifferenceHashStrategy ());
$ imageComparator -> hashImage ( ' image1.jpg ' ); Wenn die Strategie von setHashingStrategy() festgelegt wird, wird sie unter der Haube bei anderen Vergleichsmethoden verwendet:
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 Sie können über verfügbare Methoden auf unserer Wiki -Seite lesen