import os
dict_str = { }
useless_img = [ ]
with open ( "./train.lst" , "r" , encoding= 'utf-8' ) as f:
for line in f:
line = line. rsplit( )
dict_str[ line[ 3 ] ] = line[ 1 : 3 ]
with open ( "train_yy.lst" , "w" , encoding= 'utf-8' ) as f:
for i, img in enumerate ( os. listdir( "./train" ) ) :
if img not in dict_str:
useless_img. append( line)
print ( "{}不在" img)
else :
age, gender = dict_str[ img] [ 0 ] , dict_str[ img] [ 1 ]
line_lable = str ( i) + '\t' + age + '\t' + gender + "\t" + img + '\n'
f. write( line_lable)
print ( "total number:{}" . format ( i+ 1 ) )
统一重命名两个文件夹对应的文件(不同文件夹名称相同)
import re, os
path_list, suffix , dict_lable= [ './yy' , './qq' ] , [ '.txt' , '.lst' ] , { }
dict_lable = { lable. replace( suffix[ 0 ] , '' ) : str ( i+ 1 ) for i, lable in enumerate ( os. listdir( path_list[ 0 ] ) ) }
lable_list, img_list = os. listdir( path_list[ 0 ] ) , os. listdir( path_list[ 1 ] )
assert len ( lable_list) == len ( img_list)
for label, img in zip ( lable_list, img_list) :
os. rename( os. path. join( path_list[ 0 ] , label) , os. path. join( path_list[ 0 ] , dict_lable[ label. replace( suffix[ 0 ] , '' ) ] + suffix[ 0 ] ) )
os. rename( os. path. join( path_list[ 1 ] , img) , os. path. join( path_list[ 1 ] , dict_lable[ img. replace( suffix[ 1 ] , '' ) ] + suffix[ 1 ] ) )
'''
MXNet lst rec idx 文件生成 [适合任意的标签数量,自定义生成最灵活合适]
1. lst文件自定义创建,格式: index label_1 label_n image_abs_path_name;
eg: 0 2 3 /mnt/data/my.jpg [label需要从0开始]
2. rec idx文件创建,使用 mxnet/tools/im2rec.py(自己去安装路径下复制出来) ,命令行执行 python im2rec.py lst_path image_data_root --pack-label
eg: python im2rec.py /mnt/data/train.lst /mnt/data/image --pack-label 生成train.rec train.idx; image_data_root所有图片放在一个文件夹
val.lst val.rec val.idx 同理;
'''
import numpy as np
import os
def create_lst_file ( img_root_path, lst_path_name, choice) :
'''
:param img_root_path:
:param lst_file_save_path:
:return: 只创建lst, 未区分train / val
'''
name_list = [ f for f in os. listdir( img_root_path) if f. endswith( 'jpg' ) ]
num = len ( name_list)
print ( num)
if choice == 1 :
with open ( lst_path_name[ 0 ] , 'w' ) as f:
for i, img_name in enumerate ( name_list) :
lis = img_name. split( '_' )
age, gender = lis[ 0 ] , lis[ 1 ]
f. write( str ( i) + '\t' +
str ( 1 - int ( gender) ) + '\t' + age + '\t' +
img_name + '\n' )
else :
np. random. shuffle( name_list)
with open ( lst_path_name[ 1 ] , 'w+' ) as f:
for i, img_name in enumerate ( name_list[ : int ( num * 0.8 ) ] ) :
lis = img_name. split( '_' )
age, gender = lis[ 0 ] , lis[ 1 ]
f. write( str ( i) + '\t' +
str ( 1 - int ( gender) ) + '\t' + age + '\t' +
img_name + '\n' )
with open ( lst_path_name[ 2 ] , 'w+' ) as f:
for i, img_name in enumerate ( name_list[ int ( num * 0.8 ) : ] ) :
lis = img_name. split( '_' )
age, gender = lis[ 0 ] , lis[ 1 ]
f. write( str ( i) + '\t' +
str ( 1 - int ( gender) ) + '\t' + age + '\t' +
img_name + '\n' )
if __name__ == "__main__" :
img_root_path = "./img_aligned"
lst_file_save_path = "./"
just_train, train_name, val_name = "train.lst" , "train.lst" , "val.lst"
choice = 1
list_path_name = [ lst_file_save_path + name for name in ( just_train, train_name, val_name) ]
create_lst_file( img_root_path, list_path_name, choice)