针对视觉任务中的数据准备进行记录:
1.从视频中获取图片数据
-
首先从视频中剪辑出指定长度(2-3s)的有效片段,直接使用剪辑工具即可(推荐 快剪辑)
-
将视频片段拆分成帧图片。
-
首先右键查看视频片段的
属性
,然后转详细信息
查看帧速率
,此速率即为后期生成图片的一个重要参数。 -
可使用工具
ffmpeg
来生成图片,也可直接写脚本程序完成此项工作。这里记录下使用ffmpeg
的操作过程:安装及环境配置,详见:https://blog.csdn.net/weixin_33895016/article/details/93944142
使用:进入视频文件所在目录,
shift + 右键
在此处打开Powershell
,输入命令:ffmpeg -i "video.mp4" -r 1 -q:v 2 -f image2 vid_%d.jpg # ffmpeg -i 视频 -r 每秒帧数 -q:v 图片质量参数 -f 图片命名格式
-
-
[可选] 文件重新命名。需要将上面生成的文件名更改成
000x.jpg, 00xx.jpg, 0xxx.jpg
的形式,可以使用以下脚本:def rename(file_path): """ 将给定目录下的图像文件重新命名(0000.jpg 格式) :param file_path: :return: """ # 首先得到所有的图片(list) images = [] # key=lambda x: int(x[:-4]) : 倒着数第四位'.'为分界线,按照'.'左边的数字从小到大排序(注意这里的逻辑是根据上面第2步的命名 vid_%d.jpg 来写的) for f in sorted(os.listdir(os.path.join(file_path)), key=lambda x: int(x[4:-4])): # 获取的列表是乱序的,记得排一下序 sub_path = os.path.join(file_path, f) if os.path.isfile(sub_path): images.append(sub_path) print(images) # 重新命名 count = 0 for img in images: if count < 10: os.rename(img, os.path.join(file_path, '000' + str(count) + ".jpg")) elif count < 100: os.rename(img, os.path.join(file_path, '00' + str(count) + ".jpg")) elif count < 1000: os.rename(img, os.path.join(file_path, '0' + str(count) + ".jpg")) count += 1 print("rename completed!")
2.直接获取图片数据
这没什么好说的。
3.图片标注
这里主要记录了 windows
下目标检测数据的标注,标注格式为 Pascal VOC
格式。其余系统同理。
-
首先要选定一款数据标注工具,推荐
labelme
。不推荐网上的命令行式安装,可以去这里下载[提取码:ldxp],解压后会有一个data
文件夹和一个labeme.exe
程序。[可选]
data
文件夹中有一个txt
文件,其中用来配置标注的对象的类别,之后便可在标注时弹出类别选项而无需手动输入。比如有a,b,c,d,e
5类,txt
文件如下:
-
标注时直接打开
labelme.exe
即可。点击左侧边栏open Dir
打开数据所在的文件来导入图片数据,点击Create RectBox
或使用快捷键w
来新建标注框,完了ctrl+s
保存成xml
文件。
参考:https://blog.csdn.net/weixin_33895016/article/details/93944142