python手写lfw数据集转pair.txt形式_changxl.的博客-程序员ITS203

技术标签: python  

python手写lfw数据集转pair.txt形式

最近在搞facenet的人脸识别,用到了lfw数据集,发现没有个合适的将自己数据集转为lfw_pair.txt的代码,所以自己撸了一个。

数据集用的就是lfw,文件夹是名字,名字文件夹內放的就是人脸图像。没有其他文件所有没有做是否是图像的校验。

主要思路就是根据lfw的要求,匹配数据通过同一个人有多张人脸构造,不匹配数据通过不同文件夹的内容构造。

利用python的set数据结构去重特性,一直往里面加就行了,加到数量够了就break。

然后将两个set集合都转为list,根据顺序构造lfw_pair.txt,构造时参考了原来的排序方式,做了sorted。

欢迎批评指教哟

# -*- coding: utf-8 -*-
# @Time    : 2022/3/21 14:39
# @Author  : ChangXinliang
# @Software: PyCharm

import os.path
import random
import os


def create_matched_result(lfw_dir, all_number):
    matched_result = set()
    # 获取所有数据名字
    names = os.listdir(lfw_dir)
    while len(matched_result) < all_number:
        for name in names:
            length = len(os.listdir(os.path.join(lfw_dir, name)))
            if length <= 1:
                continue
            else:
                # 构造两个随机数
                number_1, number_2 = sorted(random.sample(range(1, length + 1), 2))
                s = name + '\t' + str(number_1) + '\t' + str(number_2)
                # 没有必要做判断,set会自行处理
                matched_result.add(s)
                if len(matched_result) == all_number:
                    break
    return list(matched_result)


def create_unmatched_result(lfw_dir, all_number):
    unmatched_result = set()
    names = os.listdir(lfw_dir)
    while len(unmatched_result) < all_number:
        # 随机取两个名字
        name1, name2 = sorted(random.sample(names, 2))
        numbers = []
        for name in [name1, name2]:
            images = os.listdir(os.path.join(lfw_dir, name))
            # 随机取人脸
            number = random.sample(range(1, len(images) + 1), 1)[0]
            numbers.append(number)
        # 没有必要做判断,set会自行处理
        s = name1 + '\t' + str(numbers[0]) + '\t' + name2 + '\t' + str(numbers[1])
        unmatched_result.add(s)
    return list(unmatched_result)


if __name__ == '__main__':
    # 图片数据文件夹
    lfw_dir = 'lfw'
    # 重复次数
    repeat_count = 10
    # 每次匹配数量
    pair_number = 300
    # 总数量
    all_number = repeat_count * pair_number
    # 构造同一张人脸的集合
    matched_result = create_matched_result(lfw_dir, all_number)
    # 构造不同人脸的集合
    unmatched_result = create_unmatched_result(lfw_dir, all_number)

    out_path = r'lfw_pair.txt'
    with open(out_path, 'w') as f:
        f.write('%d %d\n' % (repeat_count, pair_number))
        for i in range(repeat_count):
            for pair in sorted(matched_result[i * pair_number: (i + 1) * pair_number]):
                f.write(pair + '\n')
            for pair in sorted(unmatched_result[i * pair_number: (i + 1) * pair_number]):
                f.write(pair + '\n')
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/zhuangyuan7838/article/details/123641138

智能推荐

ffmpeg实战教程(十一)手把手教你实现直播功能,不依赖第三方SDK_小码哥_WS的博客-程序员ITS203

直播,2016最火的技术之一了,更多的关于直播的知识:http://blog.csdn.net/king1425/article/details/72489272 …这篇我们就不依赖任何集成好的SDK,自己搭建服务器,用ffmpeg+nginx实现手机直播功能先上图:推流的手机拉流的网页和VL播放器拉流的手机客户端对于nginx服务器的搭建之前有写过:ffmpeg实战教程(九)windows下ff

邻接表存储图的广度优先遍历(c语言)_此杭非彼航的博客-程序员ITS203_c语言邻接表广度优先遍历

