【图像】搜索相同,或者相似照片

目录

1. 查找完全相同的一对张照片

2. 查找相似照片,


1. 查找完全相同的一对张照片

利用MD5,变换找到两张一模一样的图片。

import cv2
import numpy as np
import osimport json
import os
from hashlib import md5def getmd5(image_path, md5_path):# 得到所有图片的路径,加到列表images中files = os.listdir(image_path)#files.pop(files.index('.DS_Store'))  # MACimages = [os.path.join(image_path, f) for f in files]# 计算每张图片的md5值,并将{md5值:图片路径}整合到字典image_md5中image_md5 = {}for n in range(len(images)):hash = md5()img = open(images[n], 'rb')hash.update(img.read())img.close()md5_value = hash.hexdigest()image_md5[md5_value] = images[n]with open(md5_path, "w", encoding='utf-8') as fr:json.dump(image_md5, fr, indent=2, sort_keys=True, ensure_ascii=False)def check(md5_val_path, md5_test_path, md5_repeat_path):# 两两比较测试和验证集md5值with open(md5_val_path, "rt", encoding="utf-8") as fr:md5_val = json.load(fr)with open(md5_test_path, "rt", encoding="utf-8") as fr:md5_test = json.load(fr)md5_repeat = {}for md5 in md5_test:if md5 in md5_val:print('[md5]{}    [val]{}    [test]{}'.format(md5, md5_val[md5], md5_test[md5]))md5_repeat[md5] = {'val': md5_val[md5], 'test': md5_test[md5]}with open(md5_repeat_path, "w", encoding='utf-8') as fr:json.dump(md5_repeat, fr, indent=2, sort_keys=True, ensure_ascii=False)print('------------------ Analysis ------------------')print('Test num {}    Val num {}    Repeat {}'.format(len(md5_val), len(md5_test), len(md5_repeat)))if __name__ == '__main__':image_val_path = r'H:\testImages\原始图片池'image_test_path = r'H:\testImages待查原始图片池'md5_val_path = 'H:/testImages/md5_val.json'md5_test_path = 'H:/testImages/md5_test.json'md5_repeat_path = 'H:/testImages/md5_repeat.json'getmd5(image_val_path, md5_val_path)getmd5(image_test_path, md5_test_path)check(md5_val_path, md5_test_path, md5_repeat_path)

2. 查找相似照片

比如,同一张照片,被压缩了或者手机翻拍的两张相同内容的图片进行辨识。比如,JPG压缩位PNG。避免了MD5的要求完全一致的雪崩效应,增强鲁棒性。

   主要综合四种指标:

        1. 感知哈希(P Hashing 余弦),

        2. 平局散列,

        3. 梯度散列,

        4. 离散小波变换


import os,imagehash
from PIL import Imagedef hash(SourcePath,Test):highfreq_factor = 4 # resize的尺度hash_size = 32 # 最终返回hash数值长度image_scale = 64img_size = hash_size * highfreq_factorlist_file = []list_phash = []list_ahash = []list_dhash = []list_whash = []for file in os.listdir(SourcePath):if os.path.splitext(file)[1] == '.png':path_file = os.path.join(SourcePath, file)  # 拼路径list_file.append(file)phash = imagehash.phash(Image.open(path_file),hash_size=hash_size,highfreq_factor=highfreq_factor)#感知哈希(perception hashing)ahash = imagehash.average_hash(Image.open(path_file),hash_size=hash_size)#平均散列(average hashing)dhash = imagehash.dhash(Image.open(path_file),hash_size=hash_size)#梯度散列(difference hashing)whash = imagehash.whash(Image.open(path_file),image_scale=image_scale,hash_size=hash_size,mode = 'db4')#离散小波变换(wavelet hashing)list_phash.append(phash)list_ahash.append(ahash)list_dhash.append(dhash)list_whash.append(whash)list_fileTest = []list_phashTest = []list_ahashTest = []list_dhashTest = []list_whashTest = []for file in os.listdir(Test):if os.path.splitext(file)[1] == '.jpg':path_file = os.path.join(Test, file)  # 拼路径list_fileTest.append(file)phash = imagehash.phash(Image.open(path_file), hash_size=hash_size,highfreq_factor=highfreq_factor)  # 感知哈希(perception hashing)ahash = imagehash.average_hash(Image.open(path_file), hash_size=hash_size)  # 平均散列(average hashing)dhash = imagehash.dhash(Image.open(path_file), hash_size=hash_size)  # 梯度散列(difference hashing)whash = imagehash.whash(Image.open(path_file), image_scale=image_scale, hash_size=hash_size,mode='db4')  # 离散小波变换(wavelet hashing)list_phashTest.append(phash)list_ahashTest.append(ahash)list_dhashTest.append(dhash)list_whashTest.append(whash)#print(list_hash)for i in range(len(list_fileTest)):for j in range(len(list_file)):phash_value = 1-(list_phashTest[i]-list_phash[j])/len(list_phashTest[i].hash)**2ahash_value = 1-(list_ahashTest[i]-list_ahash[j])/len(list_ahashTest[i].hash)**2dhash_value = 1-(list_dhashTest[i]-list_dhash[j])/len(list_dhashTest[i].hash)**2whash_value = 1-(list_whashTest[i]-list_whash[j])/len(list_whashTest[i].hash)**2value_hash = max(phash_value,ahash_value,dhash_value,whash_value)if(value_hash > 0.97):#阈值设为0.9size_i = os.path.getsize(Test + '\\' + list_fileTest[i])size_j = os.path.getsize(SourcePath + '\\' + list_file[j])#print(list_fileTest[i],str(size_i/1024)+'KB')print(list_file[j],str(size_j/1024)+'KB')#print(value_hash)print('***********************')if __name__ == '__main__':imagesPath1 = r'H:\testImages\原始照片池'imagesPath2 = r'H:\testImages\对照照片池'hash(imagesPath1 ,imagesPath1 )

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/48479.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

