glob库的要点
glob库主要是方便查找搜索文件而生的,os库主要用来实现文件的基础操作,shutil主要用来实现文件的复制移动操作。
1. 3个通配符
*
: 匹配0个或多个字符
**
: 匹配所有文件,目录,子目录和子目录里的文件,常搭配recursive=True使用如glob.glob(“**/*.txt”,recursive=True)返回的就是递归搜索当前目录下的所有的txt文件
?
: 匹配一个字符;
[]
:匹配指定范围内的字符,如[0-9]匹配数字,[a-z]匹配小写字母
2. 3个函数
glob.glob()
:返回符合匹配条件的所有文件的路径listglob.iglob()
: i指的是iterator,返回一个迭代器对象,对于大型目录,一次性获取所有匹配的文件列表可能会占用大量内存。在这种情况下,可以使用iglob()函数来进行迭代获取glob.escape()
:escape可以忽略所有特殊字符-----星号,问号,中括号,用处不大
应用: 在上节YOLO制作数据集时,使用glob进行搜索所有的.mp4文件和.json文件,然后通过sort进行升序排序,通过排序然后结合zip()方法可以轻松将mp4和anno对应起来。
train_annos = glob.glob('训练集(有标注第一批)/标注/*.json') #返回所的标注文件路径的list
train_videos = glob.glob('训练集(有标注第一批)/视频/*.mp4') #返回所有的视频路径的list
train_annos.sort(); train_videos.sort()
category_labels = ["非机动车违停", "机动车违停", "垃圾桶满溢", "违法经营"]
for anno_path, video_path in zip(train_annos[:5], train_videos[:5]):
#TODO:保存帧以及对应的标注
Warning库学习
忽略所欲ignore类型的警告信息。
import warnings
warnings.filterwarnings('ignore')
数据类型转换
1. json转pandas的DataFrame
如下,json->
dataFrame
anno_df = pd.read_json(anno_path)
2. torch的tensor转为numpy的Ndarray类型
通过.cpu.numpy()将tensor转为Ndarray类型
xyxy = boxes.xyxy.data.cpu().numpy().round()
cls = boxes.cls.data.cpu().numpy().round()
conf = boxes.conf.data.cpu().numpy()
xyxy = boxes.xyxy.data.cpu().numpy().round()
cls = boxes.cls.data.cpu().numpy().round()
conf = boxes.conf.data.cpu().numpy()