python 图像去重(imagededup) 比较图片相似度
开源地址:
https://github.com/idealo/imagededup
安装库
pip install imagededup
示例代码
from imagededup.methods import PHash phasher = PHash() # 生成图像目录中所有图像的二值hash编码 encodings = phasher.encode_images(image_dir='/tmp/close_eyes_jt/jingtiao_eyes_img') # 图像路径 # 对已编码图像寻找重复图像 d_1 = phasher.find_duplicates(encoding_map=encodings) # 给定一幅图像,显示与其重复的图像 from imagededup.utils import plot_duplicates plot_duplicates(image_dir='path/to/image/directory', duplicate_map=d_1, filename='ukbench00120.jpg') repeat_img = [] # 重复图片列表 is_img = [] # 不重复图片列表 for k, v in d_1.items(): if not v: is_img.append(k) elif k not in repeat_img: is_img.append(k) repeat_img.extend(v) else: repeat_img.extend(v) print(len(is_img))
单张图片调用方法
from imagededup.methods import PHash def compare_image_similarity(photo_id, photo_path, encoding_map: dict): """ 比较图片相似度 :param photo_id: :param photo_path: :param encoding_map: 哈希值map 首次传空 {} :return: """ encoding = "" try: phasher = PHash() # 生成图像的二值hash编码 encoding = phasher.encode_image(photo_path) encoding_map[photo_id] = encoding # 满分10分 相似度小于5分的图片过滤 duplicates = phasher.find_duplicates(encoding_map=encoding_map, scores=True, max_distance_threshold=10) # 获取重复的图片 {'001.jpg': [('002.jpg', 0)],'003.jpg': []} duplicates_list = duplicates.get(photo_id) for duplicate_img_name_score in duplicates_list: image_name, score = duplicate_img_name_score[0], duplicate_img_name_score[1] if score < 5: encoding_map.pop(photo_id) return False, encoding return True, encoding except Exception as e: print(e) print(traceback.print_exc()) return True, encoding if __name__ == "__main__": # 单张循环比较图片相似度 compare_image_similarity("11111.jpg","/tmp/11111.jpg",{})
分类:
Python常用方法
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了