批量对比结果集

import os
import pickle

def compare_results_by_filename(file1, file2, threshold):
    # 加载两个pickle文件
    with open(file1, 'rb') as f:
        results1 = pickle.load(f)
    with open(file2, 'rb') as f:
        results2 = pickle.load(f)
    
    # 提取每个结果集中图片的基本名字
    filenames1 = {os.path.splitext(os.path.basename(path))[0]: counts for path, counts in results1.items()}
    filenames2 = {os.path.splitext(os.path.basename(path))[0]: counts for path, counts in results2.items()}

    # 创建一个空列表来存储差异大的图片名称
    significant_differences = []

    # 遍历第一个结果集中的所有图片名字
    for name, counts1 in filenames1.items():
        # 尝试从第二个结果集中找到相同名字的图片
        if name in filenames2:
            counts2 = filenames2[name]
            
            # 比较两张图片每个扇区的黑色像素数量
            comparison = [abs(c1 - c2) for c1, c2 in zip(counts1, counts2)]
            
            # 检查是否有扇区的差异超过阈值
            if any(d > threshold for d in comparison):
                significant_differences.append(name)
    
    return significant_differences

def batch_compare_directories(dir1, dir2, threshold):
    # 确保两个目录都存在
    assert os.path.exists(dir1), f"Directory {dir1} does not exist."
    assert os.path.exists(dir2), f"Directory {dir2} does not exist."

    # 获取两个目录中的所有文件名
    files1 = set([f for f in os.listdir(dir1) if f.endswith('.pickle')])
    files2 = set([f for f in os.listdir(dir2) if f.endswith('.pickle')])

    # 确保两个目录中都有pickle文件
    assert files1, f"No .pickle files found in {dir1}."
    assert files2, f"No .pickle files found in {dir2}."

    # 找出两个目录中都存在的pickle文件
    common_files = files1.intersection(files2)

    # 创建一个空字典来存储差异大的图像名称
    all_diff_images = {}

    # 对于每一对pickle文件,调用compare_results_by_filename函数
    for filename in common_files:
        file1 = os.path.join(dir1, filename)
        file2 = os.path.join(dir2, filename)
        
        # 调用函数比较两个结果文件
        diff_images = compare_results_by_filename(file1, file2, threshold)

        # 将差异大的图像名称添加到字典中,键为pickle文件名
        if diff_images:
            all_diff_images[filename] = diff_images
    
    return all_diff_images

# 设定差异阈值
threshold = 100

# 调用函数比较两个文件夹的结果
diff_images_dict = batch_compare_directories('FOLDER1', 'FOLDER2', threshold)

# 输出有显著差异的图片名称,按pickle文件分组
if diff_images_dict:
    print("Images with significant differences in black pixel counts, grouped by pickle file:")
    for pickle_file, images in diff_images_dict.items():
        print(f"\nIn pickle file '{pickle_file}':")
        for img in images:
            print(img)
else:
    print("No significant differences found.")
posted @   Ding-yixia  阅读(7)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具
点击右上角即可分享
微信分享提示