4

互いに比較しなければならない画像が 130 万枚以上あり、1 日に数百枚が追加されます。

私の会社はイメージを取り、ベンダーが利用できるバージョンを作成します。

多くの場合、ファイルは互いに非常に似ています。たとえば、2 つの異なる会社が 2 つの異なる画像 (マクドナルドのロゴが付いた JPG と GIF) を 1 か月間隔で送信することがあります。

起こっていることは、すでに作成されたものを単にコピーして貼り付けるか、少なくともアーティストの可能な出発点として提案することができたときに、同じロゴを2回作成していることに気付くということです.

フィンガープリントを作成するアルゴリズムや、新しい画像がアップロードされたときに簡単なクエリを実行できるものを探しました。時間は比較的問題ではありません。フィンガープリントの作成に 1 秒かかる場合、150 日かかります。指紋を作成しますが、それを行うために 3 つまたは 4 つのサーバーを取得することさえできるので、かなりの節約になります。

私はPHPに堪能ですが、アルゴリズムが疑似コードであるか、CIでさえそれを読んで翻訳を試みることができます(C固有のライブラリを使用しない限り)

現在、すべての画像の MD5 を実行して、まったく同じ画像をキャッチしています。この質問は、画像のサイズを変更し、サイズ変更された画像で md5 を実行して、変更された画像をキャッチすることを考えていたときに出てきました。別の形式で保存してサイズを変更しましたが、それでも十分な認識が得られませんでした。

言及していない場合は、「類似」の可能性のある画像を提案するだけで十分です.

編集

チェックは 1 分間に複数回実行する必要があることに注意してください。そのため、最適な解決策は、画像ごとにいくつかの値を取得して保存し、将来、見ている画像と比較する必要なく使用できるようにすることです。サーバー全体を再スキャンします。

ヒストグラムに言及しているページを読んだり、画像のサイズを非常に小さいサイズに変更したり、可能なタグを取り除いてからグレースケールに変換したり、そのファイルのハッシュを行って比較に使用したりしています。成功したら、ここにコード/回答を投稿します

4

2 に答える 2

2

file_get_contents を使用してみてください: http://www.php.net/manual/en/function.hash-file.php

ハッシュが一致する場合、それらがまったく同じであることがわかります。

編集: 可能であれば、画像ハッシュを保存すると思います。データベーステーブルの画像パスは、サーバーの負荷を制限するのに役立つかもしれません。最初の画像で一度ハッシュ アルゴリズムを実行し、そのハッシュをテーブルに保存する方がはるかに簡単です。その後、新しい画像が送信されたときに、画像をハッシュしてからデータベース テーブルを検索できます。ハッシュが既に存在する場合は破棄します。ハッシュをテーブル インデックスとして使用できるため、一致が見つかったら、残りをチェックする必要はありません。

もう 1 つのオプションは、データベースを使用しないことです...しかし、そうすると、常にルックアップを行う必要があります。つまり、受信画像のハッシュをチェックし、保存されているすべての画像に対してメモリ内で時間検索を実行します。

編集 #2: ここでソリューションを表示してください:画像比較 - 高速アルゴリズム

于 2012-07-31T22:56:41.593 に答える
0

プロセスをスピードアップするには、すべてのファイルをサイズでソートし、2 つのサイズが等しい場合にのみ内部を比較します。内部データを比較するには、ハッシュ比較を使用するのも最速の方法です。お役に立てれば。

于 2012-08-01T06:18:50.197 に答える