针对视频处理和数据集文件——在window上操作
一、视频的处理
1.1ffmpeg安装
ffmpeg的官网地址是:https://www.ffmpeg.org/
下载完成后解压,打开bin就会看到有三个程序。
1.1.1ffmpeg环境变量的配置
1.将下载的ffmpeg解压到指定的目录下,我解压在D盘目录下
2.右击此电脑——>属性——>高级系统设置——>环境变量。或者键盘按win键输入环境变量。在系统变量的path变量中添加ffmpeg解压的路径。
3.配置完成后运行win+r,输入cmd回车。输入ffmpeg。若显示如下图,则说明配置成功。
1.2视频准备
若我们下载的视频很长,而我们只需要几秒或者几分钟的视频的时候,我们则需要使用ffmpeg对视频进行剪辑。
例如,下面使用ffmpeg将一段长视频剪辑为0-4s视频的命令。
ffmpeg -ss 00:00:00.0 -to 00:00:4.0 -i "d:\Users\zlx\Desktop\train.mp4" "d:\Users\zlx\Desktop\1.mp4"
到这一步就算把需要使用的视频准备好了。接下来我们要对视频进行切割。在对视频进行切割前,我们需要先下载git软件。因为我们切割视频所使用的是.sh文件,在Ubuntu上我们可以直接用bash xxx.sh
就可以直接运行了,但是现在我们需要在window上实现,就需要借助git。
1.3git安装
大家可以参考这篇博客,写的很详细了Git 详细安装教程
1.4切割视频
用两种切割方式去切割视频,第一种是一秒一帧,第二种是一秒三十帧。
!!这个注意哦两个代码的路径他的斜杠和电脑属性直接复制的不一样,要记得改
第一种,一秒一帧
代码(cut_videos.sh)如下:
#切割图片,每秒1帧
IN_DATA_DIR="d:/Users/zlx/Desktop"
OUT_DATA_DIR="d:/Users/zlx/Desktop"
if [[ ! -d "${OUT_DATA_DIR}" ]]; then
echo "${OUT_DATA_DIR} doesn't exist. Creating it.";
mkdir -p ${OUT_DATA_DIR}
fi
for video in $(ls -A1 -U ${IN_DATA_DIR}/*)
do
video_name=${video##*/}
if [[ $video_name = *".webm" ]]; then
video_name=${video_name::-5}
else
video_name=${video_name::-4}
fi
out_video_dir=${OUT_DATA_DIR}/${video_name}/
mkdir -p "${out_video_dir}"
out_name="${out_video_dir}/${video_name}_%06d.jpg"
ffmpeg -i "${video}" -r 1 -q:v 1 "${out_name}"
done
第二种,一秒三十帧
代码(cut_videos_frames.sh)如下:
#切割图片,每秒30帧
IN_DATA_DIR="d:/Users/zlx/Desktop"
OUT_DATA_DIR="d:/Users/zlx/Desktop"
if [[ ! -d "${OUT_DATA_DIR}" ]]; then
echo "${OUT_DATA_DIR} doesn't exist. Creating it.";
mkdir -p ${OUT_DATA_DIR}
fi
for video in $(ls -A1 -U ${IN_DATA_DIR}/*)
do
video_name=${video##*/}
if [[ $video_name = *".webm" ]]; then
video_name=${video_name::-5}
else
video_name=${video_name::-4}
fi
out_video_dir=${OUT_DATA_DIR}/${video_name}/
mkdir -p "${out_video_dir}"
out_name="${out_video_dir}/${video_name}_%06d.jpg"
ffmpeg -i "${video}" -r 30 -q:v 1 "${out_name}"
done
在window里面如何创建.sh文件:
在桌面创建一个txt文档,然后将代码复制进去并保存。然后选中文档,按F2进行重命名(修改文件后缀名,将txt改成sh)。
如果电脑不显示后缀名的话,打开我的电脑——点击查看——在文件扩展名那边打勾。
1.5在window中运行sh文件,进行切割视频
将上面的步骤都完成后,在window上运行.sh文件需要用到git。
方法一:
1.打开git bash ,进入到你.sh所在的文件路径下。(也可以在该路径下输入git bash 回车也可以快速进入——进入后就是在这个路径下了)
2.输入sh cut_videos.sh
他就会将该路径下的所有视频进行切割。
二、数据集文件的处理
2.1labelimg安装
2.1.1下载与安装Anaconda3
anaconda官网点击下载,并安装。
anaconda安装完成之后记得切换国内的源来提高下载速度,命令如下(在cmd上运行):
conda config --remove-key channels
conda config --add channels https://mirrors.ustc.edu.cn/anaconda/pkgs/main/
conda config --add channels https://mirrors.ustc.edu.cn/anaconda/pkgs/free/
conda config --add channels https://mirrors.bfsu.edu.cn/anaconda/cloud/pytorch/
conda config --set show_channel_urls yes
pip config set global.index-url https://mirrors.ustc.edu.cn/pypi/web/simple
查看自己是否换源成功:
在自己C:\Users\zlx
用户路径下,会看到一个.condarc
,打开方式用记事本,就会看到
出现这个就算成功了。
然后创建并激活虚拟环境:
这里mmaction2,是我虚拟环境的名字,你们可以替换成自己想要的名字。
conda create -n mmaction2 python==3.8.5
conda activate mmaction2
2.1.2下载与安装labelimg
labelimg下载地址
点击Clone or download——选择Doenload ZIP,下载完成后解压。
安装依赖库:
分别需要安装lxml、PyQt5、PyQt5_tools:
pip install lxml
pip install PyQt5
pip install PyQt5_tools
如果遇到下载失败,可能是pip需要更新:
pip install --upgrade setuptools && python -m pip install --upgrade pip
运行:
在文件中labelimg.py
就是我们要执行的文件,它相当于主函数。
在图片标1的地方输入cmd,进入到命令窗口。就会发现这样进入命令窗口后的路径是该文件夹,如果是win+r,输入cmd的话,进入命令窗口的路径是C盘下的用户路径。
然后在labelimg文件夹路径下输入python labelimg.py
就可以运行该py文件。
回车后弹出以下界面,说明安装成功。
2.2labelimg使用
labelimg界面:
labelimg的快捷键如下:
按键 | 功能 |
---|---|
ctrl+Q | 退出软件 |
ctrl+O | openfile |
ctrl+U | openDir |
ctrl+R | ChangeSaveDir |
ctrl+S | 保存 |
ctrl+L | boxlineColor |
ctrl+J | move and edit Boxes |
ctrl+D | 复制框 |
ctrl+H | 隐藏所有的框 |
ctrl+A | 显示所有的框 |
ctrl+ + | 放大 |
ctrl+ - | 缩小 |
ctrl+ = | 原始大小 |
ctrl+F | fit window |
ctrl+E | 编辑标签 |
ctrl+shift+O | 打开的文件夹只显示.xml文件 |
ctrl+shift+S | |
ctrl+shift+F | fit Width |
d | 下一张图 |
a | 上一张图 |
space | 标记当前图片已标记 |
w | 创建一共矩形框 |
Delete | 删除 |
2.3描写数据集
2.3.1person_box
然后在保存标签的地址里就会看到1_000001.txt
,打开就能得到四个数据。这就是我们所需要的person_box
数据。
标记完后,如下图:
标记了多少张图就会有多少个文本,然后可以使用dos命令轻松实现合并。
在当前目录下,输入合并指令:
type *.txt >>d:\Users\zlx\Desktop\2\A.txt
然后就会得到合并好的A.txt文件了。
2.4labelimg使用遇到的问题
1.遇到切下一张图闪退问题
报错如下图: