python 計算 圖片的dhash (different hash)

需求背景

運營的同事提了個需求:貨源審覈人員天天要審覈貨源的照片,查看一個照片,檢查其是不是之前貨源已經使用過的,這個工做機械、高度重複,但願能作個程序自動比對,把可能重複/類似的圖片找出來。html

需求分析

對這個需求作了分析後,有一下結論:python

  1. 圖片多是徹底同樣的,只是格式不一樣,png,jpeg, gif幾種格式
  2. 圖片多是類似的,只是通過了放縮、剪裁
  3. 圖片多是類似的,通過了簡單的塗鴉
  4. 圖片多是類似/同樣的,可是作了旋轉

作這個程序不是要百分百找出重複圖片,只須要找出大部分可能重複圖片便可大幅度減小重複勞動。git

解決辦法

使用different hash算法,計算兩張圖片的hash距離,若是距離小於一個閾值,則認爲其類似度過高。github

安裝PIL

yum install -y python-devel
wget http://effbot.org/downloads/Imaging-1.1.7.tar.gz
tar xvfz Imaging-1.1.7.tar.gz
cd Imaging-1.1.7

找到 setup.py 這個文件,修改下面幾行代碼(默認TCL_ROOT的設置爲NONE,這裏要傳到系統庫的路徑才行):算法

TCL_ROOT = "/usr/lib64/"
JPEG_ROOT = "/usr/lib64/"
ZLIB_ROOT = "/usr/lib64/"
TIFF_ROOT = "/usr/lib64/"
FREETYPE_ROOT = "/usr/lib64/"
LCMS_ROOT = "/usr/lib64/"

執行安裝:shell

python setup.py install

安裝dhash

pip install dhash

使用PIL 計算dhashcode

import dhash
from PIL import Image

image = Image.open('dhash-test.jpg')
row, col = dhash.dhash_row_col(image)
print(dhash.format_hex(row, col))

使用 ImageMagick 計算dhash (須要安裝ImageMagick)orm

import dhash
from wand.image import Image

with Image(filename='dhash-test.jpg') as image:
    row, col = dhash.dhash_row_col(image)
print(dhash.format_hex(row, col))

相關文章
相關標籤/搜索