def find_scene_boundary(self, path, cur_video, start, end, k): starttime = datetime.now() pre_img = imagetool.fast_readrgbfile(path + cur_video[start]) pre_score = -1 scene_list = [] scene_start = 0 scene_end = 0 for i in range(start + k, end, k): cur_img = imagetool.fast_readrgbfile(path + cur_video[i]) cur_score = imagetool.get_img_diff(pre_img, cur_img) print("Similarity score (img{}, img{}): {}".format( i - k, i, cur_score)) if (k == 1): if (cur_score < 0.5): scene_list.append([scene_start, i - 1]) scene_start = i elif (pre_score != -1 and cur_score < 0.6 and abs(cur_score - pre_score) >= 0.2): scene_end = self.find_conner(path, cur_video, i - k, i) scene_list.append([scene_start, scene_end]) scene_start = scene_end + 1 i = scene_start pre_img = imagetool.fast_readrgbfile(path + cur_video[i]) pre_score = -1 continue pre_img = cur_img pre_score = cur_score if (k > 1 and scene_end < end - 1): scene_list.append([scene_start, end - 1]) print("Time: {}".format(datetime.now() - starttime)) return scene_list
def test_get_similar_scores(path1, path2): img1 = imagetool.readrgbfile(path1) img2 = imagetool.readrgbfile(path2) score = imagetool.get_img_diff(img2, img1) cv2.imshow("img1", cv2.cvtColor(img1, cv2.COLOR_RGB2BGR)) cv2.imshow("img2", cv2.cvtColor(img2, cv2.COLOR_RGB2BGR)) print("Similar score: {}".format(score)) cv2.waitKey(0) cv2.destroyAllWindows()
def video_postprocessing(self, videos_scene, key_frames): print("---- Begin post-processing ----") final_videos_scene = [] final_key_frames = [] # case 1: compare(1, 3) if similar merge(1...3) otherwise compare(1, 2) offset = 0 for video in videos_scene: i = 0 cur_video_scene = [] while (i < len(video)): # each video frames scan neighbor and merge similar scene inc = 0 if (i + 2 < len(video)): cur_img = key_frames[i + offset] next_img = key_frames[i + 1 + offset] next2_img = key_frames[i + 2 + offset] similar2 = imagetool.get_img_diff(cur_img, next2_img) similar1 = imagetool.get_img_diff(cur_img, next_img) print("similar1 {} similar2 {}".format(similar1, similar2)) if similar2 >= 0.5: cur_video_scene.append([video[i][0], video[i + 2][1]]) print("merge {} with {}".format( i + offset, i + 2 + offset)) inc = 3 elif similar1 >= 0.5: cur_video_scene.append([video[i][0], video[i + 1][1]]) print("merge {} with {}".format( i + offset, i + 1 + offset)) inc = 2 else: cur_video_scene.append([video[i][0], video[i][1]]) inc = 1 else: cur_video_scene.append([video[i][0], video[i][1]]) inc = 1 final_key_frames.append(key_frames[i + offset]) i += inc final_videos_scene.append(cur_video_scene) offset += len(video) print(final_videos_scene) return final_videos_scene, final_key_frames
def find_conner(self, path, cur_video, start, end): pre_img = imagetool.fast_readrgbfile(path + cur_video[start]) pre_score = 1 min_score = 1 min_index = end for i in range(start + 1, end + 1): cur_img = imagetool.fast_readrgbfile(path + cur_video[i]) cur_score = imagetool.get_img_diff(pre_img, cur_img) # print("Post-processing (img{}, img{}): {}".format(i-1, i, cur_score)) if (min_score > cur_score): min_score = cur_score min_index = i - 1 pre_img = cur_img pre_score = cur_score return min_index