shikibu9419's picture
Add production codes
f1d6080
raw
history blame
1.61 kB
import os
import re
from glob import glob
import cv2
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, opt_img