python 计算 图片的dhash (different hash)

需求背景

运营的同事提了个需求:货源审核人员每天要审核货源的照片,查看一个照片,检查其是否是以前货源已经使用过的,这个工作机械、高度重复,希望能做个程序自动比对,把可能重复/相似的图片找出来。

需求分析

对这个需求做了分析后,有一下结论:

  1. 图片可能是完全一样的,只是格式不同,png,jpeg, gif几种格式
  2. 图片可能是相似的,只是经过了放缩、剪裁
  3. 图片可能是相似的,经过了简单的涂鸦
  4. 图片可能是相似/一样的,但是做了旋转

做这个程序不是要百分百找出重复图片,只需要找出大部分可能重复图片即可大幅度减少重复劳动。

解决办法

使用different hash算法,计算两张图片的hash距离,如果距离小于一个阈值,则认为其相似度太高。

安装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/"

执行安装:

python setup.py install

安装dhash

pip install dhash

使用PIL 计算dhash

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)

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))

转载于:https://my.oschina.net/ez8life/blog/1924986

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值