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
예제 #2
0
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