diff options
Diffstat (limited to 'scripts')
| -rw-r--r-- | scripts/builders/flow-dir.py | 2 | ||||
| -rwxr-xr-x | scripts/builders/mogrify-dir.py | 119 | ||||
| -rw-r--r-- | scripts/flow/diff.py | 39 | ||||
| -rw-r--r-- | scripts/flow/flow-diff.py | 82 | ||||
| -rw-r--r-- | scripts/flow/flow-dir.py | 81 | ||||
| -rw-r--r-- | scripts/flow/flow-warp-recflow-recursive-fwd.py | 138 | ||||
| -rw-r--r-- | scripts/flow/flow-warp-recflow.py | 139 | ||||
| -rw-r--r-- | scripts/flow/flow-warp-recursive.py | 82 | ||||
| -rw-r--r-- | scripts/flow/flow-warp.py | 82 |
9 files changed, 762 insertions, 2 deletions
diff --git a/scripts/builders/flow-dir.py b/scripts/builders/flow-dir.py index 620ba32..b59a0ac 100644 --- a/scripts/builders/flow-dir.py +++ b/scripts/builders/flow-dir.py @@ -62,7 +62,6 @@ for i,fn in enumerate(sorted(os.listdir(work_dir))): wd = "train/" if i == 1: - prev_hsv = np.copy(hsv) prev_bgr = np.copy(bgr) continue @@ -70,6 +69,5 @@ for i,fn in enumerate(sorted(os.listdir(work_dir))): cv2.imwrite(render_dir + "B/" + wd + ren, bgr) # copyfile(work_dir + fn, render_dir + "B/" + wd + ren) prev = im - prev_hsv = np.copy(hsv) prev_bgr = np.copy(bgr) diff --git a/scripts/builders/mogrify-dir.py b/scripts/builders/mogrify-dir.py new file mode 100755 index 0000000..b7370f5 --- /dev/null +++ b/scripts/builders/mogrify-dir.py @@ -0,0 +1,119 @@ +#!/Users/user/anaconda/envs/cv/bin/python + +import os + +import sys +sys.path.insert(0, '/Users/user/neural/pix2pix') +from options.dataset_options import DatasetOptions + +from shutil import move, copyfile +from PIL import Image, ImageOps +from shutil import copyfile, rmtree +import glob +import numpy as np +import subprocess +import cv2 + +opt = DatasetOptions().parse() + +in_dir = opt.in_dir +out_dir = opt.out_dir +out_base = os.path.basename(out_dir) + +if os.path.exists(out_dir): + rmtree(out_dir) + +os.makedirs(out_dir) +if opt.split is True: + os.makedirs(out_dir + "A/") + os.makedirs(out_dir + "A/train/") + os.makedirs(out_dir + "A/test/") + os.makedirs(out_dir + "A/val/") + if opt.ab is True: + os.makedirs(out_dir + "B/") + os.makedirs(out_dir + "B/train/") + os.makedirs(out_dir + "B/test/") + os.makedirs(out_dir + "B/val/") + +file = open(os.path.join(out_dir, "opt.txt"), "w") +for arg in vars(opt): + file.write("{}: {}\n".format(arg, getattr(opt, arg))) +file.close() + +images = sorted(glob.glob(os.path.join(in_dir, '*.*g'))) +image_count = len(images) +print("{}, {} images => {}".format(in_dir, image_count, out_base)) +for i, fn in enumerate(images): + pil_image = Image.open(fn).convert('RGB') + img = np.array(pil_image) + img = img[:, :, ::-1].copy() + + out_file = "frame_{:05d}.png".format(i) + + if i > 0 and (i % 100) == 0: + print("{}...".format(i)) + + lab = cv2.cvtColor(img, cv2.COLOR_BGR2LAB) + l, a, b = cv2.split(lab) + + if opt.clahe is True: + clahe = cv2.createCLAHE(clipLimit=opt.clip_limit, tileGridSize=(8,8)) + l = clahe.apply(l) + + if opt.brightness_gradient is True: + l = np.add(l.astype('float64'), ((i / image_count) - 0.5) * opt.brightness_sigma) + np.clip(l, 0, 255, out=l) + l = l.astype('uint8') + + if opt.brightness_gradient is True or opt.clahe is True: + limg = cv2.merge((l,a,b)) + img = cv2.cvtColor(limg, cv2.COLOR_LAB2BGR) + + if opt.posterize is True: + img = cv2.pyrMeanShiftFiltering(img, opt.spatial_window, opt.color_window) + if opt.grayscale is True: + img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) + if opt.blur != 0: + img = cv2.GaussianBlur(img, (opt.blur, opt.blur), opt.blur_sigma) + if opt.canny is True: + img = cv2.Canny(img, opt.canny_lo, opt.canny_hi) + + if opt.split is True: + if (i % 10) == 3: + wd = "test/" + elif (i % 10) == 6: + wd = "val/" + else: + wd = "train/" + + cv2.imwrite(out_dir + "A/" + wd + out_file, img) + if opt.ab is True: + copyfile(fn, out_dir + "B/" + wd + out_file) + + else: + cv2.imwrite(os.path.join(out_dir, out_file), img) + +print("{}...".format(image_count)) + +if opt.mov: + print("ffmpeg...") + mov_file = "{}.mp4".format(out_base) + cmd = ("ffmpeg", + "-loglevel", "quiet", + "-i", os.path.join(out_dir, "frame_%05d.png"), + "-y", "-c:v", "libx264", "-vf", "fps=30", "-pix_fmt", "yuv420p", + mov_file) + process = subprocess.Popen(cmd, stdout=subprocess.PIPE) + output, error = process.communicate() + + if opt.scp: + print("scp...") + cmd = ("scp", mov_file, opt.scp) + process = subprocess.Popen(cmd, stdout=subprocess.PIPE) + output, error = process.communicate() + + print("https://asdf.us/neural/" + mov_file) + + # cmd = ("mplayer", mov_file) + # process = subprocess.Popen(cmd, stdout=subprocess.PIPE) + # output, error = process.communicate() diff --git a/scripts/flow/diff.py b/scripts/flow/diff.py new file mode 100644 index 0000000..555f2f7 --- /dev/null +++ b/scripts/flow/diff.py @@ -0,0 +1,39 @@ +#!python3 + +from PIL import Image +import numpy as np +import os +import cv2 + +dir = 'IMG_1734/' +diff_dir = dir + 'diff/' + +if not os.path.exists(diff_dir): + os.mkdir(diff_dir) + +files = sorted([i.name for i in os.scandir(dir) if os.path.isfile(dir + i.name) and not i.name.startswith('.')]) + +last_im = None +k = 0 +for i, fn in enumerate(files): + pil_image = Image.open(dir + fn).convert('RGB') + im = np.array(pil_image) + + tmp_im = im.copy().astype('float64') + print("{} {}".format(i, fn)) + if last_im is not None: + im = (last_im - tmp_im) + im = cv2.normalize(im, None, 0, 255, cv2.NORM_MINMAX) + image_pil = Image.fromarray(im.astype('uint8'), mode='RGB') + image_pil.save(diff_dir + "frame_{:05}.png".format(i)) + + last_im = tmp_im.astype('float64') + +def fade_images(a, b, n): + for j in range(60): + r = j / 60 + im = a * (r) + b * (1-r) + image_pil = Image.fromarray(im.astype('uint8'), mode='RGB') + image_pil.save(diff_dir + "frame_{:05}.png".format(j+k)) + k += 60 + diff --git a/scripts/flow/flow-diff.py b/scripts/flow/flow-diff.py new file mode 100644 index 0000000..4bd4465 --- /dev/null +++ b/scripts/flow/flow-diff.py @@ -0,0 +1,82 @@ +import os +import sys +from shutil import move, copyfile +from PIL import Image, ImageOps +from shutil import copyfile, rmtree +import numpy as np +import cv2 + +work_dir = "IMG_1734/" +render_dir = "IMG_1734/flowdiff/" + +if os.path.exists(render_dir): + rmtree(render_dir) + +os.makedirs(render_dir) +os.makedirs(render_dir + 'prev/') +os.makedirs(render_dir + 'next/') + +def warp_flow(img, flow): + h, w = flow.shape[:2] + flow = -flow + flow[:,:,0] += np.arange(w) + flow[:,:,1] += np.arange(h)[:,np.newaxis] + res = cv2.remap(img, flow, None, cv2.INTER_LINEAR) + return res + +hsv = [] +prev = None +prev_bgr = None +gray = None +prev_gray = None + +for i,fn in enumerate(sorted(os.listdir(work_dir))): + if os.path.basename(fn).startswith('.') or not os.path.isfile(work_dir + fn): + continue + + # load image and convert to grayscale + pil_image = Image.open(work_dir + fn).convert('RGB') + im = np.array(pil_image) + im = im[:, :, ::-1].copy() + gray = cv2.cvtColor(im, cv2.COLOR_BGR2GRAY) + + # store first frame + if prev_gray is None: + prev = im + prev_gray = gray + #hsv = np.zeros((256,512,3)) + #hsv[...,1] = 255 + continue + + # compute optical flow + flow = cv2.calcOpticalFlowFarneback(prev_gray, gray, None, 0.5, 3, 15, 3, 5, 1.2, 0) + + #mag, ang = cv2.cartToPolar(flow[...,0], flow[...,1]) + #hsv[...,0] = ang * 180 / np.pi / 2 + #hsv[...,2] = cv2.normalize(mag, None, 0, 255, cv2.NORM_L2) + #bgr = cv2.cvtColor(hsv.astype('uint8'), cv2.COLOR_HSV2BGR) + + #if prev_bgr is None: + # prev_bgr = np.copy(bgr) + # continue + + #if (i % 10) == 3: + # wd = "test/" + #elif (i % 10) == 6: + # wd = "val/" + #else: + # wd = "train/" + + out_prev = warp_flow(prev, flow) + out_next = warp_flow(im, flow) + ren = "frame_{:05d}.png".format(i) + + #cv2.imwrite(render_dir + "A/" + wd + ren, prev_bgr) + #cv2.imwrite(render_dir + "B/" + wd + ren, bgr) + cv2.imwrite(render_dir + "prev/" + ren, out_prev) + cv2.imwrite(render_dir + "next/" + ren, out_next) + # copyfile(work_dir + fn, render_dir + "B/" + wd + ren) + prev = im + prev_gray = gray + #prev_bgr = np.copy(bgr) + diff --git a/scripts/flow/flow-dir.py b/scripts/flow/flow-dir.py new file mode 100644 index 0000000..60c1dd9 --- /dev/null +++ b/scripts/flow/flow-dir.py @@ -0,0 +1,81 @@ +import os +import sys +from shutil import move, copyfile +from PIL import Image, ImageOps +from shutil import copyfile, rmtree +import numpy as np +import cv2 + +work_dir = "IMG_1734/" +render_dir = "IMG_1734/diff/" + +if os.path.exists(render_dir): + rmtree(render_dir) + +os.makedirs(render_dir) +os.makedirs(render_dir + "A/") +os.makedirs(render_dir + "A/train/") +os.makedirs(render_dir + "A/test/") +os.makedirs(render_dir + "A/val/") +os.makedirs(render_dir + "B/") +os.makedirs(render_dir + "B/train/") +os.makedirs(render_dir + "B/test/") +os.makedirs(render_dir + "B/val/") +os.makedirs(render_dir + "out/") + +hsv = [] +prev = None +prev_bgr = None + +for i,fn in enumerate(sorted(os.listdir(work_dir))): + if os.path.basename(fn).startswith('.') or not os.path.isfile(work_dir + fn): + continue + + # load image and convert to grayscale + pil_image = Image.open(work_dir + fn).convert('RGB') + im = np.array(pil_image) + im = im[:, :, ::-1].copy() + im = cv2.cvtColor(im, cv2.COLOR_BGR2GRAY) + + # store first frame + if prev is None: + prev = im + hsv = np.zeros((256,512,3)) + hsv[...,1] = 255 + continue + + # compute optical flow + flow = cv2.calcOpticalFlowFarneback(prev, im, None, 0.5, 3, 15, 3, 5, 1.2, 0) + + # turn into magnitude/angle + mag, ang = cv2.cartToPolar(flow[...,0], flow[...,1]) + + # store angle as hue + hsv[...,0] = ang * 180 / np.pi / 2 + + # store magnitude as lum + hsv[...,2] = cv2.normalize(mag, None, 0, 255, cv2.NORM_L2) + + # convert this HSL to BGR + bgr = cv2.cvtColor(hsv.astype('uint8'), cv2.COLOR_HSV2BGR) + + if prev_bgr is None: + prev_bgr = np.copy(bgr) + continue + + if (i % 10) == 3: + wd = "test/" + elif (i % 10) == 6: + wd = "val/" + else: + wd = "train/" + + ren = "frame_{:05d}.png".format(i) + + #cv2.imwrite(render_dir + "A/" + wd + ren, prev_bgr) + #cv2.imwrite(render_dir + "B/" + wd + ren, bgr) + cv2.imwrite(render_dir + "out/" + ren, bgr) + # copyfile(work_dir + fn, render_dir + "B/" + wd + ren) + prev = im + prev_bgr = np.copy(bgr) + diff --git a/scripts/flow/flow-warp-recflow-recursive-fwd.py b/scripts/flow/flow-warp-recflow-recursive-fwd.py new file mode 100644 index 0000000..4d15cc2 --- /dev/null +++ b/scripts/flow/flow-warp-recflow-recursive-fwd.py @@ -0,0 +1,138 @@ +import os +import sys +from shutil import move, copyfile +from PIL import Image, ImageOps +from shutil import copyfile, rmtree +import numpy as np +import cv2 + +from_dir = "IMG_1734/" +to_dir = "IMG_1738/" +render_dir = "flowwarp_transfer_cross/" + +if os.path.exists(render_dir): + rmtree(render_dir) + +os.makedirs(render_dir) +os.makedirs(render_dir + 'out_fwd_from/') +os.makedirs(render_dir + 'out_rvr_from/') +os.makedirs(render_dir + 'out_fwd_from_rec/') +os.makedirs(render_dir + 'out_rvr_from_rec/') +os.makedirs(render_dir + 'out_fwd_to/') +os.makedirs(render_dir + 'out_rvr_to/') +os.makedirs(render_dir + 'out_fwd_to_rec/') +os.makedirs(render_dir + 'out_rvr_to_rec/') + +def warp_flow(img, flow): + h, w = flow.shape[:2] + flow = -flow + flow[:,:,0] += np.arange(w) + flow[:,:,1] += np.arange(h)[:,np.newaxis] + res = cv2.remap(img, flow, None, cv2.INTER_LINEAR) + return res +def load(path): + pil_image = Image.open(path).convert('RGB') + im = np.array(pil_image) + im = im[:, :, ::-1].copy() + gray = cv2.cvtColor(im, cv2.COLOR_BGR2GRAY) + return im, gray + +def get_files(d): + return sorted([i.name for i in os.scandir(d) if os.path.isfile(d + i.name) and not i.name.startswith('.') and i.name.endswith('png')]) + +hsv = [] +prev = None +prev_bgr = None +gray = None +prev_gray = None +prev_from = None +prev_fwd_from = None +prev_rvr_from = None +prev_from_gray = None +prev_to = None +prev_fwd_to = None +prev_rvr_to = None +prev_to_gray = None + +from_files = get_files(from_dir) +to_files = get_files(to_dir) + +for i,from_fn in enumerate(from_files): + print(from_fn) + to_fn = to_files[i] + + # load image and convert to grayscale + from_im, from_gray = load(from_dir + from_fn) + to_im, to_gray = load(to_dir + to_fn) + + # store first frame + if prev_from_gray is None: + prev_fwd_from = from_im + prev_rvr_from = from_im + prev_from_gray = from_gray + prev_fwd_to = to_im + prev_rvr_to = to_im + prev_to_gray = to_gray + #hsv = np.zeros((256,512,3)) + #hsv[...,1] = 255 + continue + + # compute optical flow + from_fwd_flow = cv2.calcOpticalFlowFarneback(prev_from_gray, from_gray, None, 0.5, 3, 15, 3, 5, 1.2, 0) + #from_rvr_flow = cv2.calcOpticalFlowFarneback(from_gray, prev_from_gray, None, 0.5, 3, 15, 3, 5, 1.2, 0) + #to_fwd_flow = cv2.calcOpticalFlowFarneback(prev_to_gray, to_gray, None, 0.5, 3, 15, 3, 5, 1.2, 0) + #to_rvr_flow = cv2.calcOpticalFlowFarneback(to_gray, prev_to_gray, None, 0.5, 3, 15, 3, 5, 1.2, 0) + #cross_fwd_flow = cv2.calcOpticalFlowFarneback(from_gray, to_gray, None, 0.5, 3, 15, 3, 5, 1.2, 0) + #cross_rvr_flow = cv2.calcOpticalFlowFarneback(to_gray, from_gray, None, 0.5, 3, 15, 3, 5, 1.2, 0) + + #mag, ang = cv2.cartToPolar(flow[...,0], flow[...,1]) + #hsv[...,0] = ang * 180 / np.pi / 2 + #hsv[...,2] = cv2.normalize(mag, None, 0, 255, cv2.NORM_L2) + #bgr = cv2.cvtColor(hsv.astype('uint8'), cv2.COLOR_HSV2BGR) + + #if prev_bgr is None: + # prev_bgr = np.copy(bgr) + # continue + + #if (i % 10) == 3: + # wd = "test/" + #elif (i % 10) == 6: + # wd = "val/" + #else: + # wd = "train/" + + fwd_flow = from_fwd_flow + #rvr_flow = from_rvr_flow + out_fwd_from = warp_flow(from_im, fwd_flow) + out_fwd_from_rec = warp_flow(prev_fwd_from, fwd_flow) + out_fwd_to = warp_flow(to_im, fwd_flow) + out_fwd_to_rec = warp_flow(prev_fwd_to, fwd_flow) + + #out_rvr_from = warp_flow(from_im, rvr_flow) + #out_rvr_from_rec = warp_flow(prev_rvr_from, rvr_flow) + #out_rvr_to = warp_flow(to_im, rvr_flow) + #out_rvr_to_rec = warp_flow(prev_rvr_to, rvr_flow) + + ren = "frame_{:05d}.png".format(i) + #cv2.imwrite(render_dir + "A/" + wd + ren, prev_bgr) + #cv2.imwrite(render_dir + "B/" + wd + ren, bgr) + cv2.imwrite(render_dir + "out_fwd_from/" + ren, out_fwd_from) + cv2.imwrite(render_dir + "out_fwd_from_rec/" + ren, out_fwd_from_rec) + cv2.imwrite(render_dir + "out_fwd_to/" + ren, out_fwd_to) + cv2.imwrite(render_dir + "out_fwd_to_rec/" + ren, out_fwd_to_rec) + #cv2.imwrite(render_dir + "out_rvr_from/" + ren, out_rvr_from) + #cv2.imwrite(render_dir + "out_rvr_from_rec/" + ren, out_rvr_from_rec) + #cv2.imwrite(render_dir + "out_rvr_to/" + ren, out_rvr_to) + #cv2.imwrite(render_dir + "out_rvr_to_rec/" + ren, out_rvr_to_rec) + #cv2.imwrite(render_dir + "next/" + ren, out_next) + # copyfile(work_dir + fn, render_dir + "B/" + wd + ren) + + prev_from_gray = from_gray + prev_to_gray = to_gray + if i > 3: + prev_fwd_from = out_fwd_from_rec + prev_fwd_to = out_fwd_to_rec + #prev_rvr_from = out_rvr_from_rec + #prev_rvr_to = out_rvr_to_rec + #prev_bgr = np.copy(bgr) + diff --git a/scripts/flow/flow-warp-recflow.py b/scripts/flow/flow-warp-recflow.py new file mode 100644 index 0000000..5e0d7ac --- /dev/null +++ b/scripts/flow/flow-warp-recflow.py @@ -0,0 +1,139 @@ +import os +import sys +from shutil import move, copyfile +from PIL import Image, ImageOps +from shutil import copyfile, rmtree +import numpy as np +import cv2 + +from_dir = "IMG_1734/" +to_dir = "IMG_1738/" +render_dir = "flowwarp_transfer_cross/" + +if os.path.exists(render_dir): + rmtree(render_dir) + +os.makedirs(render_dir) +os.makedirs(render_dir + 'out_fwd_from/') +os.makedirs(render_dir + 'out_rvr_from/') +os.makedirs(render_dir + 'out_fwd_from_rec/') +os.makedirs(render_dir + 'out_rvr_from_rec/') +os.makedirs(render_dir + 'out_fwd_to/') +os.makedirs(render_dir + 'out_rvr_to/') +os.makedirs(render_dir + 'out_fwd_to_rec/') +os.makedirs(render_dir + 'out_rvr_to_rec/') + +def warp_flow(img, flow): + h, w = flow.shape[:2] + flow = -flow + flow[:,:,0] += np.arange(w) + flow[:,:,1] += np.arange(h)[:,np.newaxis] + res = cv2.remap(img, flow, None, cv2.INTER_LINEAR) + return res +def load(path): + pil_image = Image.open(path).convert('RGB') + im = np.array(pil_image) + im = im[:, :, ::-1].copy() + gray = cv2.cvtColor(im, cv2.COLOR_BGR2GRAY) + return im, gray + +def get_files(d): + return sorted([i.name for i in os.scandir(d) if os.path.isfile(d + i.name) and not i.name.startswith('.') and i.name.endswith('png')]) + +hsv = [] +prev = None +prev_bgr = None +gray = None +prev_gray = None +prev_from = None +prev_fwd_from = None +prev_rvr_from = None +prev_from_gray = None +prev_to = None +prev_fwd_to = None +prev_rvr_to = None +prev_to_gray = None + +from_files = get_files(from_dir) +to_files = get_files(to_dir) + +for i,from_fn in enumerate(from_files): + print(from_fn) + to_fn = to_files[i] + + # load image and convert to grayscale + from_im, from_gray = load(from_dir + from_fn) + to_im, to_gray = load(to_dir + to_fn) + + # store first frame + if prev_from_gray is None: + prev_fwd_from = from_im + prev_rvr_from = from_im + prev_from_gray = from_gray + prev_fwd_to = to_im + prev_rvr_to = to_im + prev_to_gray = to_gray + #hsv = np.zeros((256,512,3)) + #hsv[...,1] = 255 + continue + + # compute optical flow + from_fwd_flow = cv2.calcOpticalFlowFarneback(prev_from_gray, from_gray, None, 0.5, 3, 15, 3, 5, 1.2, 0) + #from_rvr_flow = cv2.calcOpticalFlowFarneback(from_gray, prev_from_gray, None, 0.5, 3, 15, 3, 5, 1.2, 0) + #to_fwd_flow = cv2.calcOpticalFlowFarneback(prev_to_gray, to_gray, None, 0.5, 3, 15, 3, 5, 1.2, 0) + #to_rvr_flow = cv2.calcOpticalFlowFarneback(to_gray, prev_to_gray, None, 0.5, 3, 15, 3, 5, 1.2, 0) + #cross_fwd_flow = cv2.calcOpticalFlowFarneback(from_gray, to_gray, None, 0.5, 3, 15, 3, 5, 1.2, 0) + #cross_rvr_flow = cv2.calcOpticalFlowFarneback(to_gray, from_gray, None, 0.5, 3, 15, 3, 5, 1.2, 0) + + #mag, ang = cv2.cartToPolar(flow[...,0], flow[...,1]) + #hsv[...,0] = ang * 180 / np.pi / 2 + #hsv[...,2] = cv2.normalize(mag, None, 0, 255, cv2.NORM_L2) + #bgr = cv2.cvtColor(hsv.astype('uint8'), cv2.COLOR_HSV2BGR) + + #if prev_bgr is None: + # prev_bgr = np.copy(bgr) + # continue + + #if (i % 10) == 3: + # wd = "test/" + #elif (i % 10) == 6: + # wd = "val/" + #else: + # wd = "train/" + + fwd_flow = from_fwd_flow + #rvr_flow = from_rvr_flow + out_fwd_from = warp_flow(from_im, fwd_flow) + out_fwd_from_rec = warp_flow(prev_fwd_from, fwd_flow) + out_fwd_to = warp_flow(to_im, fwd_flow) + out_fwd_to_rec = warp_flow(prev_fwd_to, fwd_flow) + + #out_rvr_from = warp_flow(from_im, rvr_flow) + #out_rvr_from_rec = warp_flow(prev_rvr_from, rvr_flow) + #out_rvr_to = warp_flow(to_im, rvr_flow) + #out_rvr_to_rec = warp_flow(prev_rvr_to, rvr_flow) + + ren = "frame_{:05d}.png".format(i) + #cv2.imwrite(render_dir + "A/" + wd + ren, prev_bgr) + #cv2.imwrite(render_dir + "B/" + wd + ren, bgr) + cv2.imwrite(render_dir + "out_fwd_from/" + ren, out_fwd_from) + cv2.imwrite(render_dir + "out_fwd_from_rec/" + ren, out_fwd_from_rec) + cv2.imwrite(render_dir + "out_fwd_to/" + ren, out_fwd_to) + cv2.imwrite(render_dir + "out_fwd_to_rec/" + ren, out_fwd_to_rec) + #cv2.imwrite(render_dir + "out_rvr_from/" + ren, out_rvr_from) + #cv2.imwrite(render_dir + "out_rvr_from_rec/" + ren, out_rvr_from_rec) + #cv2.imwrite(render_dir + "out_rvr_to/" + ren, out_rvr_to) + #cv2.imwrite(render_dir + "out_rvr_to_rec/" + ren, out_rvr_to_rec) + #cv2.imwrite(render_dir + "next/" + ren, out_next) + # copyfile(work_dir + fn, render_dir + "B/" + wd + ren) + + prev_from_gray = from_gray + prev_to_gray = to_gray + if i > 3: + prev_from_gray = cv2.cvtColor(out_fwd_from_rec, cv2.COLOR_BGR2GRAY) + prev_fwd_from = out_fwd_from_rec + prev_fwd_to = out_fwd_to_rec + #prev_rvr_from = out_rvr_from_rec + #prev_rvr_to = out_rvr_to_rec + #prev_bgr = np.copy(bgr) + diff --git a/scripts/flow/flow-warp-recursive.py b/scripts/flow/flow-warp-recursive.py new file mode 100644 index 0000000..7b08941 --- /dev/null +++ b/scripts/flow/flow-warp-recursive.py @@ -0,0 +1,82 @@ +import os +import sys +from shutil import move, copyfile +from PIL import Image, ImageOps +from shutil import copyfile, rmtree +import numpy as np +import cv2 + +work_dir = "IMG_1734/" +render_dir = "IMG_1734/flowwarprecursive/" + +if os.path.exists(render_dir): + rmtree(render_dir) + +os.makedirs(render_dir) +os.makedirs(render_dir + 'prev/') +os.makedirs(render_dir + 'next/') + +def warp_flow(img, flow): + h, w = flow.shape[:2] + flow = -flow + flow[:,:,0] += np.arange(w) + flow[:,:,1] += np.arange(h)[:,np.newaxis] + res = cv2.remap(img, flow, None, cv2.INTER_LINEAR) + return res + +hsv = [] +prev = None +prev_bgr = None +gray = None +prev_gray = None + +for i,fn in enumerate(sorted(os.listdir(work_dir))): + if os.path.basename(fn).startswith('.') or not os.path.isfile(work_dir + fn): + continue + + # load image and convert to grayscale + pil_image = Image.open(work_dir + fn).convert('RGB') + im = np.array(pil_image) + im = im[:, :, ::-1].copy() + gray = cv2.cvtColor(im, cv2.COLOR_BGR2GRAY) + + # store first frame + if prev_gray is None: + prev = im + prev_gray = gray + #hsv = np.zeros((256,512,3)) + #hsv[...,1] = 255 + continue + + # compute optical flow + flow = cv2.calcOpticalFlowFarneback(prev_gray, gray, None, 0.5, 3, 15, 3, 5, 1.2, 0) + + #mag, ang = cv2.cartToPolar(flow[...,0], flow[...,1]) + #hsv[...,0] = ang * 180 / np.pi / 2 + #hsv[...,2] = cv2.normalize(mag, None, 0, 255, cv2.NORM_L2) + #bgr = cv2.cvtColor(hsv.astype('uint8'), cv2.COLOR_HSV2BGR) + + #if prev_bgr is None: + # prev_bgr = np.copy(bgr) + # continue + + #if (i % 10) == 3: + # wd = "test/" + #elif (i % 10) == 6: + # wd = "val/" + #else: + # wd = "train/" + + out_prev = warp_flow(prev, flow) + #out_next = warp_flow(im, flow) + ren = "frame_{:05d}.png".format(i) + + #cv2.imwrite(render_dir + "A/" + wd + ren, prev_bgr) + #cv2.imwrite(render_dir + "B/" + wd + ren, bgr) + cv2.imwrite(render_dir + "prev/" + ren, out_prev) + #cv2.imwrite(render_dir + "next/" + ren, out_next) + # copyfile(work_dir + fn, render_dir + "B/" + wd + ren) + prev = out_prev + #prev_gray = gray + #prev_bgr = np.copy(bgr) + diff --git a/scripts/flow/flow-warp.py b/scripts/flow/flow-warp.py new file mode 100644 index 0000000..3c7735a --- /dev/null +++ b/scripts/flow/flow-warp.py @@ -0,0 +1,82 @@ +import os +import sys +from shutil import move, copyfile +from PIL import Image, ImageOps +from shutil import copyfile, rmtree +import numpy as np +import cv2 + +work_dir = "IMG_1734/" +render_dir = "IMG_1734/flowwarp/" + +if os.path.exists(render_dir): + rmtree(render_dir) + +os.makedirs(render_dir) +os.makedirs(render_dir + 'prev/') +os.makedirs(render_dir + 'next/') + +def warp_flow(img, flow): + h, w = flow.shape[:2] + flow = -flow + flow[:,:,0] += np.arange(w) + flow[:,:,1] += np.arange(h)[:,np.newaxis] + res = cv2.remap(img, flow, None, cv2.INTER_LINEAR) + return res + +hsv = [] +prev = None +prev_bgr = None +gray = None +prev_gray = None + +for i,fn in enumerate(sorted(os.listdir(work_dir))): + if os.path.basename(fn).startswith('.') or not os.path.isfile(work_dir + fn): + continue + + # load image and convert to grayscale + pil_image = Image.open(work_dir + fn).convert('RGB') + im = np.array(pil_image) + im = im[:, :, ::-1].copy() + gray = cv2.cvtColor(im, cv2.COLOR_BGR2GRAY) + + # store first frame + if prev_gray is None: + prev = im + prev_gray = gray + #hsv = np.zeros((256,512,3)) + #hsv[...,1] = 255 + continue + + # compute optical flow + flow = cv2.calcOpticalFlowFarneback(prev_gray, gray, None, 0.5, 3, 15, 3, 5, 1.2, 0) + + #mag, ang = cv2.cartToPolar(flow[...,0], flow[...,1]) + #hsv[...,0] = ang * 180 / np.pi / 2 + #hsv[...,2] = cv2.normalize(mag, None, 0, 255, cv2.NORM_L2) + #bgr = cv2.cvtColor(hsv.astype('uint8'), cv2.COLOR_HSV2BGR) + + #if prev_bgr is None: + # prev_bgr = np.copy(bgr) + # continue + + #if (i % 10) == 3: + # wd = "test/" + #elif (i % 10) == 6: + # wd = "val/" + #else: + # wd = "train/" + + out_prev = warp_flow(prev, flow) + #out_next = warp_flow(im, flow) + ren = "frame_{:05d}.png".format(i) + + #cv2.imwrite(render_dir + "A/" + wd + ren, prev_bgr) + #cv2.imwrite(render_dir + "B/" + wd + ren, bgr) + cv2.imwrite(render_dir + "prev/" + ren, out_prev) + #cv2.imwrite(render_dir + "next/" + ren, out_next) + # copyfile(work_dir + fn, render_dir + "B/" + wd + ren) + #prev = im + #prev_gray = gray + #prev_bgr = np.copy(bgr) + |
