单目标检测数据集mat文件转化txt

  最近有个目标检测的项目,我来搞定数据集,需要把.mat文件转化为.xml文件,经过仔细的查阅自己完成了转化,下面是代码讲解:

# 导入包
import scipy.io as sio
import numpy as np
import os

def mat_txt(mat_file_path,save_txt_file_path):
    '''
    :param mat_file_path:保存mat文件的文件夹地址
    :param save_txt_file_path: 将生成的txt文件放到txt_file中,并把txt_file保存在这里
    :return: 无
    '''


    #读取mat文件格式
    mat_filename_list = os.listdir(mat_file_path)  #将文件夹中的文件名读出,作为列表
    # 确定你需要信息的值
    matdata = sio.loadmat(os.path.join(mat_file_path,mat_filename_list[0])) #读取mat文件
    print("mat文件中共有这些信息:",matdata.keys(),"请选择:")# 提取数据:是以字典的形式存储的,看有哪些key,确认自己需要哪部分信息
    key = str(input())
    your_key = matdata[key]   #将key提取出来
    print("你的信息是这样的:")
    print(your_key)


    if not os.path.exists(save_txt_file_path+"/txt_file"):  #创立一个txt_file文件夹
        os.makedirs(save_txt_file_path + "/txt_file")


    # 批量转化 mat 文件为 txt 文件并保存在桌面的 txt_file 文件夹中
    for mat_filename in mat_filename_list:
        matdata = sio.loadmat(os.path.join(mat_file_path, mat_filename))
        data1 = matdata[key]

        data2 = data1[0][0][1]  #注意data必须处理为二维数组

        for i in range(len(data2)):
            if (i%2)==1:
                data3 = np.hstack(([0] ,data2[i-1],data2[i])#此步骤是把(x1,y1)(x2,y2)合并为一个数组。这里就是最后要写入txt文件的.由于是单目标检测,所以图个方便,并没有考虑类别,直接把它定义为零,若是要是多目标检测 要修改这里
                data.append(data3)         #也就是每两个放在一起
                data.append(data3)
        txt_filename = mat_filename[: -4 ] + ".txt"  # 例如将“0001.mat” 改为 “0001.txt”
        savetxt_path = os.path.join(save_txt_file_path+ "/txt_file",txt_filename)#对保存路径进行设置
        np.savetxt(savetxt_path, data,)  # fmt为保存格式,可不填,会以默认格式保存
        print("finished:",os.path.join(mat_file_path, mat_filename))#完成文件

运行效果:

单目标检测数据集mat文件转化txt_第1张图片

输入annotation

我的.mat文件是这样的:

之后便自动完成

单目标检测数据集mat文件转化txt_第2张图片

完成检测!

生成的.txt文件是这样的

单目标检测数据集mat文件转化txt_第3张图片

第一列是标签,后面分别是(x1,y1),(y2,y2),一共五个数据。

本人很菜,只是作为记录,如有不标准,请多包涵!

你可能感兴趣的:(人工智能,python,目标检测)