go 图片相似 查找两张图片不同的部分 找出两幅图片中的不同处

golang Image similarity comparison 目前网上找了很多的 图片相似 查找两张图片不同的部分,实现图像比较和标记以显示不同 ,很多都是python写的,没有找到go语言写的,所以想自己写一个 图片A 为参照物,去寻找图片B 的…

元宇宙是个什么样的概念?

什么是元宇宙? 百度百科上提到: 元宇宙(Metaverse),是人类运用数字技术构建的,由现实世界映射或超越现实世界,可与现实世界交互的虚拟世界,具备新型社会体系的数字生活空间。 元宇…

最全元宇宙概念分析!元宇宙为何发展于区块链?

元宇宙,Web3 时代最新热词,和 NFT、DAO 等新晋热门概念一起在 2021 年横空出世。这一概念最早诞生于 1992 年的科幻小说《雪崩》,小说中描绘了一个庞大的虚拟现实世界,人们用数字化身来控制,并相互竞争以提高自己的地位…

chatgpt赋能python:Python期末考:如何顺利通过?

Python期末考:如何顺利通过? Python是一门广受欢迎的编程语言,无论是初学者还是有经验的工程师,都会在其职业生涯中使用Python。在学术领域,Python也被广泛应用于数据分析、人工智能和机器学习等方面。但是&#xff0…

【电商系列】shopee的数据获取

在Amazon,Aliexpress之后,又一个海外电商出现在我的视野里——shopee,在东南亚很火的电商平台。 这战略布局都到南美跟欧洲了 这网站有意思的是啊,每个国家的商品虽然大同小异,但是也能凸显各个国家的风格的&#xff0…

分享4点选品思路,电商大牛都在用

Tiktok选品数据分析是很多跨境电商商家都需要解决的首要问题。如何选品才能提高TikTok变现率?商家选品时需要结合实际数据进行分析,不能一概而论。本文将和大家谈论三个问题。 选品思路 选品方法 选品数据哪里找? 一、选品思路 选品是tiktok小…

电商平台OnBuy选品技巧分享一二

OnBuy是这两年发展较快的蓝海电商平台,是跨境电商人可以选择的一个优质电商平台。今天我们小编就给大家分享一下OnBuy选品技巧以及方法,希望对大家有用。 OnBuy热销类目 1、 健康(防护用品) 2、 美妆护肤 3、 多媒体 4、 玩具 5、 宠物 6、 婴儿用品 …

利用Tushare获取A股所有股票代码

Tusahre注册链接 https://tushare.pro/register?reg365850 import os import tushare as ts import pandas import datetimetoken 自己的 #可以登录文章首的链接注册获取 pro ts.pro_api(token) dateToday datetime.datetime.today().strftime(%Y%m%d)def GetList():try:d…

chatgpt赋能python:Python语言中的语句输入方法

