v8hid commited on
Commit
6171e4c
1 Parent(s): d263fd7

Helper functions

Browse files
Files changed (3) hide show
  1. helpers/__init__.py +0 -0
  2. helpers/image.py +50 -0
  3. helpers/video.py +39 -0
helpers/__init__.py ADDED
File without changes
helpers/image.py ADDED
@@ -0,0 +1,50 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ from PIL import Image
2
+ import requests
3
+ import numpy as np
4
+
5
+ def image_grid(imgs, rows, cols):
6
+ assert len(imgs) == rows*cols
7
+
8
+ w, h = imgs[0].size
9
+ grid = Image.new('RGB', size=(cols*w, rows*h))
10
+ grid_w, grid_h = grid.size
11
+
12
+ for i, img in enumerate(imgs):
13
+ grid.paste(img, box=(i%cols*w, i//cols*h))
14
+ return grid
15
+
16
+ def shrink_and_paste_on_blank(current_image, mask_width):
17
+ """
18
+ Decreases size of current_image by mask_width pixels from each side,
19
+ then adds a mask_width width transparent frame,
20
+ so that the image the function returns is the same size as the input.
21
+ :param current_image: input image to transform
22
+ :param mask_width: width in pixels to shrink from each side
23
+ """
24
+
25
+ height = current_image.height
26
+ width = current_image.width
27
+
28
+ #shrink down by mask_width
29
+ prev_image = current_image.resize((height-2*mask_width,width-2*mask_width))
30
+ prev_image = prev_image.convert("RGBA")
31
+ prev_image = np.array(prev_image)
32
+
33
+ #create blank non-transparent image
34
+ blank_image = np.array(current_image.convert("RGBA"))*0
35
+ blank_image[:,:,3] = 1
36
+
37
+ #paste shrinked onto blank
38
+ blank_image[mask_width:height-mask_width,mask_width:width-mask_width,:] = prev_image
39
+ prev_image = Image.fromarray(blank_image)
40
+
41
+ return prev_image
42
+
43
+ def load_img(address, res=(512, 512)):
44
+ if address.startswith('http://') or address.startswith('https://'):
45
+ image = Image.open(requests.get(address, stream=True).raw)
46
+ else:
47
+ image = Image.open(address)
48
+ image = image.convert('RGB')
49
+ image = image.resize(res, resample=Image.LANCZOS)
50
+ return image
helpers/video.py ADDED
@@ -0,0 +1,39 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import cv2
2
+ import numpy as np
3
+
4
+
5
+ def write_video(file_path, frames, fps, reversed=True, start_frame_dupe_amount=15, last_frame_dupe_amount=30):
6
+ """
7
+ Writes frames to an mp4 video file
8
+ :param file_path: Path to output video, must end with .mp4
9
+ :param frames: List of PIL.Image objects
10
+ :param fps: Desired frame rate
11
+ :param reversed: if order of images to be reversed (default = True)
12
+ """
13
+ if reversed == True:
14
+ frames.reverse()
15
+
16
+ w, h = frames[0].size
17
+ fourcc = cv2.VideoWriter_fourcc('m', 'p', '4', 'v')
18
+ # fourcc = cv2.VideoWriter_fourcc('h', '2', '6', '4')
19
+ # fourcc = cv2.VideoWriter_fourcc(*'avc1')
20
+ writer = cv2.VideoWriter(file_path, fourcc, fps, (w, h))
21
+
22
+ # start frame duplicated
23
+ for x in range(start_frame_dupe_amount):
24
+ np_frame = np.array(frames[0].convert('RGB'))
25
+ cv_frame = cv2.cvtColor(np_frame, cv2.COLOR_RGB2BGR)
26
+ writer.write(cv_frame)
27
+
28
+ for frame in frames:
29
+ np_frame = np.array(frame.convert('RGB'))
30
+ cv_frame = cv2.cvtColor(np_frame, cv2.COLOR_RGB2BGR)
31
+ writer.write(cv_frame)
32
+
33
+ # last frame duplicated
34
+ for x in range(last_frame_dupe_amount):
35
+ np_frame = np.array(frames[len(frames) - 1].convert('RGB'))
36
+ cv_frame = cv2.cvtColor(np_frame, cv2.COLOR_RGB2BGR)
37
+ writer.write(cv_frame)
38
+
39
+ writer.release()