[YOLO专题-15]:YOLO V5 - 如何从视频文件中生成训练样本的原始图片
Posted 文火冰糖的硅基工坊
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[YOLO专题-15]:YOLO V5 - 如何从视频文件中生成训练样本的原始图片相关的知识,希望对你有一定的参考价值。
作者主页(文火冰糖的硅基工坊):文火冰糖(王文兵)的博客_文火冰糖的硅基工坊_CSDN博客
本文网址:https://blog.csdn.net/HiWangWenBing/article/details/122324063
前言:
在构建自己的训练样本时,有时候需要从视频文件中生成原始的样本图片,本文就是讲解如何通过视频文件生成训练样本的原始图片,以便后续进一步的为原始的样本图片打标签。
从视频文件中创建图片的方法很多,有现成的工具,与可以用python编写这样的工具,如下就是python代码的实现。
一、基本原理
基本原理其实很简单,open cv提供了读取视频帧的接口, 关键的接口函数如下:
(1)创建读取视频文件的open cv对象
import cv2
# 创建读取读取视频文件的open cv对象
video_capture = cv2.VideoCapture(video)
(2)读取视频帧(图片)
success, frame = video_capture.read()
(3)把视频帧(图片)存储成文件
cv2.imwrite(save_name, frame)
二、代码完整实现
# -*- coding:utf8 -*-
import cv2
import os
import shutil
import argparse
from pathlib import Path
def get_frame_from_video(video = '',
output = '',
prefix = '',
interval = 5):
"""
Args:
video: 输入视频名字
output: 保存图片的路径
interval: 保存图片的帧率间隔
Returns:
"""
# 创建保存输出图片的目录
save_path = output + '/'
is_exists = os.path.exists(save_path)
if is_exists:
print('Warning: path of %s already exist, please remove it firstly by manual' % save_path)
#shutil.rmtree(save_path)
return
print('create output path %s' % save_path)
os.makedirs(save_path)
# 创建读取读取视频文件的open cv对象
video_capture = cv2.VideoCapture(video)
minor = 0
major = 0
while True:
# 读取视频文件,获取一帧图片
success, frame = video_capture.read()
# 视频文件结束
if not success:
print('Finished, output path =', save_path)
break
# 有效图片
minor += 1
if minor % interval == 0:
# 构建生成的图片名
major += 1
save_name = save_path + prefix + str(major) + '_' + str(minor) + '.jpg'
# 保存图片
cv2.imwrite(save_name, frame)
def parse_opt():
# define argparse object
parser = argparse.ArgumentParser()
# add argument for command line
parser.add_argument('--video', type=str, help='video file path')
parser.add_argument('--output', type=str, help='The output directory')
parser.add_argument('--prefix', type=str, help='The prefix of output image')
parser.add_argument('--interval', type=int, default=5, help='the intervals of frame from video')
# parse arges from command line
opt = parser.parse_args()
print("video=", opt.video)
print("output=", opt.output)
print("prefix=", opt.prefix)
print("interval=", opt.interval)
# return opt
return opt
def main(opt):
get_frame_from_video(**vars(opt))
if __name__ == '__main__':
opt = parse_opt()
main(opt)
三、代码是使用
python GenPictureFromVideo.py --video video.mp4 --output tmp --prefix pp --interval 10
GenPictureFromVideo.py: python程序名。
该程序的命令行选项如下:
- --video:视频文件名
- --output:存储输出图片的路径
- --prefix :生成图片的前缀
- --interval:视频帧间隔,即间隔多少帧输出一个张图片,默认为5
作者主页(文火冰糖的硅基工坊):文火冰糖(王文兵)的博客_文火冰糖的硅基工坊_CSDN博客
本文网址:https://blog.csdn.net/HiWangWenBing/article/details/122324063
以上是关于[YOLO专题-15]:YOLO V5 - 如何从视频文件中生成训练样本的原始图片的主要内容,如果未能解决你的问题,请参考以下文章
[YOLO专题-17]:YOLO V5 - 如何把YOLO训练数据集批量转换成带矩形框的图片
[YOLO专题-22]:YOLO V5 - ultralytics代码解析-超参数详解
[YOLO专题-18]:YOLO V5 - ultralytics代码解析-总体架构