行为识别数据txt生成

生成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()


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值