2

ユーザーは、PHPビルドシステムに写真をアップロードしています。それらのいくつかは、関連性のないコンテンツのために禁止としてマークしています。禁止されている写真としてマークされているこれらをスキップする「AUTO-COMPARE」アルゴリズムの最適化を探しています。すべてのアップロードは、多くのvorbindenと比較する必要があります。

可能な解決策:

1 /禁止されているファイルを保存し、コンテンツ全体を比較します-うまく機能しますが、時間がかかります。

2 /画像ファイルのチェックサムを保存し、チェックサムを比較します-これは速度を向上させるためのアイデアです。

3 /十分に高速で、写真間の類似性を比較できるインテリジェントなアルゴリズム。しかし、PHPでこれらに隣接するアイデアはありません。

最善の解決策は何ですか?

4

5 に答える 5

5

チェックサムを計算するのではなく、ハッシュを計算してください!

ハードディスク上の重複する画像を探す必要がある単純なアプリケーションを作成したことがあります。.JPG ファイルのみを検索しますが、すべてのファイルについて、最初の 1024 バイトのハッシュ値を計算し、画像の幅、高さ、サイズを追加して、"875234:640:480: 13286"、これを画像のキーとして使用します。結局のところ、このアルゴリズムでは偽の重複は見られませんでしたが、偽の重複の可能性はまだあります。ただし、このスキームでは、誰かが 1 バイトを追加したり、画像に非常に小さな調整を加えたりすると、複製が許可されます。

もう 1 つのトリックは、すべての画像のサイズと色数を減らすことです。すべての画像のサイズを 128x128 ピクセルに変更し、色数を 16 (4 ビット) に減らすと、それぞれ 8192 バイトの合理的な一意のパターンになります。このパターンでハッシュ値を計算し、ハッシュを主キーとして使用します。ヒットを取得しても、まだ誤検知がある可能性があるため、新しい画像のパターンをシステムに保存されているパターンと比較する必要があります。このパターン比較は、最初のハッシュ ソリューションが新しいイメージが一意であることを示している場合に使用できます。ただし、それは私自身のツールのためにまだ解決する必要があるものです. しかし、基本的には、画像のフィンガープリントを取得して比較するようなものです。

私の最初の解決策は、完全に一致するものを見つけます。私の2番目の解決策は、同様の画像を見つけるでしょう。(ちなみに、私は Delphi でハッシュ メソッドを書きましたが、技術的には、任意のハッシュ メソッドで十分です。)

于 2009-09-04T07:50:20.927 に答える
2

画像の類似性の比較は必ずしも些細な問題ではないため、画像比較アルゴリズムに多大な労力を費やしたい場合を除いて、画像データのある種のハッシュを作成して比較するというアイデアは、少なくとも迅速に検出できるようになります。正確な重複。私はあなたの現在の計画に行きますが、衝突の可能性が低くなるように、それがまともな(しかし速い)ハッシュであることを確認してください。

于 2009-09-04T07:40:36.127 に答える
1

示唆されているように、ハッシュの問題は、誰かが 1 ピクセルを変更すると、ハッシュがまったく異なるものになることです。

ファイルの内容を比較して、どの程度似ているかを (パーセンテージで) 返すことができる優れたフレームワークが世の中にあります。具体的には、コマンド ライン アプリがあります。これは、科学環境内でビルドされたもので、オープン ソースでしたが、その名前を思い出せません。

この種のフレームワークは、多数のファイルがあっても非常に高速になる可能性があるため、間違いなく役立ちます。

于 2009-09-04T09:28:35.207 に答える