フォルダ内の重複画像を取り除きたい(1)

「あるフォルダ内に保存されている画像が重複しているかを確認する」といった用途の場合、sha1等のハッシュを計算する事で重複を除外する事が出来ます。

この方法はどの様なファイルに対しても上手く動作してくれるのですが、ファイルのバイナリが完全に一致していなければ同一ファイルと認識されません。

特に画像ファイルの場合ですと、

  • 画像自体は完全に同じだがEXIF等のタグ情報が異なる。
  • 画像としては同じように見えるが、解像度が異なる。

といった画像は「同じ(似ている)」だと認識して欲しい時があります。

imagehash

そんな要求に対応するためにimagehashというものがあります。

Pythonではimagehashというモジュールがあり、Pillowと組み合わせることで容易にimagehashを計算する事が出来ます。

実際にハッシュを取得してみる

 いろんなフーちゃん

わりとうまくいっているみたい。

NNC Utils

まだ完成していない部分もありますが、ひとまずGitHubで公開しました。

ついでにGUIもつけてみたりして。

 PyQt5(画像はMac版)を使用しています。

.

Windows用バイナリ

NNC Utils

OneDriveからGitHubに移動させました。

簡単な使用方法

インストール方法

圧縮されたファイルをデスクトップ以外の場所に展開してください。

実行方法

実行は以下の三通りの方法があります。

なお、どちらの方法を使用してもファイルの自動削除等は行いませんので、結果が保存されたファイルを頼りに処理を行ってください。

(使用方法1)

コマンドプロントからchk_image_dup.exeを引数付きで実行します。

REM 使い方
chk_image_dup.exe -s 調べたいフォルダ名

結果はchk_image_dup.exeが置かれている場所にimage_dc_result.tsvという名称で保存されます。

(使用方法2)

同梱されているimage_dc.batのショートカットを好きな場所(例えばデスクトップ)に作成します。

作成したショートカットに検索したいファイルをドロップすると、そのフォルダ以下に対して重複確認を行ってくれます。

結果はchk_image_dup.exeが置かれている場所にimage_dc_result.tsvという名称で保存されます。

(使用方法3)

nnc_utils.exeを実行するとGUIモードで立ち上がります。

結果は、ウィンドウ内のテキストボックスとnn_utils.exeが置かれている場所にimage_dc_result.tsvという名称で保存されます。

image_dc_result.tsvについて

重複ファイルが見つかるとimage_dc_result.tsvに重複したファイル名が保存されます。

ファイルはタブ区切りのテキストファイルで、それぞれのカラムは以下の内容となっています。

  • イメージハッシュ値(値が同じ物は同じ(或いは似ている)内容の画像ファイル)
  • ファイル名称
  • 画像の幅
  • 画像の高さ
  • 画像形式
  • ファイルフォーマット

対応している画像形式はPillowがサポートしているものとなります。(こちらで動作確認をしているわけではありません)

アンインストール方法

設定ファイル等は生成しませんので、展開したファイルを全て削除してください。

.