按照lfw pairs.txt的格式生成自己的pairs.txt

1、把自己的数据集按照官方命名格式修改

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
Created on Fri Oct 18 11:29:55 2019
change the name of the image
@author: cong
"""

import os 
#import re
imgs_path = '/home/cong/facenet/dataset/foda_imgs'
       
       
if os.path.isdir(imgs_path):
    for s in os.listdir(imgs_path):
        newdir=os.path.join(imgs_path,s)
        #print(newdir)
        filenames = os.listdir(newdir)
        filenames.sort()
        for name in filenames:
            newname = newdir.split('/')[-1]
            os.rename(newdir + '/' + name, os.path.join(newdir, newname + '_' + '%04d' % int(filenames.index(name)+1)) + '.png')
            #print(newname)

2、生成自己的pairs.txt。

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
Created on Fri Oct 18 13:38:56 2019

@author: cong
"""

import glob
import os.path
import numpy as np
import os
from itertools import combinations
# 图片数据文件夹
INPUT_DATA = '/home/cong/facenet/dataset/foda_imgs'


def create_image_lists():
    matched_result = set()
    k = 0
    # 获取当前目录下所有的子目录,这里x 是一个三元组(root,dirs,files),第一个元素表示INPUT_DATA当前目录,
    # 第二个元素表示当前目录下的所有子目录,第三个元素表示当前目录下的所有的文件
    sub_dirs = [x[0] for x in os.walk(INPUT_DATA)]
    
    for sub_dir in sub_dirs[1:]:
        # 获取当前目录下所有的有效图片文件
        extensions = 'png'
        # 把图片存放在file_list列表里
        file_list = []
        # os.path.basename(sub_dir)返回sub_sir最后的文件名
        file0_list = []
        dir_name = os.path.basename(sub_dir)
        file_glob = os.path.join(INPUT_DATA, dir_name, '*.' + extensions)
        # glob.glob(file_glob)获取指定目录下的所有图片,存放在file_list中
        file_list.extend(glob.glob(file_glob))
        file0_list.extend(glob.glob(file_glob))
        file0_list.sort()
        
        # 通过目录名获取类别的名称
        label_name = dir_name
        #print(label_name)
        length = len(file_list)
        d_com = []
        d = np.arange(length)
        for i,j in combinations(d, 2):
            d_com.append([i,j])
            base_name1 = file0_list.index(file_list[i])+1  # 获取文件的名称
            base_name2 = file0_list.index(file_list[j])+1
            s = label_name+'\t'+str(base_name1)+'\t'+str(base_name2)
            if s not in matched_result:
            # 将当前类别的数据放入结果字典
                matched_result.add(label_name +'\t'+ str(base_name1)+ '\t'+ str(base_name2))
        
        k = k + 1
        #print(len(matched_result))

    # 返回整理好的所有数据
    return matched_result, k


def create_pairs():
    unmatched_result = set()       # 不同类的匹配对
    k = 0
    sub_dirs = [x[0] for x in os.walk(INPUT_DATA)]
    # sub_dirs[0]表示当前文件夹本身的地址,不予考虑,只考虑他的子目录
    for sub_dir in sub_dirs[1:]:
        # 获取当前目录下所有的有效图片文件
        extensions = ['png']
        file_list = []
        # 把图片存放在file_list列表里

        dir_name = os.path.basename(sub_dir)
        for extension in extensions:
            file_glob = os.path.join(INPUT_DATA, dir_name, '*.'+extension)
            # glob.glob(file_glob)获取指定目录下的所有图片,存放在file_list中
            file_list.extend(glob.glob(file_glob))

    length_of_dir = len(sub_dirs)
    
    a = np.arange(1,length_of_dir)
    a_com = []
    for i,j in combinations(a, 2):
        #print(i,j)
        a_com.append([i,j])

        class1 = sub_dirs[i]
        class2 = sub_dirs[j]
       # print(class1,'\n',class2)
        
        class1_name = os.path.basename(class1)
        class2_name = os.path.basename(class2)
            # 获取当前目录下所有的有效图片文件
        extensions = 'png'
        file_list1 = []
        file_list11 = []
        file_list2 = []
        file_list22 = []
        # 把图片存放在file_list列表里
        file_glob1 = os.path.join(INPUT_DATA, class1_name, '*.' + extension)
        file_list1.extend(glob.glob(file_glob1))
        file_list11.extend(glob.glob(file_glob1))
        file_list11.sort()
        file_glob2 = os.path.join(INPUT_DATA, class2_name, '*.' + extension)
        file_list2.extend(glob.glob(file_glob2))
        file_list22.extend(glob.glob(file_glob2))

        file_list22.sort()
        len_of_file = len(file_list1)
        if file_list1 and file_list2:
            b = np.arange(len_of_file)
            b_com = []
            for m,n in combinations(b, 2):
                #print(m,n)
                b_com.append([m,n])
            
                base_name1 = file_list11.index(file_list1[m % len(file_list1)])+1  # 获取文件的名称
                
                base_name2 = file_list22.index(file_list2[n % len(file_list2)])+1
                # unmatched_result.add([class1_name, base_name1, class2_name, base_name2])
                s = class1_name+'\t'+str(base_name1)+'\t'+class2_name+'\t'+str(base_name2)
                if s not in unmatched_result:
                    unmatched_result.add(class1_name+'\t'+str(base_name1)+'\t'+ class2_name+'\t'+str(base_name2))
                k = k + 1
    return unmatched_result, k

result, k1 = create_image_lists()
print(len(result))
# print(result)

result_un, k2 = create_pairs()
print(len(result_un))
# print(result_un)

file = open('/home/cong/facenet/data/pairs_foda.txt', 'w')

result1 = list(result)
result2 = list(result_un)

file.write('10 300\n')

j = 0
for i in range(10):
    j = 0
    print("=============================================第" + str(i) + '次, 相同的')
    for pair in result1[i*200:i*200+200]:
        j = j + 1
        print(str(j) + ': ' + pair)
        file.write(pair + '\n')

    print("=============================================第" + str(i) + '次, 不同的')
    for pair in result2[i*200:i*200+200]:
        j = j + 1
        print(str(j) + ': ' + pair)
        file.write(pair + '\n')

 

  • 6
    点赞
  • 33
    收藏
    觉得还不错? 一键收藏
  • 10
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值