def write_video(write_path, vidreader, smoothMasks, window_centers, window_sizes, num_blocks, num_prev_frames, rsz_shape=[80, 60]): create_folder_structure_if_not_exists(write_path) shape = [vidreader.width, vidreader.height] vidwriter = VideoWriter(write_path, vidreader.width, vidreader.height) vidwriter.build() vidreader.__reset__() skip_frames = num_prev_frames + num_blocks / 2 vidreader.skip_frames(skip_frames) frame_idx = 0 numFrames = len(smoothMasks) while (frame_idx < numFrames): frame = vidreader.read_next() if frame is None: break frame = draw_rect(frame, window_centers[frame_idx], window_sizes, shape) name = "test_results/tracking/track{0}.png".format(frame_idx) cv2.imwrite(name, frame) vidwriter.write(np.uint8(frame)) frame_idx += 1 vidwriter.close()
def __init__(self,vidfile,labelfile,modelFile,labelListFile,exportPath, perClassFrames=40,frameRate=20,context_size=5, banerWidth = 80,scale = 1): # input properties self.vidreader = VideoReader(vidfile); self.labelreader = open(labelfile,'r'); self.N = self.vidreader.frames; self.width,self.height = self.vidreader.width,self.vidreader.height; self.context_size=context_size; self.perClassFrames = perClassFrames; self.labels = load_labels(labelListFile); self.n_outs = len(self.labels); self.flag_colors = []; for index in range(self.n_outs): self.flag_colors.extend([tuple(np.array(cm.jet(index/float(self.n_outs))[:3][::-1])*255)]) self.predictors,self.predictorStartIdx = load_predictors(modelFile); self.input_shape = [self.height,self.width,3] self.batch_size = self.predictors[0].batch_size #write properites self.banerWidth = banerWidth self.vidWriter = VideoWriter(exportPath,self.banerWidth+self.width,self.height,fps=frameRate); self.colors = np.random.randint(256, size=(len(self.labels), 3)) self.scale = scale; #status self.frameIdx = 0; self.tasks = deque(); self.isFinished = False; self.vidWriter.build();
def tracker(inPath,outPath="test_results/tracker.avi"): #initialization for default value hog = cv2.HOGDescriptor() hog.setSVMDetector( cv2.HOGDescriptor_getDefaultPeopleDetector()) vidreader = VideoReader(inPath) vidwriter = VideoWriter(outPath,vidreader.width,vidreader.height) vidwriter.build(); frame_idx =0; N = vidreader.frames; while vidreader.num_remaining_frames() > 0: frame_idx += 1; cur_frame = vidreader.read_next(); print 'Perform human tracking.... {0}%\r'.format((frame_idx*100/N)), if cur_frame is None: break; gray_cur_frame = cv2.cvtColor(cur_frame, cv2.COLOR_BGR2GRAY) found, w = hog.detectMultiScale(gray_cur_frame, winStride=(8,8), padding=(32,32), scale=1.05) found_filtered = [] #discarding the bounding box on within other for ri, r in enumerate(found): for qi, q in enumerate(found): if ri != qi and inside(r, q): break else: found_filtered.append(r) draw_detections(cur_frame, found_filtered, 1) vidwriter.write(cur_frame); vidreader.close(); vidwriter.close() cv2.destroyAllWindows() print "Implemented Human Tracking............. [Done]"
def write_video(vidreader, out_path, num_prev_frames, num_blocks, smoothMasks, vaMasks): create_folder_structure_if_not_exists(out_path) start = time.time() vidwriter = VideoWriter(out_path, vidreader.width * 2, vidreader.height) vidwriter.build() vidreader.__reset__() N = vidreader.frames vidreader.skip_frames(num_prev_frames + num_blocks / 2) frame_idx = 0 numFrames = len(smoothMasks) while (frame_idx < numFrames): print 'Writing video ... {0}%\r'.format((frame_idx * 100 / N)), frame = vidreader.read_next() zero_frame = np.zeros(frame.shape, dtype=np.uint8) zero_frame[:, :, 2] = vaMasks[frame_idx] * 255 out_frame1 = cv2.addWeighted(frame, 0.6, zero_frame, 0.4, 0) out_frame2 = frame * smoothMasks[frame_idx][:, :, None] name = "test_results/smoothening/{0}_smooth.png".format( frame_idx + num_prev_frames + num_blocks / 2) cv2.imwrite(name, out_frame2) vidwriter.write(np.uint8(np.hstack((out_frame1, out_frame2)))) frame_idx += 1 vidwriter.close() time_taken = time.time() - start print "Writing video .... [DONE] in ", time_taken, " seconds"
def test_bgsub_mog(inp): vidreader = VideoReader(inp) vidwriter = VideoWriter("test_results/bg_sub_mog.avi", vidreader.width, vidreader.height) bgsub = get_instance(BGMethods.MOG_SUBSTRACTION) start = time.time() process_video(bgsub, vidreader, vidwriter) time_taken = time.time() - start print "Tested Background Subtraction (Mixture of Gaussian)... [DONE] in " + str( time_taken) + " seconds"
def test_bgsub_fd(inp): vidreader = VideoReader(inp) vidwriter = VideoWriter("test_results/bg_sub_fd.avi", vidreader.width, vidreader.height) bgsub = get_instance(BGMethods.FRAME_DIFFERENCING) start = time.time() process_video(bgsub, vidreader, vidwriter, num_blocks=2) time_taken = time.time() - start print "Tested Background Subtraction (Frame Differencing)... [DONE] in " + str( time_taken) + " seconds"
def createVideo(datapath, group, outfileName, shape, duration=120, framerate=20, vidLen=32): vidOutFileName = outfileName + 'test.avi' labelOutFileName = outfileName + 'test.txt' values = [] create_folder_structure_if_not_exists(vidOutFileName) with open(datapath + os.sep + group + ".txt", 'r') as fp: for line in fp: values.extend([line.split()]) numClass = len(values) numExamples = (duration * framerate) / (vidLen) randomNumbers = np.random.random_integers(0, numClass - 1, numExamples) fileWriter = open(labelOutFileName, 'w') vidWriter = VideoWriter(vidOutFileName, shape[0], shape[1]) vidWriter.build() for idx, random_idx in enumerate(randomNumbers): print 'Creating UCF 50 video ... {0}%\r'.format( (idx * 100 / numExamples)), classDetails = values[random_idx] classPath = datapath + os.sep + classDetails[0] + os.sep classExamples = [ os.path.join(classPath, _file) for _file in os.listdir(classPath) if os.path.isfile(os.path.join(classPath, _file)) ] chosenExample = classExamples[np.random.randint(len(classExamples))] #print chosenExample vidreader = VideoReader(chosenExample, None) num_frames = vidreader.frames cnt, frames = vidreader.read(np.random.randint(num_frames - vidLen), vidLen) fileWriter.writelines("%d\n" % int(item) for item in [classDetails[2]] * cnt) for frame in frames: vidWriter.write(frame) vidWriter.close() fileWriter.close()
rect = np.array( [_min[1], _min[0], _max[1] - _min[1], _max[0] - _min[0]], dtype=np.float32) cv2.accumulateWeighted(rect, prev_rect, 0.3, None) rect = tuple(prev_rect) cv2.rectangle(salProbColor, (rect[0], rect[1]), (rect[0] + rect[2], rect[1] + rect[3]), (0, 0, 255)) mask_frame = np.float32(np.dstack((zero, mask * 255, zero))) out_frame = cv2.addWeighted(np.float32(_frame), 0.6, mask_frame, 0.4, 0.0) #out_frame = np.uint8( bg_es.cur_frame* mask[:,:,None]) frame = np.hstack((salProbColor, out_frame)) frame = cv2.resize(frame, (0, 0), fx=0.25, fy=0.25) vidwriter.write(np.uint8(frame)) vidreader.close() vidwriter.close() if __name__ == "__main__": import sys if sys.argv.__len__() <= 1: print "input path not provided........." else: inp = sys.argv[1] out = "test_results/final.avi" vidreader = VideoReader(inp) vidwriter = VideoWriter(out, 2 * vidreader.width / 4, vidreader.height / 4) process(vidreader, vidwriter)