京东猪脸识别比赛数据预处理:用Python将视频每一帧提取存储为图片

京东猪脸识别比赛数据预处理:用Python将视频每一帧提取存储为图片最近参加京东的猪脸识别比赛,训练集是30个视频,需要将视频的每一帧提取出来存储为图片,存入对应的文件夹(分类标签)。本例是直接调用了cv2模块中的VideoCapture。但有个问题,每一个视频转换得到的30个子文件夹里,都有2952张图片,但第2952张是空的,所以只有运用强大的Linux递归删除符合条件的文件了

大家好,又见面了,我是你们的朋友全栈君。

最近参加京东的猪脸识别比赛,训练集是30个视频,需要将视频的每一帧提取出来存储为图片,存入对应的文件夹(分类标签)。

本例是直接调用了cv2 模块中的 VideoCapture。一次运行,大概10分钟,就能得到预处理后的分类图片了,具体代码如下。

视频每一帧提取存储为图片代码

#! encoding: UTF-8

import os

import cv2
import cv

videos_src_path='/sata_disk/E_office/zhouhongli/pig/train'
images_save_path='/sata_disk/E_office/zhouhongli/pig/frame'

videos = os.listdir(videos_src_path)
videos = filter(lambda x: x.endswith('mp4'), videos)

for each_video in videos:
    print each_video

    # get the name of each video, and make the directory to save frames
    each_video_name,_=each_video.split('.')
    os.mkdir(images_save_path +'/'+ each_video_name)

    each_video_save_full_path=os.path.join(images_save_path, each_video_name) + '/'

    # get the full path of each video, which will open the video tp extract frames
    each_video_full_path=os.path.join(videos_src_path, each_video)

    cap=cv2.VideoCapture(each_video_full_path)
    frame_count = 1
    success = True
    while(success):
        success, frame=cap.read()
        print 'Read a new frame: ', success

        params = []
        params.append(cv.CV_IMWRITE_PXM_BINARY)
        params.append(1)
        cv2.imwrite(each_video_save_full_path + each_video_name + "_%d.jpg" % frame_count, frame, params)

        frame_count = frame_count+1

cap.release()

递归删除文件的问题

但有个问题,每一个视频转换得到的30个子文件夹里,都有2952张图片,但第2952张是空的,所以只有运用强大的Linux递归删除符合条件的文件了,我是这样删除滴。

zhouhongli@1080TI:~$ find  . -name '*_2952.jpg' -size 0 -print0 |xargs -0 rm

参考

python tools:将视频的每一帧提取并保存
http://blog.csdn.net/u010167269/article/details/53268686
Linux find 与 rm 联动删除符合条件的文件
https://maoxian.de/2015/12/1362.html

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/151885.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • Silverlight群建立了,欢迎加入SilverlightQQ群!

    Silverlight群建立了,欢迎加入SilverlightQQ群!Silverlight群建立了,欢迎加入SilverlightQQ群,一切关于WPF(Windows Presentation Foundation)&Silverlight(RIA程序开发),欢迎大家上传Silverlight共享文档 加群者:”Silverlight爱好者或WPF爱好者”即可,拒绝潜水份子…群号:50992947论坛上的http://topic.csdn.n

    2022年7月17日
    12
  • 中图法中的分类号通常由哪两部分组成_北京航空航天大学排名

    中图法中的分类号通常由哪两部分组成_北京航空航天大学排名 V航空、航天   V1航空、航天技术的研究与探索     V11航空、航天的发展与空间探索     V19航空、航天的应用   V2航空     [V2-9]航空运输经济     V21基础理论及试验       V211空气动力学         V211.1理论空气动力学           V21

    2022年10月2日
    0
  • c#封装动态库_nginx调用so动态库

    c#封装动态库_nginx调用so动态库一直对动态库的封装理解不是很透彻,虽然之前写过一个Demo,不过并没有真正的理解。所以写下来,帮助自己理解下。1、一个程序从源文件编译生成可执行文件的步骤:预编译–> 编译–> 汇编–>链接(1)预编译,即预处理,主要处理在源代码文件中以“#”开始的预编译指令,如宏展开、处理条件编译指令、处理#include指令等。(2)编译过程就是把预处理完的文件进行一系列词法

    2022年9月30日
    0
  • Python range() 函数用法

    Python range() 函数用法Python内置函数pythonrange()函数可创建一个整数列表,一般用在for循环中。函数语法参数说明:start:计数从start开始。默认是从0开始。例如rang

    2022年7月5日
    22
  • Java安全之SnakeYaml反序列化分析

    Java安全之SnakeYaml反序列化分析0x00前言偶然间看到SnakeYaml的资料感觉挺有意思,发现SnakeYaml也存在反序列化利用的问题。借此来分析一波。0x01SnakeYa

    2021年12月12日
    67
  • Entity Framework 在Vs2012下Update Model From DataBase 失败的问题

    Entity Framework 在Vs2012下Update Model From DataBase 失败的问题

    2021年8月28日
    47

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号