深度学习中数据集处理(视频转图片)-图像篇

Hey,最近几天一直在做数据集处理的工作,过程很艰辛,今天先介绍一下数据集中图片的处理。标注文件的处理真的是太难了,我还没有搞定。标注文件的处理,下次介绍。

我要处理的数据集是之前提到的“ACM MM Grand Challenge on Large-scale Human-centric Video Analysis in Complex Events”数据集,

深度学习中数据集处理(视频转图片)-图像篇

官方给出的是视频文件,和每个视频文件对应的标注文件。首先为了要训练这些图片,我需要利用python和opencv去把视频中的每一帧切出来,并且要按顺序把图片命名成指定格式的名字。

深度学习中数据集处理(视频转图片)-图像篇

按照标注文件,需要把图片名称命名为6位的。从000000开始依次增加。

深度学习中数据集处理(视频转图片)-图像篇

好的,首先对官方给出的视频文件进行处理,把每个视频都变成图片,代码如下:

import cv2

import os

def save_img():

    video_path = '/Users/sqx/Downloads/HIE/HIE20/videos/train/'

    videos = os.listdir(video_path)

    for video_name in videos:

        file_name = video_name.split('.')[0]

        folder_name = video_path + file_name

        os.makedirs(folder_name, exist_ok=True)

        vc = cv2.VideoCapture(video_path + video_name)  # 读入视频文件

        c = 0

        print(file_name)

        rval = vc.isOpened()

 

        while rval:  # 循环读取视频帧

            rval, frame = vc.read()

            pic_path = folder_name + '/'

            if rval:

                cv2.imwrite(pic_path + str(c) + '.jpg', frame)  # 存储为图像,保存名为帧数.jpg

                cv2.waitKey(1)

            else:

                break

            c = c + 1

        vc.release()

        print('save_success')

        print(folder_name)

save_img()

在这里我用到了opencv,来获取图片帧,并用循环语句,把每个帧保存下来。

接下来是对帧数重命名,让它的命名符合给出的标注文件的命名规则。具体实现代码如下:

import os

def rename():

    img_path = '/Users/sqx/Downloads/HIE/HIE20/videos/train/19/'

    new_path = '/Users/sqx/Downloads/HIE/HIE20/videos/train/images/'

    imgname = os.listdir(img_path)

    n = len(imgname)

    images = os.listdir(new_path)

    imgname.sort(key=lambda x: int(x[:-4]))

    # print(imgname)

    # print(n)

    count = len(images)

    # print(count)

    i = count

    # i = 0

    for img in imgname:

        if img.endswith('.jpg'):

            oldname = os.path.join(os.path.abspath(img_path), img)

            nname = str(i)

            nname = nname.zfill(6)

            newname = os.path.join(os.path.abspath(new_path), nname +'.jpg')

            try:

                os.rename(oldname, newname)

                print("rename %s to %s ..." %(oldname, newname))

                i = i + 1

            except:

                continue

    print("total %d to rename & converted %d files" %(n, i))

 

rename()

这里特别值得注意的是:

imgname.sort(key=lambda x: int(x[:-4]))

由于python读取文件是默认是随机读取的,如果随机读取,那肯定没法和标注文件对应上,所以要对文件名称排序,我之前给它们的命名是按照帧的顺序去命名的,所以我首先对它们进行顺序排序,这个排序需要加key值“key=lambda x: int(x[:-4])”意思是去掉图片拓展名以后对图片名按照数字大小来排序。总之这点很关键。

总之,目前训练用的数据集中的图片已经处理好了,接下来我将重点处理标注文件,等我处理好了,再回来给大家说一下我的处理过程。

至于我们返校的时间,目前还是遥遥无期,幸好我们租了台带GPU的远程服务器,不管是跑实验还是运行python脚本,都很快,它们的环境都是配置好的,解决了我们配置实验环境的麻烦。有需要的朋友可以通过一下方式了解:智星云官网: http://www.ai-galaxy.cn/,淘宝店:https://shop36573300.taobao.com/公众号: 智星AI,

今天新冠疫情全球已经突破600万了,真是一个令人悲伤的数字。由于美国警察的暴力执法致人死亡的视频,简直令人发指。而后所引爆的*活动也已经在美国多个州爆发。在美国的朋友们注意安全啊。PEACE&LOVE

 

 

参考资料:

http://humaninevents.org/data.html?title=1

https://arxiv.org/abs/2005.04490

 http://www.ai-galaxy.cn/

https://shop36573300.taobao.com/

公众号: 智星AI,