運營的同事提了個需求:貨源審覈人員天天要審覈貨源的照片,查看一個照片,檢查其是不是之前貨源已經使用過的,這個工做機械、高度重複,但願能作個程序自動比對,把可能重複/類似的圖片找出來。html
對這個需求作了分析後,有一下結論:python
作這個程序不是要百分百找出重複圖片,只須要找出大部分可能重複圖片便可大幅度減小重複勞動。git
使用different hash算法,計算兩張圖片的hash距離,若是距離小於一個閾值,則認爲其類似度過高。github
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
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))
dhash的說明 https://github.com/Jetsetter/dhashhtm
一個有深度解決辦法 老司機帶你檢測類似圖片blog