HikariDawn commited on
Commit
d26bbd5
1 Parent(s): 8f3d49d

feat: auto downsample if it is oversize

Browse files
.gitignore CHANGED
@@ -23,6 +23,8 @@ tmp/*
23
  *.zip
24
  *.mp4
25
  *.csv
 
 
26
 
27
  !__assets__/lr_inputs/*
28
  !__assets__/*
 
23
  *.zip
24
  *.mp4
25
  *.csv
26
+ *.jpeg
27
+ *.webp
28
 
29
  !__assets__/lr_inputs/*
30
  !__assets__/*
__assets__/lr_inputs/naruto.jpg ADDED
app.py CHANGED
@@ -54,11 +54,12 @@ def inference(img_path, model_name):
54
 
55
 
56
  # In default, we will automatically use crop to match 4x size
57
- super_resolved_img = super_resolve_img(generator, img_path, output_path=None, weight_dtype=weight_dtype, crop_for_4x=True)
58
  store_name = str(time.time()) + ".png"
59
  save_image(super_resolved_img, store_name)
60
  outputs = cv2.imread(store_name)
61
  outputs = cv2.cvtColor(outputs, cv2.COLOR_RGB2BGR)
 
62
 
63
  return outputs
64
 
@@ -78,6 +79,8 @@ if __name__ == '__main__':
78
 
79
  APISR aims at restoring and enhancing low-quality low-resolution anime images and video sources with various degradations from real-world scenarios.
80
 
 
 
81
  If APISR is helpful, please help star the GitHub Repo. Thanks!
82
  """
83
 
@@ -112,6 +115,7 @@ if __name__ == '__main__':
112
  ["__assets__/lr_inputs/image-00440.png"],
113
  ["__assets__/lr_inputs/image-00164.jpg"],
114
  ["__assets__/lr_inputs/img_eva.jpeg"],
 
115
  ],
116
  [input_image],
117
  )
 
54
 
55
 
56
  # In default, we will automatically use crop to match 4x size
57
+ super_resolved_img = super_resolve_img(generator, img_path, output_path=None, weight_dtype=weight_dtype, downsample_threshold=720, crop_for_4x=True)
58
  store_name = str(time.time()) + ".png"
59
  save_image(super_resolved_img, store_name)
60
  outputs = cv2.imread(store_name)
61
  outputs = cv2.cvtColor(outputs, cv2.COLOR_RGB2BGR)
62
+ os.remove(store_name)
63
 
64
  return outputs
65
 
 
79
 
80
  APISR aims at restoring and enhancing low-quality low-resolution anime images and video sources with various degradations from real-world scenarios.
81
 
82
+ ### Note: Due to memory restriction, all images whose short side is over 720 pixel will be downsampled to 720 pixel with the same aspect ratio. E.g., 1920x1080 -> 1280x720
83
+
84
  If APISR is helpful, please help star the GitHub Repo. Thanks!
85
  """
86
 
 
115
  ["__assets__/lr_inputs/image-00440.png"],
116
  ["__assets__/lr_inputs/image-00164.jpg"],
117
  ["__assets__/lr_inputs/img_eva.jpeg"],
118
+ ["__assets__/lr_inputs/naruto.jpg"],
119
  ],
120
  [input_image],
121
  )
test_code/inference.py CHANGED
@@ -19,19 +19,30 @@ from test_code.test_utils import load_grl, load_rrdb, load_cunet
19
 
20
 
21
  @torch.no_grad # You must add these time, else it will have Out of Memory
22
- def super_resolve_img(generator, input_path, output_path=None, weight_dtype=torch.float32, crop_for_4x=True):
23
  ''' Super Resolve a low resolution image
24
  Args:
25
  generator (torch): the generator class that is already loaded
26
  input_path (str): the path to the input lr images
27
  output_path (str): the directory to store the generated images
28
  weight_dtype (bool): the weight type (float32/float16)
 
29
  crop_for_4x (bool): whether we crop the lr images to match 4x scale (needed for some situation)
30
  '''
31
  print("Processing image {}".format(input_path))
32
 
33
  # Read the image and do preprocess
34
  img_lr = cv2.imread(input_path)
 
 
 
 
 
 
 
 
 
 
35
  # Crop if needed
36
  if crop_for_4x:
37
  h, w, _ = img_lr.shape
@@ -139,12 +150,4 @@ if __name__ == "__main__":
139
  # In default, we will automatically use crop to match 4x size
140
  super_resolve_img(generator, input_dir, output_path, weight_dtype, crop_for_4x=True)
141
 
142
-
143
-
144
-
145
-
146
-
147
-
148
-
149
-
150
 
 
19
 
20
 
21
  @torch.no_grad # You must add these time, else it will have Out of Memory
22
+ def super_resolve_img(generator, input_path, output_path=None, weight_dtype=torch.float32, downsample_threshold=720, crop_for_4x=True):
23
  ''' Super Resolve a low resolution image
24
  Args:
25
  generator (torch): the generator class that is already loaded
26
  input_path (str): the path to the input lr images
27
  output_path (str): the directory to store the generated images
28
  weight_dtype (bool): the weight type (float32/float16)
29
+ downsample_threshold (int): the threshold of height/width (short side) to downsample the input
30
  crop_for_4x (bool): whether we crop the lr images to match 4x scale (needed for some situation)
31
  '''
32
  print("Processing image {}".format(input_path))
33
 
34
  # Read the image and do preprocess
35
  img_lr = cv2.imread(input_path)
36
+ h, w, c = img_lr.shape
37
+
38
+
39
+ # Downsample if needed
40
+ short_side = min(h, w)
41
+ if downsample_threshold != -1 and short_side > downsample_threshold:
42
+ resize_ratio = short_side / downsample_threshold
43
+ img_lr = cv2.resize(img_lr, (int(w/resize_ratio), int(h/resize_ratio)), interpolation = cv2.INTER_LINEAR)
44
+
45
+
46
  # Crop if needed
47
  if crop_for_4x:
48
  h, w, _ = img_lr.shape
 
150
  # In default, we will automatically use crop to match 4x size
151
  super_resolve_img(generator, input_dir, output_path, weight_dtype, crop_for_4x=True)
152
 
 
 
 
 
 
 
 
 
153