他的回复:
[quote]回复:冰露 发表于 2020-8-31 09:44您好,请确认下作业中给出提示的四步都完成了,特别是第三步中“你需要修改下一个cell中的_SAMPLE_VIDEO_FRAMES参数值为视频总 帧数减1,”[/quote]import id3后,新建一个cell。在新cell中导入代码并补全代码 'dataset_subset/Bowling/v_Bowling_g05_c04.avi'。import osimport cv2import timeimport numpy as npdef get_video_info(video_path): _, ext = os.path.splitext(video_path) if not ext in ['.avi', '.mp4']: raise ValueError('Extension "%s" not supported' % ext) cap = cv2.VideoCapture(video_path) if not cap.isOpened(): raise ValueError("Could not open the file.\n{}".format(video_path)) print('视频分辨率: %d x %d' % (cap.get(cv2.CAP_PROP_FRAME_WIDTH), cap.get(cv2.CAP_PROP_FRAME_HEIGHT))) print('视频帧率:', cap.get(cv2.CAP_PROP_FPS)) print('视频总帧数:', cap.get(cv2.CAP_PROP_FRAME_COUNT))def compute_rgb(video_path): """Compute RGB""" rgb = [] vidcap = cv2.VideoCapture(video_path) count = 0 while True: success, frame = vidcap.read() if success is True: count += 1 # if count % 2 == 0: # continue frame = cv2.resize(frame, (342, 256)) frame = (frame / 255.) * 2 - 1 frame = frame[16:240, 59:283] rgb.append(frame) else: break vidcap.release() rgb = rgb[:-1] rgb = np.asarray([np.array(rgb)]).astype(np.float32) return rgbdef compute_TVL1(video_path): """Compute the TV-L1 optical flow.""" flow = [] TVL1 = cv2.DualTVL1OpticalFlow_create() # for opencv version: 3.4.2.17 vidcap = cv2.VideoCapture(video_path) success, frame1 = vidcap.read() prev_frame = cv2.cvtColor(frame1, cv2.COLOR_RGB2GRAY) vid_len = int(vidcap.get(cv2.CAP_PROP_FRAME_COUNT)) bins = np.linspace(-20, 20, num=256) for count in range(0, vid_len - 1): success, frame2 = vidcap.read() count += 1 # if count % 2 == 0: # continue curr_frame = cv2.cvtColor(frame2, cv2.COLOR_RGB2GRAY) curr_flow = TVL1.calc(prev_frame, curr_frame, None) assert (curr_flow.dtype == np.float32) # Truncate large motions curr_flow[curr_flow >= 20] = 20 curr_flow[curr_flow = -20] = -20 # digitize and scale to [-1;1] curr_flow = np.digitize(curr_flow, bins) curr_flow = (curr_flow / 255.) * 2 - 1 # cropping the center curr_flow = curr_flow[8:232, 48:272] flow.append(curr_flow) prev_frame = curr_frame vidcap.release() flow = np.asarray([np.array(flow)]).astype(np.float32) return flowvideo_path = 'dataset_subset/Bowling/v_Bowling_g05_c04.avi' # TODO,填写视频所在的路径save_dir = os.path.dirname(video_path) + '_out'if not os.path.exists(save_dir): os.mkdir(save_dir)get_video_info(video_path)start_time = time.time()print('Extract RGB...')rgb = compute_rgb(video_path)print('save rgb with shape ', rgb.shape)rgb_save_path = os.path.join(save_dir, os.path.basename(video_path).split('.')[0] + '_rgb.npy')np.save(rgb_save_path, rgb)print('Compute rgb in sec: ', time.time() - start_time)start_time = time.time()print('Extract Flow...')flow = compute_TVL1(video_path)print('Save flow with shape ', flow.shape)flow_save_path = os.path.join(save_dir, os.path.basename(video_path).split('.')[0] + '_flow.npy')np.save(flow_save_path, flow)print('Compute flow in sec: ', time.time() - start_time)print('save rgb npy at:', rgb_save_path)print('save flow npy at:', flow_save_path)print('Compute Success')修改帧数和存储地址结果。。。。。。。。。。。。。。。。。。。。。