[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专题-8]:YOLO V5 - 简介与快速概览

[YOLO专题-18]:YOLO V5 - ultralytics代码解析-总体架构

[YOLO专题-21]:YOLO V5 - ultralytics代码解析-网络配置文件与总体结构

[YOLO专题-19]:YOLO V5 - ultralytics代码解析-dataloader数据加载机制