PHPにて「ImageHash」ライブラリを使用し画像の類似度を算出する方法
以前にPHPの「image-comparator」ライブラリで画像の類似度を算出する方法をメモしたが、今回は「ImageHash」ライブラリというものを見つけたのでこちらで同じようなことを試してみたい。以下にサンプルと利用方法をメモ。
サンプル
https://taitan916.info/sample/ImageHash/
ImageHash
GitHub
https://github.com/jenssegers/imagehash
インストール
サーバにSSH接続し以下コマンドでインストールする。
composer require jenssegers/imagehash
利用方法
ソースコード
<?php
require 'vendor/autoload.php';
use Jenssegers\ImageHash\Hash;
use Jenssegers\ImageHash\ImageHash;
use Jenssegers\ImageHash\Implementations\DifferenceHash;
$hasher = new ImageHash(new DifferenceHash());
//画像をハッシュ化
$hash_1 = $hasher->hash('./img/001.webp');
//データベースに保存するために64bit化
$hash_1_bit = $hash_1->toBits();
var_dump($hash_1_bit); //0010011101000011000100110011011100110111001111100010111001101111
//データベースから取り出した値をハッシュに変換
$hash_1_hash = Hash::fromBits($hash_1_bit);
$hash_2 = $hasher->hash('./img/002.webp');
//類似度の算出
$distance = $hasher->distance($hash_1_hash, $hash_2);
var_dump($distance); //29
類似度について
「image-comparator」ライブラリとは異なり、類似度は数値が小さい方が類似しているという判定になる。
サイト上で使う場合には「100 - 算出した類似度」で表示したいところだけど、GitHubにて「等しい画像の距離が常に0になるとは限らない」との但し書きがある点に注意(同じ画像でも類似度100にならない可能性あり)。
MySQLと連携する場合
MySQLと連携する場合は64bit化したものをデータベースに格納しておき、以下の記事の通り算出すると良い。
所感
「image-comparator」の時も思ったが、あまり類似度の精度が高くないように思われる。この辺り何とかならないのか調査しておきたいところ。
関連記事
-
-
PHPでスマホ(iPhone / Android)に画像をダウンロードさせる方法とダウンロード後の保存場所について
PHPで作ったシステムにスマホ(iPhone / Android)でアクセスし何 ...
-
-
PHPで縦横どちらかが指定の長さを超えた場合、比率を保ったままリサイズ
PHPで縦横どちらかが指定の長さを超えた場合、 比率を保ったままリサイズしたかっ ...
-
-
PHPで画像を上下反転させ保存する
やりたかった事は、下記の通り。 ・既にフォルダに保存されている画像を上下反転させ ...
-
-
PHPで画像アップロード、リサイズ、形式変換(jpg->webp等)はclass.upload.phpが便利
今までPHPで画像関連の処理を行う場合、リサイズの時のみsmart_resize ...
-
-
PHPにて指定した画像に対して、繰り返し透かし画像処理する方法
画像素材等のサイトで無料版の画像に対して「sample」等の透かし画像処理を行っ ...