當我們寫人臉模型的訓練程序的時候,我們需要讀取人臉和人臉對應的標籤。直接在數據庫中讀取顯然是低效的。所以我們用csv文件讀取。csv文件中包含兩方面的內容,一是每一張圖片的位置所在,二是每一個人臉對應的標籤,就是爲每一個人編號。這個at.txt就是我們需要的csv文件。
我的數據集在"E:/WXE/yan_yi/gender/gender/gender_img"文件夾下面,我就用下面兩行命令:
cd E:\WXE\yan_yi\gender\gender\gender_img
dir b/s *.png *.jpg >at.txt
數據集文件夾下面就多出了一個at.txt文件,但是現在是隻有路徑沒有標籤的。
接下來添加標籤
import sys
import os.path# This is a tiny script to help you creating a CSV file from a face
# database with a similar hierarchie:
#
# philipp@mango:~/facerec/data/at$ tree
# .
# |-- README
# |-- s1
# | |-- 1.pgm
# | |-- ...
# | |-- 10.pgm
# |-- s2
# | |-- 1.pgm
# | |-- ...
# | |-- 10.pgm
# ...
# |-- s40
# | |-- 1.pgm
# | |-- ...
# | |-- 10.pgm
#
if __name__ == "__main__":
# if len(sys.argv) != 3:
# print "usage: create_csv <base_path> <SAVE_FILE_NAME>"
# sys.exit(1)
#Sys.argv[]是用來獲取命令行參數的,sys.argv[0]表示代碼本身文件路徑,所以參數從1開始
#指明被遍歷的文件夾
#BASE_PATH=sys.argv[1]
BASE_PATH = "E:/WXE/yan_yi/gender/gender/gender_img"#數據集的目錄
#FILE_NAME = sys.argv[2]
SEPARATOR=";"
fh = open("E:/WXE/yan_yi/gender/gender/at.txt",'w')#寫入的文本文件
label = 0
#os.walk()可以得到一個三元tupple(dirpath, dirnames, filenames)
#其中第一個爲起始路徑
#第二個爲起始路徑下的文件夾,第三個是起始路徑下的文件。
#三個參數:分別返回1.父目錄 2.所有文件夾名字(不含路徑) 3.所有文件名字
#os.listdir()函數獲得指定目錄中的內容
label = 0
for dirname, dirnames, filenames in os.walk(BASE_PATH):
for subdirname in dirnames:
subject_path = os.path.join(dirname, subdirname)#"E:/WXE/yan_yi/gender/gender/gender_img/female(或者male)"
for filename in os.listdir(subject_path):
abs_path = "%s/%s" % (subject_path, filename)
print "%s%s%d" % (abs_path, SEPARATOR, label)
fh.write(abs_path)
fh.write(SEPARATOR)
fh.write(str(label))
fh.write("\n")
label = label + 1#另一個子文件的標籤
fh.close()