【Opencv综合应用】自制训练集的人脸识别2——制作csv文件

  • 一,准备工作
  • 环境
  • 二,主要步骤
  • 三,代码部分
  • 四,结果
  • 五,总结

一,准备工作

在上一篇【Opencv综合应用】自制训练集的人脸识别1——拍摄10张人脸图片中我们在s41文件中生成了自己的10张人脸灰度pgm图像,现在我们需要将s41文件夹移到ORL人脸库文件夹att中,里面已经包含了s1—s40的40组且每组10张的pgm格式人脸图像了,加入我们的图像后按照接下来的步骤生成csv文件,就能方便以后制作训练集xml文件了

ORL人脸库(Olivetti Research Laboratory人脸数据库)是由英国剑桥Olivetti实验室从1992年4月到1994年4月期间拍摄的一系列人脸图像组成,共有40个不同年龄、不同性别和不同种族的对象。每个人10幅图像共计400幅灰度图像组成,图像尺寸是92×112,图像背景为黑色。其中人脸部分表情和细节均有变化,例如笑与不笑、眼睛睁着或闭着,戴或不戴眼镜等,人脸姿态也有变化,其深度旋转和平面旋转可达20度,人脸尺寸也有最多10%的变化,是目前使用最广泛的标准人脸数据库。

之前由于我无论如何都登不上他们英国剑桥Olivetti实验室去下载人脸库,所以我这里直接把好不容易搞到的ORL人脸库放网盘了,有同样情况的直接用我的就行。
链接: https://pan.baidu.com/s/1WxTNsMZ1RXr7GnFbSNuWQw.
提取码:gom8

环境

由于这次要用到Python没有的tensorflow模块,没有的需要下载安装,比较麻烦,所以我推荐还没按Python的不要下Python,直接下载Anaconda(Anaconda是一个开源的Python发行版本,其中已经包含了conda、Python等180多个科学包及依赖项,同样也包含了tensorflow包,省去了以后安装很多包的麻烦),如果已经安装了Python的也可以下载Anaconda,到时候选择编译器时直接选择Anaconda中的Python.exe编译器就行

opencv电赛训练 opencv训练集_图像识别


我的环境是win10+Anaconda3 4.3(里面带着Python3.5)+Pycharm

二,主要步骤

1、载入对应的路径,取到包含着人脸库文件的路径就行,不然会报错(我这里文件结构是在可执行文件同目录下,有人脸识别att文件夹,里面包含了s1—s41组文件,每组文件里又包含10副pgm图,但我路径只取到att就行)
2、提取每一张图片对应的位置与同一个人脸对应的标签
3、写入存储文件夹att.txt

三,代码部分

"""------------------------------------------------------------------
利用pyhton生成csv文件
人脸模型训时需要读取人脸和人脸对应的标签,利用csv文件读取,以取代传统的
逐一读取方式,直接在数据库读取效率很低。在训练之前生成csv文件,主要步骤:
1、载入对应的路径,取到包含着人脸库文件的路径就行,不然会报错(我这里文件结构是在可执行文件同目录下,有人脸识别att文件夹,里面包含了s1—s41组文件,每组文件里又包含10副pgm图,但我路径只取到att就行
2、提取每一张图片对应的位置与同一个人脸对应的标签
3、写入存储文件夹data.txt
---------------------------------------------------------------------"""
import tensorflow as tf
import os.path
"""定义csv文件生成函数"""
def MakeLabel():
    global label
    face_path = "att"               # 人脸数据的路径   
    separator = ";"                 # 分隔符
    file = open("att.txt", 'w')     # 打开存储的文件
    """filenames对应att; dirnames对应s1; dirname对应1.pgm;故为att/s1/1.pgm"""
    for dirname, dirnames, filenames in os.walk(face_path):
        for targetname in dirnames:
            target_path = os.path.join(dirname, targetname)
            for filename in os.listdir(target_path):
                targetname2 = targetname[::-1]
                targetname3 = targetname2[:-1]
                targetname4 = targetname3[::-1]

                label = int(targetname4)            # 文件名字符串型转数字int型
                path = "%s/%s" % (target_path, filename)
                print("%s%s%d" % (path, separator, label))
                file.write(path)                    # 写入路径
                file.write(separator)               # 写入;号
                file.write(str(label))              # 写入标签
                file.write("\n")
            label = label + 1
    file.close()                      #关闭存储的文件

"""启动函数"""
def main(argv=None):
    MakeLabel()
if __name__ =='__main__':
    tf.app.run()

四,结果

opencv电赛训练 opencv训练集_python_02


可以在运行窗口看见生成成功

opencv电赛训练 opencv训练集_python_03


打开att.txt可以看见路径和标号已经读进去了

五,总结

csv文件中包含两方面的内容,一是每一张图片的位置所在,二是每一个人脸对应的标签,就是每一个人的编号。这个att.txt就是我们需要的csv文件。在写人脸模型的训练程序的时候,我们需要读取人脸和人脸对应的标签,而直接在数据库中读取显然是低效的,所以我们用csv文件读取。

下一篇 【Opencv综合应用】自制训练集的人脸识别3——用csv文件生成xml文件.