欢迎扫描二维码关注微信公众号 深度学习与数学 [每天获取免费的大数据、AI等相关的学习资源、经典和最新的深度学习相关的论文研读,算法和其他互联网技能的学习,概率论、线性代数等高等数学知识的回顾]
read_seq.py
# -*- coding: utf-8 -*-
"""
@author: 赵磊
@project: FURKING_MESS_TOOLS
@file: read_seq.py
@time: 2019/9/28 15:57
@description:
"""
import struct
import cv2
def read_header(ifile):
feed = ifile.read(4)
norpix = ifile.read(24)
version = struct.unpack('@i', ifile.read(4))
length = struct.unpack('@i', ifile.read(4))
assert (length != 1024)
descr = ifile.read(512)
params = [struct.unpack('@i', ifile.read(4))[0] for i in range(0, 9)]
fps = struct.unpack('@d', ifile.read(8))
# skipping the rest
ifile.read(432)
image_ext = {100: 'raw', 102: 'jpg', 201: 'jpg', 1: 'png', 2: 'png'}
return {'w': params[0], 'h': params[1],
'bdepth': params[2],
'ext': image_ext[params[5]],
'format': params[5],
'size': params[4],
'true_size': params[8],
'num_frames': params[6]}
def read_seq(path):
ifile = open(path, 'rb')
params = read_header(ifile)
bytes = open(path, 'rb').read()
# this is freaking magic, but it works
extra = 8
s = 1024
seek = [0] * (params['num_frames'] + 1)
seek[0] = 1024
images = []
# this crashes in the last iteration, so we reduce it by one iteration
for i in range(0, params['num_frames'] - 1):
tmp = struct.unpack_from('@I', bytes[s:s + 4])[0]
s = seek[i] + tmp + extra
if i == 0:
val = struct.unpack_from('@B', bytes[s:s + 1])[0]
if val != 0:
s -= 4
else:
extra += 8
s += 8
seek[i + 1] = s
nbytes = struct.unpack_from('@i', bytes[s:s + 4])[0]
I = bytes[s + 4:s + nbytes]
tmp_file = 'tmp/img%d.jpg' % i
open(tmp_file, 'wb+').write(I)
img = cv2.imread(tmp_file)
img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
images.append(img)
return images
seq2avi.py
# -*- coding: utf-8 -*-
"""
@author: 赵磊
@project: FURKING_MESS_TOOLS
@file: seq2avi.py
@time: 2019/9/28 15:35
@description:
"""
import numpy as np
import os
import read_seq
import cv2
video_list = 'video_Olympic.list'
dataset_root = 'C:\\Users\\user\\Desktop\\set08'
dataset_converted_root = 'C:\\Users\\user\\Desktop\\set08\\re'
if not os.path.exists(dataset_converted_root):
print('Creating new folder for converted dataset')
os.mkdir(dataset_converted_root)
cnt = 0
file = open(video_list, 'r')
for line_raw in file:
video_name = line_raw.rstrip('\n')
video_class = video_name.split('/')[0]
video_filename = video_name.split('/')[-1]
video_path = os.path.join(dataset_root, video_name)
video_name_wo_ext = os.path.join(*video_name.split('.')[:-1])
converted_video_path = os.path.join(dataset_converted_root, video_name_wo_ext + '_converted.avi')
dest_class_folder = os.path.join(dataset_converted_root, video_class)
if not os.path.exists(dest_class_folder):
os.mkdir(dest_class_folder)
print('#{:04d} \t| Reading video {}'.format(cnt + 1, video_name))
image_npy_list = read_seq.read_seq(video_path)
print('Found {:04d} images'.format(len(image_npy_list)))
sample_img = image_npy_list[0]
h = sample_img.shape[0]
w = sample_img.shape[1]
video = np.array(image_npy_list, dtype=np.float32)
writer = cv2.VideoWriter(converted_video_path, cv2.VideoWriter_fourcc(*'PIM1'), 25, (w, h), True)
for img in image_npy_list:
img = img[:, :, [2, 1, 0]]
writer.write(img)
print('')
cnt += 1