【Shell】从ILSVRC_DET数据集中单独拿出某一类图片和注释文件

#!/bin/sh
 
stage=val   #我把训练集和验证集分在不同文件夹下面了
classes=(person)
nums=(n00007846) #ILSVRC对应的编码
years=(2011 2012 2013)
root="/media/hans/000DABD1000BEFA8/ImageNet" #存放所有文件的第一层目录
i=0  #递归编码用
 
for class in ${classes[@]}; 
do
    all_path="$root/Home/${class}/all" 
    mkdir -p $all_path/Annotations/ #最后所有文件集中放在一起的目录
    mkdir -p $all_path/JPEGImages/
 
    num=${nums[$i]} #配合class,递归编码用,使它们保持指定同一类别
 
    for year in ${years[@]};
    do
        data_path="$root/ILSVRC$year/$stage" #指定原始数据位置
        year_path="$root/Home/${class}/${year}" #指定每一年数据位置
 
        name="${class}_${year}_name.txt" #每一年所有文件名目录,无后缀名
        path="${class}_${year}_path.txt" #绝对路径
 
 
        mkdir -p $year_path/Annotations/
        mkdir -p $year_path/JPEGImages/
 
        echo creat $path ...
        find $data_path/xml/ . -type f | xargs grep -l "<name>$num</name>" > $year_path/$path 
#在原始xml数据文件下递归搜索所有目录,寻找包含指定编码的文件,并把该文件绝对路径保存到path.txt文件中
 
        echo creat $name ...
        cd $year_path/
        cat $path | awk -F '/' '{print $NF}' > $name #把包含后缀名的文件名提取出来
        find -name $name | xargs perl -pi -e 's|.xml||g' #删掉后缀名
 
        echo creat temp.txt ...
        cat $name >> $all_path/temp.txt #把所有文件名不覆盖的保存到临时文档中
 
        # copy .xml ducoments
        echo copy ${class}_${year}.xml documents ...
        cat $path | xargs -i cp -r {} $year_path/Annotations/ 
#根据绝对路径复制原始数据到每一年目录中
 
        /bin/cp -rf $year_path/Annotations/*.xml $all_path/Annotations/ # cp without prompt 
#根据文件名搜索每一年指定.xml文件,整合所有年份数据到一个目录中,覆盖重复项
        #copy .JPEG images
        echo copy ${class}_${year}.JPEG images ...
        cat $name | xargs -i find $data_path/img/ . -name {}.JPEG | xargs -i cp {} $year_path/JPEGImages/ 
#根据文件名和指定的后缀名搜索原始数据,并保存到每一年的目录中
        /bin/cp -rf $year_path/JPEGImages/*.JPEG $all_path/JPEGImages/ 
#根据文件名和指定后缀名搜索每一年数据,整合所有年份数据到一个目录中,覆盖重复项
        echo 
    done
    echo create ${class}_all_name.txt ...
    cd $all_path/
    cat temp.txt |sort|uniq > ${class}_all_name.txt 
#将包含所有年份的数据名排序,删除重复文件名,保存到新文档中。
    echo delete temp.txt ...
    rm temp.txt
    let i+=1 #配合class,递归编码用,使它们保持指定同一类别    #i=$i+1
done
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值