【Python】画像の類似度比較が可能なImageHashのインストール

【Python】画像の類似度比較が可能なImageHashのインストール プログラミング

「画像の類似度を判定したい」
「画像のハッシュ値を求めたい」
「Pythonで画像を自動的に比較したい」

このような場合には、ImageHashがおススメです。
この記事では、ImageHashについて解説しています。

本記事の内容

  • ImageHashとは?
  • ImageHashのシステム要件
  • ImageHashのインストール
  • ImageHashの動作確認

それでは、上記に沿って解説していきます。

ImageHashとは?

ImageHashとは、Pythonで書かれた画像ハッシュライブラリです。
以下のアルゴリズムをサポートしています。

  • Average hashing
  • Perceptual hashing
  • Difference hashing
  • Wavelet hashing
  • HSV color hashing (colorhash)
  • Crop-resistant hashing

画像のハッシュ値を求めることにより、画像を類似度を比較できます。
このことにより、プログラムで画像の類似度を判定できるのです。

「同じ画像なのか」
「似たような画像なのか」
「全く異なる画像なのか」

このようなことを、自動的に行うことができるようになります。
画像を扱う処理については、AI(人工知能・ディープラーニング)が得意なところです。

しかし、このような単純比較であれば、ImageHashで事足ります。
それに、ImageHashの方が処理速度は高速です。

以上、ImageHashについて説明しました。
次は、ImageHashのシステム要件を確認しましょう。

ImageHashのシステム要件

現時点(2021年11月)でのImageHashの最新バージョンは、4.2.1となります。
この最新バージョンは、2021年7月15日にリリースされています。

サポートOSに関しては、以下を含むクロスプラットフォーム対応だと思われます。

  • Windows
  • macOS
  • Linux

setup.upを見る限り、OS依存はありません。
また、サポート対象となるPythonのバージョンも記述がありません。

このような場合は、依存ライブラリを確認します。
以下が、setup.pyに記述されている依存ライブラリ(パッケージ)です。

  • Six
  • NumPy
  • SciPy
  • Pillow
  • PyWavelets

Six以外は、次のPython公式開発サイクルに準じています。

バージョンリリース日サポート期限
3.62016年12月23日2021年12月23日
3.72018年6月27日2023年6月27日
3.82019年10月14日2024年10月
3.92020年10月5日2025年10月
3.102021年10月4日2026年10月

ただし、Python 3.6は除外されています。
Python 3.6も2021年末でサポート期限が切れますからね。

よって、ImageHashがサポートするのはPython 3.7以降と言えますね。
それが無難です。

以上、ImageHashのシステム要件を説明しました。
次は、ImageHashのインストールを行います。

ImageHashのインストール

検証は、次のバージョンのPythonで行います。

> python -V 
Python 3.9.8

まずは、現状のインストール済みパッケージを確認しておきます。

> pip list 
Package    Version 
---------- ------- 
pip        21.3.1 
setuptools 58.5.3 
wheel      0.36.2

次にするべきことは、pipとsetuptoolsの更新です。
pipコマンドを使う場合、常に以下のコマンドを実行しておきましょう。

python -m pip install --upgrade pip setuptools

では、ImageHashのインストールです。
ImageHashのインストールは、以下のコマンドとなります。

pip install ImageHash

インストールは、すぐに終わります。
では、どんなパッケージがインストールされたのかを確認しましょう。

> pip list 
Package    Version 
---------- ------- 
ImageHash  4.2.1 
numpy      1.21.4 
Pillow     8.4.0 
pip        21.3.1 
PyWavelets 1.2.0 
scipy      1.7.2 
setuptools 58.5.3 
six        1.16.0 
wheel      0.36.2

上記で挙げた依存パッケージを確認できます。
問題ないですね。

以上、ImageHashのインストールについての説明でした。
最後は、ImageHashの動作確認を行います。

ImageHashの動作確認

ImageHashを使って画像を比較してみます。
類似度を数字で求めることが可能です。

そのためには、画像を二つ用意しましょう。

one.jpg

other.jpg

ohert.jpgは、one.jpgを横に反転しただけです。
これらの画像を使って、ImageHashの動作確認を行います。
それが、次のコードとなります。

from PIL import Image 
import imagehash 

hash = imagehash.average_hash(Image.open('one.jpg')) 
print(hash) 

otherhash = imagehash.average_hash(Image.open('other.jpg')) 
print(otherhash) 

print(hash == otherhash) 
print(hash - otherhash)

上記を実行した結果は、以下。

bf8cffefdf000000 
fd31fff7fb000000 
False 
12

まずは、それぞれの画像のハッシュ値を求めます。
そして、それを比較した結果が「False」です。

違う画像なので、「False」で正解と言えます。
また、差分は「12」ということです。

この数字が大きいと類似度は、低いような傾向があります。
小さいと類似度は、高いような感じです。
つまり、「0」なら同じ画像という判定になります。

同じ画像(one.jpg)を設定した場合の実行結果は、以下。

bf8cffefdf000000 
bf8cffefdf000000 
True 
0

では、次のような全然異なる画像と比較した場合はどうなるのでしょうか?

dog.jpg

one.jpgとdog.jpgを比較した結果は、以下。

bf8cffefdf000000 
ffff3f1cf7c60000 
False 
20

以上より、ImageHashを使うと簡単に画像の比較ができます。

タイトルとURLをコピーしました