PHPの知覚ハッシュ



TLドクター
作曲家the libをインストールします
composer install bdelespierre/php-phash
2つのコマンドを公開します.
vendor/bin/phash generate <image>
vendor/bin/phash compare <image1> <image2>

知覚的ハッシング
あなたが社会的ネットワークを開発していて、人々が他の人々のコンテンツを再投稿するのを防ぎたいとしましょう.どうやってやるの?
おそらく、MD 5チェックサムを使うことはできません.なぜなら、あなたが比較しているファイルはわずかに異なっているからです.
幸いにも、プログラムがイメージを「見える」かどうかを決定する非常に単純な方法があります.
幸運なあなた、私はちょうどそれをするためにlibを書きました!ここでどのように動作します.
Perceptual Hashing
デモ
注:以下の手順は から、このアルゴリズムを導入するためのそれらのおかげで借りている.
STEP 1 : 8 x 8に戻す
Step 2 :グレースケールに色を減らす.
ステップ3 :計算の色の平均.
Step 4 :ビットを計算するピクセルを反復処理するピクセルの色が平均を下回っているなら、それはゼロです.
Step 5 : 64ビットハッシュを作成する
Hackerfactor
PHPでは
ちょっと似ています.
$image = $this->manager->make($file)
    ->resize($size, $size)
    ->greyscale();

$sum = 0;
for ($x = 0; $x < $size; $x++) {
    for ($y = 0; $y < $size; $y++) {
        $sum += $image->pickColor($x, $y, 'array')[0];
    }
}

$mean = $sum / ($size ** 2);
$bits = "";
for ($x = 0; $x < $size; $x++) {
    for ($y = 0; $y < $size; $y++) {
        $bits .= $image->pickColor($x, $y, 'array')[0] > $mean ? 1 : 0;
    }
}
あなたはそれをコピーする必要はありません.ジャストグラブ.

ハッシュを比較する方法
ここの我々のハッシュは、単にビットフィールドです.初心者のために、それが操作するのがより簡単であるので、私は鋭敏なbitfieldの代わりにストリングとしてそれを表現しました.
今「遠く」を決定するために、イメージはもう一つからあります、我々がする必要があることは彼らのハッシュを比較することです.我々は、the packageを使用してそれを行うことができます.
$hash1 = phash('images/1.jpg');
$hash1 = phash('images/2.jpg');
$size  = strlen($hash1);

for ($dist = 0, $i = 0; $i < $size; $i++) {
    if ($hash1[$i] != $hash2[$i]) {
        $dist++;
    }
}

$similarity = 1 - $dist / $size;
そして、Vilは引きます!$similarityは0(まったく異なる)と1(正確に同じ)の間のフロートとなります.0.95以上の値はイメージが非常に近いことを意味します.
閉じるこの動画はお気に入りから削除されています.
すぐにこの1つのようなより便利なスニペットを参照してください!