Download PolyuColor/run.py from createcolor/NPRC24: direct link, hf CLI and curl.
- Browser
- Download file 4.84 kB
-
https://huggingface.co/createcolor/NPRC24/resolve/main/PolyuColor/run.py
- Command line
-
hf download hf://createcolor/NPRC24/PolyuColor/run.py
-
curl -L -o run.py https://huggingface.co/createcolor/NPRC24/resolve/main/PolyuColor/run.py
4.84 kB
| import argparse | |
| import os | |
| import time | |
| import warnings | |
| from pathlib import Path | |
| import cv2 | |
| import numpy as np | |
| from tqdm import tqdm | |
| from raw_prc_pipeline import (expected_img_ext, expected_landscape_img_height, | |
| expected_landscape_img_width) | |
| from raw_prc_pipeline.pipeline import (PipelineExecutor, | |
| RawProcessingPipelineDemo) | |
| from utils import fraction_from_json, json_read | |
| warnings.filterwarnings("ignore") | |
| def parse_args(): | |
| parser = argparse.ArgumentParser( | |
| description= | |
| 'Demo script for processing PNG images with given metadata files.') | |
| parser.add_argument( | |
| '-p', | |
| '--png_dir', | |
| type=str, | |
| default='data', | |
| help='Path of the directory containing PNG images with metadata files') | |
| parser.add_argument( | |
| '-o', | |
| '--out_dir', | |
| type=str, | |
| default=None, | |
| help= | |
| 'Path to the directory where processed images will be saved. Images will be saved in JPG format.' | |
| ) | |
| parser.add_argument( | |
| '-ie', | |
| '--illumination_estimation', | |
| type=str, | |
| default='gw', | |
| help= | |
| 'Options for illumination estimation algorithms: "gw", "wp", "sog", "iwp".' | |
| ) | |
| parser.add_argument( | |
| '-tm', | |
| '--tone_mapping', | |
| type=str, | |
| default='Storm', | |
| help= | |
| 'Options for tone mapping algorithms: "Base", "Flash", "Storm", "Linear", "Drago", "Mantiuk", "Reinhard".' | |
| ) | |
| parser.add_argument( | |
| '-n', | |
| '--denoising_flg', | |
| action='store_false', | |
| help= | |
| 'Denoising flag. By default resulted images will be denoised with some default parameters.' | |
| ) | |
| parser.add_argument('-m', | |
| '--camera_matrix', | |
| type=float, | |
| nargs=9, | |
| default=[ | |
| 1.06835938, -0.29882812, -0.14257812, -0.43164062, | |
| 1.35546875, 0.05078125, -0.1015625, 0.24414062, | |
| 0.5859375 | |
| ], | |
| help='Mean color matrix of Hauwei Mate 40 Pro') | |
| args = parser.parse_args() | |
| if args.out_dir is None: | |
| args.out_dir = args.png_dir | |
| return args | |
| class PNGProcessingDemo: | |
| def __init__(self, ie_method, tone_mapping, denoising_flg, camera_matrix, | |
| save_dir): | |
| self.camera_matrix = camera_matrix | |
| self.save_dir = save_dir | |
| self.pipeline_demo = RawProcessingPipelineDemo( | |
| illumination_estimation=ie_method, | |
| denoise_flg=denoising_flg, | |
| tone_mapping=tone_mapping, | |
| out_landscape_height=expected_landscape_img_height, | |
| out_landscape_width=expected_landscape_img_width) | |
| self.process_times = [] | |
| def __call__(self, png_path: Path, out_path: Path): | |
| # parse raw img | |
| raw_image = cv2.imread(str(png_path), cv2.IMREAD_UNCHANGED) | |
| # parse metadata | |
| metadata = json_read(png_path.with_suffix('.json'), | |
| object_hook=fraction_from_json) | |
| start_time = time.perf_counter() | |
| # executing img pipelinex | |
| pipeline_exec = PipelineExecutor(raw_image, | |
| metadata, | |
| os.path.basename( | |
| str(png_path)).split('.')[0], | |
| self.pipeline_demo, | |
| save_dir=self.save_dir) | |
| # process img | |
| output_image = pipeline_exec() | |
| end_time = time.perf_counter() | |
| self.process_times.append(end_time - start_time) | |
| # save results | |
| output_image = cv2.cvtColor(output_image, cv2.COLOR_RGB2BGR) | |
| cv2.imwrite(str(out_path), output_image, | |
| [cv2.IMWRITE_JPEG_QUALITY, 100]) | |
| def main(png_dir, out_dir, illumination_estimation, tone_mapping, | |
| denoising_flg, camera_matrix): | |
| png_dir = Path(png_dir) | |
| out_dir = Path(out_dir) | |
| out_dir.mkdir(exist_ok=True) | |
| png_paths = list(png_dir.glob('*.png')) | |
| out_paths = [ | |
| out_dir / png_path.with_suffix(expected_img_ext).name | |
| for png_path in png_paths | |
| ] | |
| png_processor = PNGProcessingDemo(illumination_estimation, tone_mapping, | |
| denoising_flg, camera_matrix, | |
| str(out_dir)) | |
| for png_path, out_path in tqdm(zip(png_paths, out_paths), | |
| total=len(png_paths)): | |
| png_processor(png_path, out_path) | |
| print("Average processing time: {:.2f}s".format( | |
| np.mean(png_processor.process_times))) | |
| if __name__ == '__main__': | |
| args = parse_args() | |
| main(**vars(args)) | |