Download IIR-Lab/dataloader/dataset.py from createcolor/NPRC24: direct link, hf CLI and curl.
- Browser
- Download file 3.15 kB
-
https://huggingface.co/createcolor/NPRC24/resolve/main/IIR-Lab/dataloader/dataset.py
- Command line
-
hf download hf://createcolor/NPRC24/IIR-Lab/dataloader/dataset.py
-
curl -L -o dataset.py https://huggingface.co/createcolor/NPRC24/resolve/main/IIR-Lab/dataloader/dataset.py
3.15 kB
| import os | |
| import numpy as np | |
| import random | |
| import torch | |
| from torch.utils.data import Dataset | |
| from torchvision import transforms | |
| import cv2 | |
| import sys | |
| from pathlib import Path | |
| import glob | |
| sys.path.append('..') | |
| # from utils_ours import util | |
| from dataloader.data_utils import rggb_raw, random_crop, Rawread, path_replace, bayer2raw, read_rawpng | |
| from natsort import ns, natsorted | |
| import time | |
| from tqdm import tqdm | |
| from multiprocessing import Pool | |
| import pdb | |
| import json | |
| from fractions import Fraction | |
| from pathlib import Path | |
| from json import JSONEncoder | |
| from exifread.utils import Ratio | |
| class imageSet(Dataset): | |
| def __init__(self,args): | |
| super(imageSet).__init__() | |
| self.args = args | |
| self.test_dir= args.test_dir | |
| self.debug = args.debug | |
| self.paths = [] | |
| for file in os.listdir(self.test_dir): | |
| if '.png' in file: | |
| self.img_path = os.path.join(self.test_dir, file) | |
| self.json_path = self.img_path.replace('png', 'json') | |
| self.paths.append(dict([(f"{'img_path'}", self.img_path), (f"{'json_path'}", self.json_path)])) | |
| def __getitem__(self, index): | |
| img_path = self.paths[index]['img_path'] | |
| json_path = self.paths[index]['json_path'] | |
| metadata = json_read(json_path, object_hook=fraction_from_json) | |
| input_img = read_rawpng(img_path, metadata) | |
| return {'input': input_img, 'json_path': json_path} | |
| def __len__(self): | |
| return len(self.paths) | |
| def normalize(raw_image, black_level, white_level): | |
| if type(black_level) is list and len(black_level) == 1: | |
| black_level = float(black_level[0]) | |
| if type(white_level) is list and len(white_level) == 1: | |
| white_level = float(white_level[0]) | |
| black_level_mask = black_level | |
| if type(black_level) is list and len(black_level) == 4: | |
| if type(black_level[0]) is Ratio: | |
| black_level = ratios2floats(black_level) | |
| if type(black_level[0]) is Fraction: | |
| black_level = fractions2floats(black_level) | |
| black_level_mask = np.zeros(raw_image.shape) | |
| idx2by2 = [[0, 0], [0, 1], [1, 0], [1, 1]] | |
| step2 = 2 | |
| for i, idx in enumerate(idx2by2): | |
| black_level_mask[idx[0]::step2, idx[1]::step2] = black_level[i] | |
| normalized_image = raw_image.astype(np.float32) - black_level_mask | |
| # if some values were smaller than black level | |
| normalized_image[normalized_image < 0] = 0 | |
| normalized_image = normalized_image / (white_level - black_level_mask) | |
| return normalized_image | |
| def ratios2floats(ratios): | |
| floats = [] | |
| for ratio in ratios: | |
| floats.append(float(ratio.num) / ratio.den) | |
| return floats | |
| def fractions2floats(fractions): | |
| floats = [] | |
| for fraction in fractions: | |
| floats.append(float(fraction.numerator) / fraction.denominator) | |
| return floats | |
| def json_read(fname, **kwargs): | |
| with open(fname) as j: | |
| data = json.load(j, **kwargs) | |
| return data | |
| def fraction_from_json(json_object): | |
| if 'Fraction' in json_object: | |
| return Fraction(*json_object['Fraction']) | |
| return json_object | |