这个转换格式必须记下来。。。自己太傻了。。弄了一个星期都没弄出来。。。最后还是师姐的指点让我幡然醒悟

 

我的数据集是这样的:

也就是说二十个文件夹,每个文件夹一百张图片,编号都一致。。然后我想转换成txt列表文件。。不知道该怎么转。。我做过多种尝试

先是把二十个文件夹里的图片都重命名为以字母开头的名字。。。然后用这个代码循环或者一个一个来转换。。

 1 #!/usr/bin/env sh
 2 DATA=data/sa/Stimuli
 3 MY=examples/myfile/salicon
 4 
 5 echo "Create train.txt..."
 6 rm -rf $MY/train.txt
 7 find $DATA  -name $a*.jpg | cut -d '/' -f3-5 | sed "s/$/ $0/">>$MY/train.tx
 8 find $DATA  -name $b*.jpg | cut -d '/' -f3-5 | sed "s/$/ $1/">>$MY/tmp.txt  
 9 find $DATA  -name $c*.jpg | cut -d '/' -f3-5 | sed "s/$/ $2/">>$MY/tmp.txt
10 find $DATA  -name $d*.jpg | cut -d '/' -f3-5 | sed "s/$/ $3/">>$MY/tmp.txt
11 find $DATA  -name $e*.jpg | cut -d '/' -f3-5 | sed "s/$/ $4/">>$MY/tmp.txt 
12 find $DATA  -name $f*.jpg | cut -d '/' -f3-5 | sed "s/$/ $5/">>$MY/tmp.txt
13 find $DATA  -name $g*.jpg | cut -d '/' -f3-5 | sed "s/$/ $6/">>$MY/tmp.txt
14 find $DATA  -name $h*.jpg | cut -d '/' -f3-5 | sed "s/$/ $7/">>$MY/tmp.txt 
15 find $DATA  -name $i*.jpg | cut -d '/' -f3-5 | sed "s/$/ $8/">>$MY/tmp.txt 
16 find $DATA  -name $j*.jpg | cut -d '/' -f3-5 | sed "s/$/ $9/">>$MY/tmp.txt
17 find $DATA  -name $k*.jpg | cut -d '/' -f3-5 | sed "s/$/ $10/">>$MY/tmp.txt 
18 find $DATA  -name $l*.jpg | cut -d '/' -f3-5 | sed "s/$/ $11/">>$MY/tmp.txt 
19 find $DATA  -name $m*.jpg | cut -d '/' -f3-5 | sed "s/$/ $12/">>$MY/tmp.txt 
20 find $DATA  -name $n*.jpg | cut -d '/' -f3-5 | sed "s/$/ $13/">>$MY/tmp.txt  
21 find $DATA  -name $o*.jpg | cut -d '/' -f3-5 | sed "s/$/ $14/">>$MY/tmp.txt 
22 find $DATA  -name $p*.jpg | cut -d '/' -f3-5 | sed "s/$/ $15/">>$MY/tmp.txt 
23 find $DATA  -name $q*.jpg | cut -d '/' -f3-5 | sed "s/$/ $16/">>$MY/tmp.txt 
24 find $DATA  -name $r*.jpg | cut -d '/' -f3-5 | sed "s/$/ $17/">>$MY/tmp.txt 
25 find $DATA  -name $s*.jpg | cut -d '/' -f3-5 | sed "s/$/ $18/">>$MY/tmp.txt 
26 find $DATA  -name $t*.jpg | cut -d '/' -f3-5 | sed "s/$/ $19/">>$MY/tmp.txt    
27 cat $MY/tmp.txt>>$MY/train.txt
28 rm -rf $MY/tmp.txt  
29 echo "All done"

 

这是我仿照denny402的代码写的。。但是两种方法都一直行不通。。没办法按照数字递增的方法来给图片标签。。。

后来又想用python或者C++写。。没找到对应的例子

最后没办法去问师姐。。师姐说她也有这样的数据集,直接改文件夹的名字然后循环就好了,然后大概给我讲了一下代码的意思。。我五分钟就改好了。。心塞。。

 1 #!/usr/bin/env sh
 2 DATA=data/sa/Stimuli
 3 MY=examples/myfile/salicon
 4 
 5 echo "Create train.txt..."
 6 rm -rf $MY/train.txt
 7 for i in `seq 1 20`
 8 do
 9     find $DATA/train/s$i  -name *.jpg | cut -d '/' -f 5-8 | sed "s/$/ $(($i-1))/">>$MY/train.txt
10 done
11 echo "Create test.txt..."
12 rm -rf $MY/test.txt
13 for i in `seq 1 20`
14 do
15     find $DATA/test/s$i  -name *.jpg | cut -d '/' -f 5-8 | sed "s/$/ $(($i-1))/">>$MY/test.txt
16 done
17 echo "All done"

 

 find $DATA/train/s$i  -name *.jpg | cut -d '/' -f 5-8 | sed "s/$/ $(($i-1))/">>$MY/train.txt

这一行最重要,我把二十个文件夹命名为s1至s20,然后图片格式都是jpg,find以si开头的图片,然后sed后面是个变量自减的作用,就是文件夹s1里的所有图片的标签是1-1=0,依次类推,二十个文件夹里的图片都被依次标签为0-19.

 

cut -d 的用法可以网上查一下,截取字符,-f 5-8就是从data开始数,保留第五个到第八个字符。如下

 1 s1/a_98.jpg 0
 2 s1/a_51.jpg 0
 3 s1/a_38.jpg 0
 4 s1/a_34.jpg 0
 5 s1/a_43.jpg 0
 6 s1/a_62.jpg 0
 7 s1/a_41.jpg 0
 8 s1/a_11.jpg 0
 9 s1/a_27.jpg 0
10 s2/b_28.jpg 1
11 s2/b_86.jpg 1
12 s2/b_44.jpg 1
13 s2/b_93.jpg 1
14 s2/b_25.jpg 1
15 s2/b_19.jpg 1
16 s2/b_75.jpg 1
17 s2/b_64.jpg 1
18 s2/b_95.jpg 1

 

posted on 2017-04-10 16:41  EchoAmor  阅读(590)  评论(0)    收藏  举报