文档章节

python 计算 图片的dhash (different hash)

海鲜新零售
 海鲜新零售
发布于 2018/08/09 11:49
字数 527
阅读 213
收藏 2

需求背景

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

需求分析

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

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

© 著作权归作者所有

海鲜新零售
粉丝 2
博文 28
码字总数 45206
作品 0
大连
技术主管
私信 提问
老司机带你检测相似图片

欢迎大家前往腾讯云社区,获取更多腾讯海量技术实践干货哦~ 作者:雷经纬 导语: 本文从从图片的dhash,ahash,phash,颜色分布向量到基于语义的sift,surf,gist特征,构建一套分层相似图片检...

腾讯云社区
2017/11/27
0
0
PHP实现图像模糊查询差值哈希dhash算法(一)

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 https://blog.csdn.net/SuperRD/article/details/94746967 常用图片指纹计算方式python版:h...

Super_RD
07/05
0
0
PHP实现图像模糊查询差值哈希dhash算法(二)

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 https://blog.csdn.net/SuperRD/article/details/94747288 计算出图像指纹后通过计算汉明距离...

Super_RD
07/05
0
0
从手工提取特征到深度学习的三种图像检索方法

雷锋网(公众号:雷锋网) AI 科技评论按:本文为专栏作者兔子老大为 AI 科技评论撰写的独家稿件,未经许可不得转载。 前言 图片检索是计算机视觉,数字图像处理等领域常见的话题,在我学习相关...

AI科技评论
2018/07/16
0
0
介绍一个基于simhash作海量文章排重的库:simhashpy

简单介绍 simhash是一种能计算文档相似度的hash算法。通过simhash能将一篇文章映射成64bit,再比较两篇文章的64bit的海明距离,就能知道文章的相似程序。若两篇文章的海明距离<=3,可认为这两...

余争
2013/12/17
6.8K
14

没有更多内容

加载失败,请刷新页面

加载更多

【0911】linux软件包安装和卸载

【0911】linux软件包安装和卸载 一、安装软件包的三种方法 1、rpm工具:与win中的exe安装包类似,红帽子公司包管理系统 2、yum工具:属于一种用python开发的工具,支持自动的安装依赖的包 3、...

飞翔的竹蜻蜓
28分钟前
3
0
【外行学IT】手机网页自适应之rem和viewport

在写手机网页时,对于像素的问题会非常困惑,初学者很多时候会因为那么一个小点的问题解决不了,或者无法理解透彻就放弃了学习。 我在学习写手机网页时也困惑了许久,出现过下面的问题: 图片...

前端老手
39分钟前
5
0
三、Java设计模式之单一职责原则

定义:不要存在多于一个导致类变更的原因。 一个类、接口、方法只负责一项职责 优点:降低类的复杂度、提高类的可读性,提高系统的可维护性、降低变更引起的风险

东风破2019
46分钟前
4
0
搭建高可用MongoDB集群(分片)

搭建高可用MongoDB集群(分片) KaliArch关注1人评论28269人阅读2017-12-04 21:57:41 MongoDB基础请参考:https://blog.51cto.com/kaliarch/2044423 MongoDB(replica set)请参考:https:/...

linjin200
今天
6
0
Pandas DataFrame创建方法大全

Pandas是Python的数据分析利器,DataFrame是Pandas进行数据分析的基本结构,可以把DataFrame视为一个二维数据表,每一行都表示一个数据记录。本文将介绍创建Pandas DataFrame的6种方法。 创建...

汇智网教程
今天
6
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部