邻接表存储图的广度优先遍历题目答案注意题目答案void BFS ( LGraph Graph, Vertex S, void (*Visit)(Vertex) ){ int queue[1000],f=0,r=0; queue[r++]=S; Visited[S]=1; Visit(S); PtrToAdjVNode temp; while(f!=r) { temp=Graph-&gt;G[queue[f++]].FirstEdge; while(temp) {

android java pipe_Mediapipe框架在Android上的使用_万能嬉皮士的博客-程序员ITS203

原文博客:Doi技术团队链接地址:https://blog.doiduoyi.com/authors/1584446358138初心:记录优秀的Doi技术团队学习经历本文链接:Mediapipe框架在Android上的使用MediaPipe是用于构建跨平台多模态应用ML管道的框架,其包括快速ML推理,经典计算机视觉和媒体内容处理(如视频解码)。下面是用于对象检测与追踪的MediaPipe示例图,它...

裸眼3D大屏首秀!变形金刚登陆成都太古里_美通社的博客-程序员ITS203

成都2021年8月15日 /美通社/ -- 孩之宝旗下品牌变形金刚(Transformers)于8月14日至20日在成都举办了特别活动,旨在让孩子和家庭在“变形”中体验无穷乐趣,探索无限可...

IOS Universal Link (通用链接)配置和使用_forzhouwei的博客-程序员ITS203_应用的universal link配置中不含互联信息 [errcode:1001:0]

Universal Link 是 iOS9 推出的一项功能,使你的应用(微信,微博等)可以通过传统的HTTPS链接来启动APP,而不是使用 scheme 的方式。 如何理解Universal Link(通用链接) Universal Link(通用链接):看起来就是一条普通的https链接,当然是我们在该链接域名根目录配置过的一个链接,也可以在该链接中放置对应的H5页面。当用户的点击该链接,只要手机中安装了支持该链接的APP就会直接进入到APP中。如果没有安装APP...

随便推点

JAVA程序员必看的15本书-JAVA自学书籍推荐 (转)_帥氣的胖紙鍋的博客-程序员ITS203

作为Java程序员来说,最痛苦的事情莫过于可以选择的范围太广,可以读的书太多,往往容易无所适从。我想就我自己读过的技术书籍中挑选出来一些,按照学习的先后顺序,推荐给大家,特别是那些想不断提高自己技术水平的Java程序员们。此外,大家可以加入457036818交流群,互相分享一下关于JAVA方面的知识。一、Java编程入门类  对于没有Java编程经验的程序员要入门,随便读什么入门书籍都一样

自定义Android Toast样式_源于未知的博客-程序员ITS203

第一步:新建自定义Toast的布局文件<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/toast_layout_root" android:layout_width="match_parent" android:layout_heig

c# winform 用鼠标画拉出来的虚线框,鼠标框选边框效果_lackboy的博客-程序员ITS203_c# winform 画框

using System;  using System.Collections.Generic;  using System.ComponentModel;  using System.Data;  using System.Drawing;  using System.Text;  using System.Windows.Forms;    namespace

grep匹配部分进行高亮显示_携手凡生的博客-程序员ITS203_grep高亮显示

问题:grep命令执行后匹配的结果不能高亮显示 解决方法: step1:vim ~/.bashrc //在文件里# User specific aliases and functions这部分下面添加如下语句alias grep='grep --color=auto'step2:source ~/.bashrcstep3:测试成功 至此,便成功配置完毕!

hud文字和地形_llw01的博客-程序员ITS203_hud文字

‍// HUD 与显示汉字#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include

Chrome小恐龙游戏前端修改代码【含原理和代码】_元小旦的博客-程序员ITS203_小游戏代码大全可复制免费

Chrome小恐龙前端修改代码分享Chrome小恐龙是什么?在Chrome(谷歌浏览器)断网之后访问在线页面,如a.com会出现以下界面,叫做Chrome小恐龙游戏.这是一个隐藏的彩蛋。除了断网以外,直接在Chrome里访问网站chrome://dino/也可以看到。这时按空格就可以开始游戏了。怎么控制游戏?按键中文名用途UpKey箭头上跳跃DownKe...