| import os |
| import time |
| import random |
| import glog as log |
| import numpy as np |
| from typing import List |
|
|
| from utils.io import read_image, write_processed_as_jpg, write_illuminant_estimation |
| import ips |
|
|
| expected_landscape_img_height = 768 |
| expected_landscape_img_width = 1024 |
|
|
|
|
| |
| |
| |
| |
| |
| def single_run( |
| base_dir: str, |
| img_names: List, |
| out_dir: str, |
| wb_method: str = "iwp", |
| tmo_type: str = "nite", |
| tv_weight: int = 20 |
| ): |
| log.info( |
| "Parameters:\n" |
| f"WB Method: {wb_method}\n" |
| f"TMO Type: {tmo_type}\n" |
| f"Luma TV weight : {tv_weight}\n" |
| ) |
| os.makedirs("./" + out_dir, exist_ok=True) |
| |
| infer_times = list() |
|
|
| for i, img_name in enumerate(img_names): |
| p = round(100 * (i+1) / len(img_names), 2) |
| log.info(f"({p:.2f}%) Processing {i+1} of {len(img_names)} images, image name: {img_name}") |
| path = os.path.join(base_dir, img_name) |
| assert os.path.exists(path) |
|
|
| raw_image, metadata = read_image(path) |
| save_ill_est = metadata["wb_estimation"] is None |
| metadata["exp_height"] = expected_landscape_img_height |
| metadata["exp_width"] = expected_landscape_img_width |
| metadata["wb_method"] = wb_method |
| metadata["tv_weight"] = tv_weight |
| metadata["tmo_type"] = tmo_type |
| if tmo_type.lower() in ["flash", "storm"]: |
| metadata["tmo_scale"] = 10 |
| if tmo_type.lower() in ["storm", "nite"]: |
| metadata["tmo_kernels"] = (1, 2, 4, 8, 16, 32) |
| metadata["tmo_do_leap"] = True |
| metadata["global_mc_beta"] = 1.2 |
| metadata["scc_alpha"] = 0.5 |
| metadata["scc_lambda"] = 0.9 |
| |
| out_path = os.path.join(out_dir, img_name.replace("png", "jpg")) |
| if os.path.exists(out_path): |
| continue |
| start_time = time.time() |
| out = ips.process(raw_image=raw_image, metadata=metadata) |
| end_time = time.time() |
| infer_times.append(end_time - start_time) |
|
|
| if save_ill_est: |
| ill_est_path = os.path.join(out_dir, img_name.replace(".png", "_wb.json")) |
| write_illuminant_estimation(metadata["wb_estimation"], ill_est_path) |
| write_processed_as_jpg(out, out_path) |
| print(f"Average inference time: {np.mean(infer_times)} seconds") |
|
|
|
|
| if __name__ == "__main__": |
| import argparse |
| parser = argparse.ArgumentParser(description='Night Photography Rendering Challenge - Team VGL OzU') |
| parser.add_argument('-d', '--data_dir', type=str, default="data/", help="data directory") |
| parser.add_argument('-o', '--output_dir', type=str, default="results/", help="output directory") |
| parser.add_argument('-s', '--submission_name', type=str, default="vgl-ozu", help='submission name') |
| args = parser.parse_args() |
|
|
| data_dir = args.data_dir |
| if not os.path.exists(data_dir) or len(os.listdir(data_dir)) == 0: |
| log.info(f"Data does not exist, please put the data from given link into '{data_dir}'...") |
| os.makedirs(data_dir, exist_ok=True) |
| log.info("After this, please re-run.") |
| else: |
| base_dir = args.data_dir |
| out_dir = args.output_dir |
| img_names = os.listdir(base_dir) |
| img_names = [img_name for img_name in img_names if ".png" in img_name] |
| single_run(base_dir, img_names, out_dir) |