生成UCF101的txt,训练集和验证集在目录上未分开:
生成train.txt、val.txt、index.txt
import os
from glob import glob
import random
import math
path='/XXX/action/UCF101/*' #帧所在路径
f1=open('ucf-train.txt','w')
f2=open('ucf-val.txt','w')
f3=open('ucf-index.txt','w')
class_=glob(path)
class_.sort()
i=0
lis=[] #二维列表
l=[] #存储单个类别的列表
index_=[]
for c in class_: # /XXX/UCF101/run
l=[]
videos=glob(c+'/*')
c_name=c.split('/')[-1] # run
videos.sort()
f3.write(str(i)+' '+c_name+'\n') # 0 run
i+=1
for v in videos: # /XXX/action/UCF101/run/v_0001
v_name=v.split('/')[-1].split('.')[0] # v_0001
imgs=os.listdir(v)
l.append(v+' '+str(len(imgs))+' '+str(i))
print v+' '+str(len(imgs))+' '+str(i)
random.shuffle(l) #单类别打乱
lis.append(l)
train_list=[]
val_list=[]
for li in lis:
for i in range(0,int(math.ceil(len(li)*0.8))):
train_list.append(li[i]+'\n')
for i in range(int(math.ceil(len(li)*0.8)),int(len(li))):
val_list.append(li[i]+'\n')
random.shuffle(train_list) #总体打乱
random.shuffle(val_list)
print('writing txt...')
for t in train_list:
f1.write(t)
for v in val_list:
f2.write(v)
f1.close()
f2.close()
f3.close()
提取Kinetics的帧:
可多个同时执行,遇到已创建的视频文件夹会自动跳过
#coding=UTF-8
import cv2
from glob import glob
import os
#全部提取
path='/home/XXX/action/kinetics/video/train/*'
dst_path='/home/XXX/action/kinetics/frame/train/'
class_=glob(path)
class_.sort()
flag=False
for c in class_:
class_name=c.split('/')[-1]
print class_name[0]
if class_name[0]=='t': #从t开始
flag=True
if flag==False:
continue
if class_name[0]=='u': #到u停止
break
videos=glob(path+class_name+'/*')
for v in videos:
vid_name=v.split('/')[-1].split('.')[0]#视频名
save_path=dst_path+class_name+'/'+vid_name
#print 'save=',save_path
if os.path.exists(save_path):
continue
else:
os.makedirs(save_path)
vid=cv2.VideoCapture(v)
i=1
while(True):
ret,frame=vid.read()
w=vid.get(3)
h=vid.get(4)
if w>h:
size=(320,240)
else:
size=(240,320)
if ret==True:
frame=cv2.resize(frame,size)
img_path=save_path+'/img_{:04d}.jpg'.format(i)
i+=1
cv2.imwrite(img_path,frame)
else:
break
print(v+' '+str(i-1))
生成Kinetics的txt,训练集和验证集在目录上已分开:
import os
from glob import glob
import random
import math
dst='/home/XXX/action/kinetics/frame/train/*'
f1=open('kinetics-train.txt','w')
#f3=open('kinetics-index.txt','w')
class_=glob(dst)
class_.sort()
for c in class_: # remove empty video
videos=glob(c+'/*')
for v in videos:
if not os.listdir(v):
print(v)
os.system('rmdir '+v)
os.system('rm {}.*'.format(v.replace('frame','video')))
i=0
lis=[] # lis=[l,l,l,l,l,...,l]
index_=[]
for c in class_: # /home/cdli/action/UCF101/run
videos=glob(c+'/*')
c_name=c.split('/')[-1] # run
videos.sort()
#f3.write(str(i)+' '+c_name+'\n') # 0 run
i+=1
for v in videos: # /home/cdli/action/UCF101/run/v_0001
v_name=v.split('/')[-1].split('.')[0] # v_0001
imgs=os.listdir(v)
lis.append(v+' '+str(len(imgs))+' '+str(i-1))
print v+' '+str(len(imgs))+' '+str(i-1)
random.shuffle(lis)
print('writing txt...')
for t in lis:
f1.write(t+'\n')
f1.close()
#f3.close()