画像コンパレータは、画像比較とハッシュするためのPHPライブラリです。知覚ハッシュメソッドを使用して、2つ以上の画像を比較できます。
https://github.com/kennethrapp/phasherパッケージに基づき、PHP 8およびPHPunitサポートを備えています。元のプロジェクトは2017年11月に放棄されました。
知覚ハッシュは、類似性のインデックスによって複数の画像を比較できる画像のハッシュを生成する方法です。 Hacker Factorとphash.orgで詳細を確認できます。
ライブラリをインストールするには、実行してください。
composer require sapientpro/image-comparator
ImageComparatorは、ライブラリのコアクラスです。
use SapientPro ImageComparator ImageComparator ;
$ imageComparator = new ImageComparator()インスタンスを作成した後、利用可能な方法のいずれかを使用できます。
$ imageComparator -> compare ( ' your-images/your-image1.jpg ' , ' your-images/your-image12.jpg ' );画像パスを解決できない場合、 ImageResourceExceptionはスローされます。
$ imageComparator -> hashImage ( ' your-images/non-existent-image.jpg ' ); // SapientProImageComparatorImageResourceException: Could not create an image resource from file使用例:
2つの画像があります。
https://github.com/sapientpro/image-comparator/blob/master/tests/images/ebay-image.png?raw=true


さて、それらを比較しましょう:
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.5結果が高いほど、画像の類似性が高くなります。
さまざまな画像を比較しましょう:


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画像が回転している場合、回転角を通過させることができます。次の値のいずれかで sapientPro ImageComparator Enum ImagERotationAngle Enumを渡す必要がありD0 。D0= 0 Degress、 D90 = 90 = D180 = 180度、 D270 = 270度
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また、比較された画像を回転させ、類似性の最高の割合を返す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 '
$ imageComparator = new ImageComparator ();
$ similarity = $ imageComparator -> detect ( $ image1 , $ image2 );
echo $ similarity ; //95.3 compareArray()およびdetectArray()メソッドを使用すると、ソース画像を任意の数の画像と比較できます。動作はcompare()および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]必要に応じて、別の画像から正方形の画像リソースを作成し、それを渡してcompare() 、 compareArray() 、 detect() 、 detectArray 、およびhashImage()メソッドに渡すことができます。
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;必要に応じて、結果のアレイcompareHashStrings() hashImage()からバイナリ文字列に変換し、それを渡すことができます。
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;デフォルトでは、 SapientProImageComparatorStrategyAverageHashStrategyに実装されている平均ハッシュアルゴリズムを使用して、画像がハッシュされます。この戦略は、 ImageComparatorのコンストラクターで初期化されます。
SapientPro ImageComparator Strategy DifferenceHashStrategyに実装されている差異ハッシュアルゴリズムを使用することもできます。それを使用するには、ImageComparatorのsetHashStrategy()メソッドを呼び出し、戦略のインスタンスを渡す必要があります。
use SapientPro ImageComparator Strategy DifferenceHashStrategy ;
$ imageComparator -> setHashStrategy ( new DifferenceHashStrategy ());
$ imageComparator -> hashImage ( ' image1.jpg ' );戦略がsetHashingStrategy()によって設定されている場合、他の比較方法でフードの下で使用されます。
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 Wikiページで利用可能な方法について読むことができます