吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 1732|回复: 0
收起左侧

[Python 转载] GUI界面的视频帧提取

[复制链接]
sic13579 发表于 2021-11-12 09:45
本帖最后由 sic13579 于 2021-11-12 12:07 编辑

由于毕业设计的方向是深度学习中YOLOV5算法在于视频检测中的应用。
在这种需要训练数据集的深度学习中,数据集的采集是首要目标。
程序作用:1、反馈视频总帧数
                  2、根据所需要的图片数目生成相应数目的随机数字序号,进行提取对应帧数图片。
                  3、根据每次数目不同建立不同文件夹。
GUI页面截图
屏幕截图 .png

程序代码块:
[Python] 纯文本查看 复制代码
# -*- coding:utf-8 -*-
"""
制作人:Albert
时间:2021.11.08
地点:海南热带海洋学院图书馆
"""
import os
from random import randint
from shutil import move
from cv2 import IMWRITE_JPEG_QUALITY, imwrite, VideoCapture, CAP_PROP_POS_FRAMES
import wx


class Frame(wx.Frame):
    def __init__(self, path=None, cap=None, frames_num=None, dlg=None):
        wx.Frame.__init__(self, None, title='月兔视频帧图片提取器', size=(372, 418), name='frame', style=541071360)
        icon = wx.Icon(r'D:\Users\lenovo\Downloads\y.png')
        self.SetIcon(icon)
        self.panel = wx.Panel(self)
        self.Centre()
        self.bq1 = wx.StaticText(self.panel, size=(235, 38), pos=(52, 56), label='可提取视频帧数目:', name='staticText',
                                 style=17)
        bq1_Font = wx.Font(12, 74, 90, 400, False, 'Microsoft YaHei UI', 28)
        self.bq1.SetFont(bq1_Font)
        self.bq2 = wx.StaticText(self.panel, size=(104, 23), pos=(41, 125), label='提取图片数目', name='staticText',
                                 style=2321)
        bq2_Font = wx.Font(11, 74, 90, 400, False, 'Microsoft YaHei UI', 28)
        self.bq2.SetFont(bq2_Font)
        self.bjk1 = wx.TextCtrl(self.panel, size=(104, 27), pos=(196, 121), value='', name='text', style=0)
        self.an1 = wx.Button(self.panel, size=(74, 29), pos=(41, 203), label='1.打开文件', name='button')
        self.an1.Bind(wx.EVT_BUTTON, self.an1_anbdj)
        self.an2 = wx.Button(self.panel, size=(88, 29), pos=(143, 203), label='2:选择保存路径', name='button')
        self.an2.Bind(wx.EVT_BUTTON, self.an2_anbdj)
        self.an3 = wx.Button(self.panel, size=(74, 29), pos=(263, 203), label='4:开始', name='button')
        self.an3.Bind(wx.EVT_BUTTON, self.an3_anbdj)

        self.path = path
        self.cap = cap
        self.frames_num = frames_num
        self.dlg = dlg

    def an1_anbdj(self, event):
        wildcard = u"视频文件 (*.mp4)|*.mp4|" \
                   "All files (*.*)|*.*"
        dlg = wx.FileDialog(self, message=u"选择视频文件",
                            defaultDir=os.getcwd(),
                            defaultFile="",
                            wildcard=wildcard,
                            style=wx.FD_OPEN)

        if dlg.ShowModal() == wx.ID_OK:
            self.path = dlg.GetPath()
        self.cap = VideoCapture(self.path)
        self.frames_num = self.cap.get(7)
        self.bq1.SetLabelText('可提取视频帧数目:{}'.format(int(self.frames_num)))

    def an2_anbdj(self, event):
        self.dlg = wx.DirDialog(self, u"选择保存文件夹", style=wx.DD_DEFAULT_STYLE)
        if self.dlg.ShowModal() == wx.ID_OK:
            os.chdir(self.dlg.GetPath())
        os.getcwd()

    def an3_anbdj(self, event):
        key_num = int(self.bjk1.GetValue())
        if key_num > self.frames_num:
            key_num = self.frames_num
        bq3 = wx.StaticText(self.panel, size=(257, 22),pos=(47, 276),label='下载进度',name='staticText',style=17)
        jdt3 = wx.Gauge(self.panel, range=int(key_num-1), size=(261, 39), pos=(47, 316), name='gauge', style=4)
        jdt3.SetValue(0)
        pirce = {}
        i = 0
        while len(pirce) < key_num:
            pirce[randint(0, self.frames_num)] = i
            i += 1
        k=1
        for x in pirce.keys():
            self.cap.set(CAP_PROP_POS_FRAMES, int(x))
            being, picture = self.cap.read()
            if being:
                imwrite('{}.jpg'.format(x), picture, [IMWRITE_JPEG_QUALITY, 100])
                jdt3.SetValue(k)
                bq3.SetLabelText('下载进度:{}/{}'.format(k,int(key_num)))
                k += 1

        sourcepath = os.getcwd()
        path = sourcepath + "/" + str(key_num)
        isExists = os.path.exists(path)
        if not isExists:
            os.makedirs(path)
        else:
            pass
        sourcefiles = os.listdir(sourcepath)
        destinationpath = path
        for file in sourcefiles:
            if file.endswith('.jpg'):
                move(os.path.join(sourcepath, file), os.path.join(destinationpath, file))
        bq3.SetLabelText("下载进度:            当前任务完成")

class myApp(wx.App):
    def OnInit(self):
        self.frame = Frame()
        self.frame.Show(True)
        return True


if __name__ == '__main__':
    app = myApp()
    app.MainLoop()

免费评分

参与人数 2吾爱币 +8 热心值 +2 收起 理由
wapjltb + 1 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
苏紫方璇 + 7 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-25 11:54

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表