1、遇到问题
人脸样本数据中图片本身没有该人脸对应人的名字,需要将名字添加到图片名字中,初始图片和文件名如图
2、解决思路
(1)需要将名字列表中的元素插入到对应角标的文件夹中下的每一个图片中,需要注意不能更改db文件的文件名。名字列表元素和人脸样本文件夹(部分)如下图
(2)首先将path变量赋为上图文件夹的父文件夹,dirlist = os.listdir(path),dirlist列表存储上图的文件夹;
(3)path1通过循环赋为path + os.sep + dirlist[i],即为上图中的文件夹;
(4)接下来判断path1是否为目录,如果是,执行value = os.listdir(path1),value存储上图文件夹(某一个)中的文件名;
(5)判断value中的文件名是否以tif结尾,如果是,执行rename操作
3、具体实施
(1)代码
import os
#导入path路径
path = 'D:/SoftwareCache/PyCharmCache/Project_Face/trainer/FERET_80_80/FERET_80_80-人脸数据库'
#获取该目录下所有低一级别子目录,存入列表中
dirlist = os.listdir(path)
#需要添加在图片名称中间的名字,存在一个列表里面
subname = ['Lesley','Elva','Gregary','Leonard','Franklin','Joanna','Kim','Roxanne','Berton','Simona','Afra','Dunn','Jesse','Janice','Egbert','Hulda','Betsy','Ansel','Judy','Adair','Channing','Leila','Rita','Edwiin','Samuel','Dana','Samantha','Page','Fitch','Verne','Adolph','Rebecca','Lindsay','Oliver','Claude','Theresa','Woodrow','Jo','Gene','Rock','Hiram','Modesty','Eric','Ada','Sherry','Mike','Janet','Francis','Blair','Vivien','Roberta','Odelia','Scott','Susie','Jenny','Mary','Ford','Juliet','Harriet','Lewis','Riva','Brandon','Ethel','Sid','Matt','Renee','Evelyn','Levi','Mick','Eartha','Veronica','Kent','Lucien','Marshall','Dinah','Frank','Ward','Allen','Quincy','Joy','Maxine','Chasel','Abbott','Mandel','Burton','Ula','Amy','Anastasia','Tyler','Rosalind','Dora','Ann','Donna','Merlin','Donald','Maggie','Antonia','Nicholas','Kerwin','Clarence','Charlotte','Aries','Sandra','Julius','Chester','Constance','Rae','Cornelius','Gordon','Cornelia','Shirley','Adonis','Zona','Donahue','Bonnie','Mignon','Glenn','Winni','Heloise','Theobald','Karen','Elma','Florence','Leona','Malcolm','Kama','Miles','Astrid','Mandy','Grover','Cheryl','Zenobia','Beatrice','Andrea','Abraham','Lee','William','Ron','Spencer','Octavia','Blithe','Ives','Evan','Frances','Buck','Lawrence','Angela','Omar','Jessica','Deborah','Eve','Katherine','Colbert','Humphrey','Phil','Phoebe','Celeste','Valentina','Wendy','Aaron','Horace','Deirdre','Alvis','Drew','Brook','Basil','Hubery','Penny','Stephanie','Eden','Diana','Valentine','Jill','Rachel','Roderick','Baldwin','Devin','Selena','Edmund','Benjamin','Nelson','Cornell','Bowen','Martina','Xaviera','Elijah','Jacqueline','Claire','Morton','Alexander','Orville','Griffith','Irma','Les','Norma','Daphne','Louise','Broderick','Lyndon','Patricia']
#i为外层文件夹计数
i = 0
for dir in dirlist:
#将path1设置为第一个人脸数据的文件夹
path1 = path + os.sep + dirlist[i]
#获取path1文件夹下的文件,存储在value列表中
if os.path.isdir(path1):
value = os.listdir(path1)
#n为同一文件夹下图片的计数
n = 0
for image in value:
#判断是否为图片,endswith()方法为检测文件后缀
if value[n].endswith('tif'):
#oldname为该图片的绝对路径
oldname = path1 + os.sep + value[n]
#newname为新图片的绝对路径
newname = path1 + os.sep + '0' + str(n+1) + '-' + subname[i] + '.tif'
#new——image的文件名,方便打印看程序执行进度
new_image = '0' + str(n+1) + '-' + subname[i] + '.tif'
#将文件重命名
os.rename(oldname, newname)
#打印看进度
print(dirlist[i] + '中:' + image, '----------->', new_image)
n += 1
i += 1
(2)执行结果(部分输出)
FERET-002-Elva中:01.tif -----------> 01-Elva.tif
FERET-002-Elva中:02.tif -----------> 02-Elva.tif
FERET-002-Elva中:03.tif -----------> 03-Elva.tif
FERET-002-Elva中:04.tif -----------> 04-Elva.tif
FERET-002-Elva中:05.tif -----------> 05-Elva.tif
FERET-002-Elva中:06.tif -----------> 06-Elva.tif
FERET-002-Elva中:07.tif -----------> 07-Elva.tif