| import os |
| import re |
| import cv2 |
| import numpy as np |
| from glob import glob |
|
|
| from src.cyano import Cyanotype |
| from src.mono_alternative import MonoAlternative |
|
|
| print('Fitting models...') |
|
|
| models = { |
| 'cyanotype_full': Cyanotype(), |
| 'cyanotype_mono': MonoAlternative('cyanotype_mono'), |
| 'salt': MonoAlternative('salt'), |
| 'platinum': MonoAlternative('platinum'), |
| } |
|
|
|
|
| def get_suffix_number(directory): |
| files = glob(f'{directory}/*.png') |
| suffixes = [re.search(r'[0-9]+', f) for f in files] |
| return max([int(s.group()) for s in suffixes if s] + [0]) + 1 |
|
|
|
|
| def update_patch(process_name, colorpatch): |
| model = models[process_name] |
| model.update_patch(colorpatch) |
| model.fit_model() |
|
|
|
|
| def predict_img(process_name, img): |
| out_dir = f'outputs/{process_name}' |
| if not os.path.exists(out_dir): |
| os.makedirs(out_dir) |
|
|
| suf = get_suffix_number(out_dir) |
|
|
| model = models[process_name] |
|
|
| if process_name != 'cyanotype_full': |
| img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) |
|
|
| pred_img = model.predict_img(img) |
| out_path = f'{out_dir}/linear_{suf}.png' |
| cv2.imwrite(out_path, pred_img) |
|
|
| return model.predict_img(pred_img) |
|
|
|
|
| def optimize_img(process_name, img): |
| out_dir = f'outputs/{process_name}' |
| if not os.path.exists(out_dir): |
| os.makedirs(out_dir) |
|
|
| suf = get_suffix_number(out_dir) |
|
|
| model = models[process_name] |
|
|
| if process_name != 'cyanotype_full': |
| img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) |
|
|
| x0, opt_img = model.tf_optimize(img) |
|
|
| out_path = f'{out_dir}/opt_{suf}.png' |
| cv2.imwrite(out_path, opt_img) |
| out_path = f'{out_dir}/x0_{suf}.png' |
| cv2.imwrite(out_path, x0) |
|
|
| return x0.astype(np.uint8), opt_img.astype(np.uint8) |
|
|