【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编译器就行
我的环境是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()
四,结果
可以在运行窗口看见生成成功
打开att.txt可以看见路径和标号已经读进去了
五,总结
csv文件中包含两方面的内容,一是每一张图片的位置所在,二是每一个人脸对应的标签,就是每一个人的编号。这个att.txt就是我们需要的csv文件。在写人脸模型的训练程序的时候,我们需要读取人脸和人脸对应的标签,而直接在数据库中读取显然是低效的,所以我们用csv文件读取。
下一篇 【Opencv综合应用】自制训练集的人脸识别3——用csv文件生成xml文件.