File size: 2,861 Bytes
59b2a81
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
'''
    This repo is to combine multiple generated images with same index together 
'''

import os, shutil, sys
import imageio
import math
import cv2
from PIL import Image
import collections
import numpy as np


if __name__ == "__main__":

    # Basic setting
    data_paths = [
                    "human_evaluation_v3_V_raw_prompt",
                    "human_evaluation_v3_VG_raw_prompt_no_sam",
                    "human_evaluation_v3_VL_ambiguous_prompt",

                    "../datasets_rob/Bridge_human_evaluation",

                    "human_evaluation_v3_VL_raw_prompt",
                    "human_evaluation_v3_VGL_raw_prompt_no_sam",
                    "human_evaluation_v3_VGL_ambiguous_prompt_no_sam",
                ]
    store_path = "combined_results_human_evaluation"
    sample_data_path = data_paths[0]
    gif_per_row = 4     # Number of GIF files per row


    # Create folder
    if os.path.exists(store_path):
        shutil.rmtree(store_path)
    os.makedirs(store_path)


    # Iterate the sample
    for instance_idx, sub_folder_name in enumerate(sorted(os.listdir(sample_data_path))):
        print("we are processing ", sub_folder_name)
        
        collected_gif_paths = []
        for data_path in data_paths:
            collected_gif_paths.append(os.path.join(data_path, sub_folder_name, 'combined.gif'))

        # Merge frames together
        rows = math.ceil(len(collected_gif_paths) / gif_per_row)
        cols = gif_per_row

        # Read all input GIFs and find maximum dimensions
        gifs = []
        max_width, max_height = 0, 0
        for path in collected_gif_paths:
            gif = imageio.mimread(path)
            max_width = max(max_width, gif[0].shape[1])
            max_height = max(max_height, gif[0].shape[0])
            gifs.append(gif)

            # Create blank canvas for concatenated GIF
            frames_length = len(gifs[0])
            canvas_width = max_width * cols
            canvas_height = max_height * rows
            canvas = np.zeros((frames_length, canvas_height, canvas_width, 3), dtype=np.uint8)


        # push each frame into the canvas placeholder   
        gif_index = 0
        for row in range(rows):
            for col in range(cols):
                gif = gifs[gif_index]
                gif_height, gif_width, _ = gif[0].shape
                start_y = row * max_height
                start_x = col * max_width
                for i in range(frames_length):
                    canvas[i, start_y:start_y+gif_height, start_x:start_x+gif_width, :] = gif[i]

                # Update index
                gif_index += 1
                if gif_index == len(collected_gif_paths):
                    break


        # Write the concatenated GIF
        imageio.mimsave(os.path.join(store_path, sub_folder_name + ".gif"), canvas, duration=0.05, quality=100)