BITVehicle_Dataset解析

[]BIT车辆数据集

数据集描述:

BIT车辆数据集包含9850个车辆图像。数据集中有两台相机在不同时间和地点拍摄的尺寸分别为1600*1200和1920*1080的图像。这些图像包含照明条件、比例、车辆表面颜色和视点的变化。由于拍摄的原因,一些车辆的顶部或底部未包含在图像中

延迟和车辆的尺寸。一个图像中可能有一辆或两辆车,因此每个车的位置都会预先注释。该数据集还可用于评估车辆检测的性能。数据集中的所有车辆都分为六类:公共汽车、微型公共汽车、小型货车、轿车、SUV和卡车。每种车型的车辆数量分别为558辆、883辆、476辆、5922辆、1392辆和822辆。

注释信息描述:

matlab可以打开名为“VehicleInfo.mat”的文件,其中包含注释信息。在“VehicleInfo.mat”中有一个名为“VehiclInfo”的结构数组。“Vehicle Info”的大小为10400*1,每个元素描述一个图像。结构体的字段如下所示。

name:图像的文件名。

height:图像的高度。

width:图像的宽度。

车辆:图像中的车辆数量。

vehicles:此字段是一个结构数组,大小为1*vehicles,每个元素描述一个车辆。每个元素包含五个文件:left、top、right、bottom和category。前四个文件表示车辆在图像中的位置,字段“类别”表示车辆的类型。

但是由于数据集描述是mat格式,需要转换成xml才可以用于目标检测使用,改数据集的类别如下[‘Bus’, ‘Truck’, ‘SUV’, ‘Microbus’, ‘Sedan’, ‘Minivan']

在matlab中运行,有点复杂

data=load('./BITVehicle_Dataset/VehicleInfo.mat')
cars=data.VehicleInfo;
for n=1:length(cars)
    n;
    car=cars(n);
    %%
    %每一辆车新建一个xml文件存储车的信息
    carName=car.name;
    %图片的高度
    carHeight=car.height;
    %图片的宽度
    carWidth=car.width;
    %新建xml文件
    annotation = com.mathworks.xml.XMLUtils.createDocument('annotation');
    annotationRoot = annotation.getDocumentElement;  
    %定义子节点,xml的存储路径
    folder=annotation.createElement('folder');
    folder.appendChild(annotation.createTextNode(sprintf('%s','H:\车辆目标检测项目\数据集\BITVehicle_xml')));%这里为xml存放的目录
    annotationRoot.appendChild(folder);
    %图片的名称,不包含后缀名
    jpgName=annotation.createElement('filename');
    jpgName.appendChild(annotation.createTextNode(sprintf('%s',carName(1:end-4))));
    annotationRoot.appendChild(jpgName);
    %source就不添加了
    %添加图片的size
    jpgSize=annotation.createElement('size');
    annotationRoot.appendChild(jpgSize);
    %定义size的子节点
        %图片宽度
        width=annotation.createElement('width');
        width.appendChild(annotation.createTextNode(sprintf('%i',carWidth)));
        jpgSize.appendChild(width);
        
        %图片高度
        height=annotation.createElement('height');
        height.appendChild(annotation.createTextNode(sprintf('%i',carHeight)));
        jpgSize.appendChild(height);
        
        %图片深度,彩色图片3
        depth=annotation.createElement('depth');
        depth.appendChild(annotation.createTextNode(sprintf('%i',3)));
        jpgSize.appendChild(depth);
        
        segmented=annotation.createElement('segmented');
        segmented.appendChild(annotation.createTextNode(sprintf('%i',0)));%表示已经标注过了
        annotationRoot.appendChild(segmented);
        %接下来是每一辆车的标注信息
        
    %%
   
 
    carVehicles=car.vehicles;
    L=length(carVehicles);
    if L>1
        carName
        L
    end
    for nn=1:length(carVehicles)
        vehicle=carVehicles(nn);
        %标注框的最左侧坐标
        vLeft=vehicle.left;
        %标注框的最上边坐标
        vTop=vehicle.top;
        %标注框的最右侧坐标
        vRight=vehicle.right;
        %标注框最下面坐标
        vBottom=vehicle.bottom;
        %车的类别
        vCategory=vehicle.category;
        %图片中有多少个标注对象
        carNvehicles=car.nVehicles;
        %在这里生成每一符图片的txt文件,用于
        %%注意一张图片中可能会有多个对象
        %%matlab直接生成xml对象???
        %将这一辆车的信息注入xml中
        object=annotation.createElement('object');
        annotationRoot.appendChild(object);
        %标注框类别名称
        categoryName=annotation.createElement('name');
        categoryName.appendChild(annotation.createTextNode(sprintf('%s',vCategory)));
        object.appendChild(categoryName);
        
        pose=annotation.createElement('pose');
        pose.appendChild(annotation.createTextNode(sprintf('%s','Unspecified')));
        object.appendChild(pose);
        
        truncated=annotation.createElement('truncated');
        truncated.appendChild(annotation.createTextNode(sprintf('%i',0)));
        object.appendChild(truncated);
        
        Difficult=annotation.createElement('Difficult');
        Difficult.appendChild(annotation.createTextNode(sprintf('%i',0)));
        object.appendChild(Difficult);
        
        bndbox=annotation.createElement('bndbox');
        object.appendChild(bndbox);
        
        xmin=annotation.createElement('xmin');
        xmin.appendChild(annotation.createTextNode(sprintf('%i',vLeft)));
        bndbox.appendChild(xmin);
        
        ymin=annotation.createElement('ymin');
        ymin.appendChild(annotation.createTextNode(sprintf('%i',vTop)));
        bndbox.appendChild(ymin);
        
        xmax=annotation.createElement('xmax');
        xmax.appendChild(annotation.createTextNode(sprintf('%i',vRight)));
        bndbox.appendChild(xmax);
        
        ymax=annotation.createElement('ymax');
        ymax.appendChild(annotation.createTextNode(sprintf('%i',vBottom)));
        bndbox.appendChild(ymax);
        
    end
     %存储xml
    savePath=['H:\车辆目标检测项目\数据集\BITVehicle_xml\',carName(1:end-3),'xml'];
    xmlwrite(savePath,annotation);      
end

弄完之后就会生成xml格式的,在使用python解析即可

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

不是复数

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值