1.C++的制作标签的工具:SetLab
/*
Author : honghuichao
Data : 2017-08-22
修改日志 : 空
功能 : 输入目录,为相应的目录做标签
例子 : 调用TraverseFiles函数,TraverseFiles("c:/", 1);
会在c:/目录生成 1.txt文件
1.txt的格式为:
文件路径1 1
文件路径2 1
文件路径3 1
....
文件路径n 1
*/
#include <iostream>
#include<fstream>
#include <string>
#include <io.h>
using namespace std;
//遍历当前目录下的文件夹和文件,默认是按字母顺序遍历
bool TraverseFiles(string path, char* lab, ofstream& out)
{
_finddata_t file_info;
string current_path = path + "/*.jpg"; //可以定义后面的后缀为*.exe,*.txt等来查找特定后缀的文件,*.*是通配符,匹配所有类型,路径连接符最好是左斜杠/,可跨平台
//打开文件查找句柄
int handle = _findfirst(current_path.c_str(), &file_info);
//返回值为-1则查找失败
if (-1 == handle)
return false;
do
{
//判断是否子目录
string attribute;
if (file_info.attrib == _A_SUBDIR) //是目录
attribute = "dir";
else
attribute = "file";
//输出文件信息并计数,文件名(带后缀)、文件最后修改时间、文件字节数(文件夹显示0)、文件是否目录
out << path << file_info.name << ' ' <<lab<< endl; //获得的最后修改时间是time_t格式的长整型,需要用其他方法转成正常时间显示
} while (!_findnext(handle, &file_info)); //返回0则遍历完
//关闭文件句柄
_findclose(handle);
return true;
}
int main(int argc, char *argv[])
{
ofstream out("train.txt");
ofstream out1("test.txt");
char* lab_0 = "0";
char* lab_1 = "1";
char* lab_2 = "2";
char* lab_3 = "3";
char* lab_4 = "4";
//char* lab_2 = "2";
TraverseFiles("C:/Users/Administrator/Desktop/re/train/0/", lab_0,out);
TraverseFiles("C:/Users/Administrator/Desktop/re/train/1/", lab_1,out);
TraverseFiles("C:/Users/Administrator/Desktop/re/train/2/", lab_2,out);
TraverseFiles("C:/Users/Administrator/Desktop/re/train/3/", lab_3,out);
TraverseFiles("C:/Users/Administrator/Desktop/re/train/4/", lab_4,out);
TraverseFiles("C:/Users/Administrator/Desktop/re/test/0/", lab_0, out1);
TraverseFiles("C:/Users/Administrator/Desktop/re/test/1/", lab_1, out1);
TraverseFiles("C:/Users/Administrator/Desktop/re/test/2/", lab_2, out1);
TraverseFiles("C:/Users/Administrator/Desktop/re/test/3/", lab_3, out1);
TraverseFiles("C:/Users/Administrator/Desktop/re/test/4/", lab_4, out1);
//TraverseFiles("C:/Users/Administrator/Desktop/基于卷积神经网络的煤矸石分选技术/MatlabCaffe/caffe/data/CharacterDiscrimination/test/煤矸石/", lab_1);
//TraverseFiles("C:/Users/Administrator/Desktop/基于卷积神经网络的煤矸石分选技术/MatlabCaffe/caffe/data/CharacterDiscrimination/val/煤/", lab_0);
//TraverseFiles("C:/Users/Administrator/Desktop/基于卷积神经网络的煤矸石分选技术/MatlabCaffe/caffe/data/CharacterDiscrimination/val/煤矸石/", lab_1);
system("pause");
return 0;
}
2.python制作标签的工具,要放在和图片的文件在同一级文件夹中:new_setlab.py
# coding: utf-8
'''''
Created on Jul 29, 2016
@author: sgg
'''
"<span style=""font-family:Arial;font-size:18px;"">"
"<span style=""font-size:18px;"">"
"<span style=""font-size:18px;"">"
import os
def IsSubString(SubStrList,Str):
flag=True
for substr in SubStrList:
if not(substr in Str):
flag=False
return flag
def GetFileList(FindPath,FlagStr=[]):
FileList=[]
FileNames=os.listdir(FindPath)
if len(FileNames)>0:
for fn in FileNames:
if len(FlagStr)>0:
if IsSubString(FlagStr,fn):
fullfilename=os.path.join(FindPath,fn)
FileList.append(fullfilename)
else:
fullfilename=os.path.join(FindPath,fn)
FileList.append(fullfilename)
if len(FileList)>0:
FileList.sort()
return FileList
train_txt=open('train.txt','w')
imgfile=GetFileList('train/traincar/')#将数据集放在与.py文件相同目录下
for img in imgfile:
str1=img+' '+'0'+'\n' #用空格代替转义字符 \t
train_txt.writelines(str1)
imgfile=GetFileList('train/traindinosaur/')
for img in imgfile:
str2=img+' '+'1'+'\n'
train_txt.writelines(str2)
imgfile=GetFileList('train/trainelephant/')
for img in imgfile:
str2=img+' '+'2'+'\n'
train_txt.writelines(str2)
imgfile=GetFileList('train/trainflower/')
for img in imgfile:
str2=img+' '+'3'+'\n'
train_txt.writelines(str2)
imgfile=GetFileList('train/trainhorse/')
for img in imgfile:
str2=img+' '+'4'+'\n'
train_txt.writelines(str2)
train_txt.close()
#测试集文件列表
test_txt=open('val.txt','w')
#制作标签数据,如果是男的,标签设置为0,如果是女的标签为1
imgfile=GetFileList('val/testcar/')#将数据集放在与.py文件相同目录下
for img in imgfile:
str3=img+' '+'0'+'\n'
test_txt.writelines(str3)
imgfile=GetFileList('val/testdinosaur/')
for img in imgfile:
str4=img+' '+'1'+'\n'
test_txt.writelines(str4)
imgfile=GetFileList('val/testelephant/')
for img in imgfile:
str4=img+' '+'2'+'\n'
test_txt.writelines(str4)
imgfile=GetFileList('val/testflower/')
for img in imgfile:
str4=img+' '+'3'+'\n'
test_txt.writelines(str4)
imgfile=GetFileList('val/testhorse/')
for img in imgfile:
str4=img+' '+'4'+'\n'
test_txt.writelines(str4)
test_txt.close()
print("成功生成文件列表")