光流

pip install opencv-python==4.1.0.25 -i https://pypi.tuna.tsinghua.edu.cn/simple

pip install opencv-contrib-python==4.1.0.25 -i https://pypi.tuna.tsinghua.edu.cn/simple

pip install multiprocess


import os,sys

import numpyas np

import cv2

from PILimport Image

from multiprocessingimport Pool

import argparse

# from IPython import embed #to debug

def ToImg(raw_flow,bound):

'''

this function scale the input pixels to 0-255 with bi-bound

    :paramraw_flow: input raw pixel value (not in 0-255)

    :parambound: upper and lower bound (-bound, bound)

    :return: pixel value scale from 0 to 255

'''

    flow=raw_flow

flow[flow>bound]=bound

flow[flow<-bound]=-bound

flow-=-bound

flow*=(255/float(2*bound))

return flow

def save_flows(flows,image,save_dir,num,bound):

'''

To save the optical flow images and raw images

    :paramflows: contains flow_x and flow_y

    :paramimage: raw image

    :paramsave_dir: save_dir name (always equal to the video id)

    :paramnum: the save id, which belongs one of the extracted frames

    :parambound: set the bi-bound to flow images

    :return: return 0

'''

    #rescale to 0~255 with the bound setting

    flow_x=ToImg(flows[...,0],bound)

flow_y=ToImg(flows[...,1],bound)

if not os.path.exists(os.path.join(new_dir,save_dir)):

os.makedirs(os.path.join(new_dir,save_dir))

#save the image

    save_img=os.path.join(new_dir,save_dir,'img_{:05d}.jpg'.format(num))

cv2.imwrite(save_img,image)

#save the flows

    save_x=os.path.join(new_dir,save_dir,'flow_x_{:05d}.jpg'.format(num))

save_y=os.path.join(new_dir,save_dir,'flow_y_{:05d}.jpg'.format(num))

flow_x_img=np.array(flow_x)

flow_y_img=np.array(flow_y)

cv2.imwrite(save_x,flow_x_img)

cv2.imwrite(save_y,flow_y_img)

return 0

def dense_flow(augs):

'''

To extract dense_flow images

    :paramaugs:the detailed augments:

video_name: the video name which is like: 'v_xxxxxxx',if different ,please have a modify.

save_dir: the destination path's final direction name.

step: num of frames between each two extracted frames

bound: bi-bound parameter

    :return: no returns

'''

    video_path,save_dir,step,bound=augs

# provide two video-read methods: cv2.VideoCapture() and skvideo.io.vread(), both of which need ffmpeg support

# videocapture=cv2.VideoCapture(video_path)

# if not videocapture.isOpened():

#    print 'Could not initialize capturing! ', video_name

    videocapture=cv2.VideoCapture(video_path)

# if extract nothing, exit!

    frame_num=0

    image,prev_image,gray,prev_gray=None,None,None,None

    num0=0

    # videocapture.set(cv2.CAP_PROP_POS_FRAMES,0)  #设置要获取的帧号

    # a,frame=videocapture.read()  #read方法返回一个布尔值和一个视频帧。若帧读取成功,则返回True

    while True:

suc,frame=videocapture.read()

num0+=1

        if frame_num==0:

prev_image=frame

prev_gray=cv2.cvtColor(prev_image,cv2.COLOR_RGB2GRAY)

frame_num+=1

            # to pass the out of stepped frames

            step_t=step

while step_t>1:

#frame=videocapture.read()

                num0+=1

                step_t-=1

            continue

        image=frame

gray=cv2.cvtColor(image,cv2.COLOR_RGB2GRAY)

frame_0=prev_gray

frame_1=gray

##default choose the tvl1 algorithm

        dtvl1=cv2.optflow.DualTVL1OpticalFlow_create()

flowDTVL1=dtvl1.calc(frame_0,frame_1,None)

save_flows(flowDTVL1,image,save_dir,frame_num,bound)#this is to save flows and img.

        prev_gray=gray

prev_image=image

frame_num+=1

        # to pass the out of stepped frames

        step_t=step

while step_t>1:

#frame=videocapture.read()

            num0+=1

            step_t-=1

def get_video_list():

video_list=[]

for cls_namesin os.listdir(videos_root):

cls_path=os.path.join(videos_root,cls_names)

for video_in os.listdir(cls_path):

video_list.append(video_)

video_list.sort()

return video_list,len(video_list)

if __name__ =='__main__':

# example: if the data path not setted from args,just manually set them as belows.

#dataset='ucf101'

#data_root='/S2/MI/zqj/video_classification/data'

#data_root=os.path.join(data_root,dataset)

    videos_root=os.path.join(r'C:\Users\USER\Desktop\test_cpu\xdw_baseline\data\mod-ucf101\videos')

#specify the augments

    num_workers=4

    step=1

    bound=15

    s_=0

    e_=13320

    new_dir=r'C:\Users\USER\Desktop\test_cpu\xdw_baseline\data\mod-ucf101'+'/'+'flow'

    videos_list = []

flows_dirs = []

for iin os.listdir(r'C:\Users\USER\Desktop\test_cpu\xdw_baseline\data\mod-ucf101\videos'):

videos_list.append(r'C:\Users\USER\Desktop\test_cpu\xdw_baseline\data\mod-ucf101\videos'+'/'+i)

flows_dirs.append(r'C:\Users\USER\Desktop\test_cpu\xdw_baseline\data\mod-ucf101\flow'+'/'+i.split('.')[0])

len_videos=min(13320-s_,13320-s_)# if we choose the ucf101

    pool=Pool(num_workers)

# if mode=='run':

#    pool.map(dense_flow,zip(video_list,flows_dirs,[step]*len(video_list),[bound]*len(video_list)))

# else: #mode=='debug

    dense_flow((videos_list[0],flows_dirs[0],step,bound))

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,951评论 6 497
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,606评论 3 389
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 160,601评论 0 350
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,478评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,565评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,587评论 1 293
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,590评论 3 414
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,337评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,785评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,096评论 2 330
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,273评论 1 344
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,935评论 5 339
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,578评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,199评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,440评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,163评论 2 366
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,133评论 2 352

推荐阅读更多精彩内容