Python语言中的语句输入方法 作为一门广泛应用于科学计算和计算机编程领域的编程语言,Python以其易读易写、简洁明了的语法特点,广受程序员和科学家的喜爱。本文将重点介绍Python中的语句输入方法,包括基本输入方法、文件读取、网络输入和交…

10款爆火且实用的AIGC工具大盘点

大家好。我是不知名设计师 l1m0_,今天分享内容为:10款爆火且实用的AIGC工具。文中我会跟大家针对10款不同功能优势的AI工具向各位朋友进行介绍,对AI创作感兴趣的朋友一定不能错过,一起来看看吧。 人工智能(AI&#xff…

欧洲希望WhatsApp和苹果的iMessage能够开放并共同努力

欧洲将很快迫使苹果、Facebook的Meta和谷歌等消息"守门人",以确保在用户需要时,消息可以与小公司合作。 欧盟一夜之间通过其新的《数字市场法》(DMA)使自己成为世界上最严格的美国科技公司监管机构,欧洲政界…

android message to iphone,这款应用可以将苹果的iMessage带到安卓系统

多年来,我们看到一些开发人员尝试使用各种各样的变通方法给Android设备带来iMessage。今天,另一个尝试将iMessage带到Android的方法已经出现。 weMessage是一款新的Android应用程序,它声称通过使用Mac作为iPhone和Android手机之间的中介&…

苹果的Apple GPT要来了?

据外媒消息,苹果正在内部开发类 ChatGPT 的产品,与微软、OpenAI、谷歌、Meta 等科技巨头在生成式 AI 赛道展开竞争。该消息使得苹果股价上涨了 2%。据苹果工程师透露,苹果在内部构建了代号为“Ajax”的大语言模型开发框架,并构建了…

InstructGPT方法简读

InstructGPT方法简读 引言 仅仅通过增大模型规模和数据规模来训练更大的模型并不能使得大模型更好地理解用户意图。由于数据的噪声极大,并且现在的大多数大型语言模型均为基于深度学习的“黑箱模型”,几乎不具有可解释性和可控性,因此&…

歌评-《Rex Incognito 尘世闲游》-陈致逸

时隔一周时间了,终于又找到了时间来更新我的歌评内容。 虽然身被学校关了起来,但是心里还是在歌曲的梦幻世界中畅游hhh。 今天我们来听的歌曲也是 The Stellar Moments 闪耀的群星OST专辑中的一首,代表了璃月城岩王帝君钟离的一首歌曲《尘世闲…

chatgpt赋能python:Python拍照——提高摄影效果的利器

Python拍照——提高摄影效果的利器 在现代社会中,摄影这门艺术已经成为了大众喜爱的一种娱乐和创造的活动。随着技术的不断进步,拍照的方式也不断地发生着变化。而Python编程语言正是一种帮助我们提高摄影效果的利器。下面就让我们来看看,Py…

GPT-4突然降智,爆料OpenAI重新设计构架,用MOE降本增效,官方辟谣网友却不买账...

编辑:润 Lumnia 【导读】最近众多网友反应GPT-4不好用了,后悔充值了。后来网友爆出OpenAI采用MOE重新设计了构架,导致性能收到影响,但是官方一直没有明确答复。 最近一段时间,很多OpenAI的用户反应,GPT-4变…

chatgpt赋能python:Python怎么装Matplotlib

Python怎么装Matplotlib Matplotlib是针对Python语言的绘图库,用于绘制二维图形和三维图形。这个库提供了多种不同的绘图选项,允许用户自由绘制不同类型的图表。Matplotlib是Python科学计算生态系统中最常用的绘图工具之一。 为什么要使用Matplotlib&a…

chatgpt赋能Python-python模块查看

介绍 Python 是一门非常流行且受欢迎的编程语言,它有许多优秀的特性和功能,使其得到了众多开发人员和企业的认可。其中,Python 的模块是一个非常重要的概念,它们允许我们组织和扩展我们的代码库,并在多个项目中重复使…

chatgpt赋能python:Python为坐标轴命名——让图表更加清晰易懂

Python 为坐标轴命名——让图表更加清晰易懂 在数据可视化中,为坐标轴命名是非常重要的。这不仅可以帮助您向读者传达信息,还可以让图表更加清晰易懂。Python 已成为数据科学领域最受欢迎的编程语言之一,并且其绘图库提供了灵活的选项来为坐…