def createTruthMasks( outputFolderName="Masks_From_VolumeTracing", moreLinesFolderName="Tracings_Masks_with_more_than_21_lines", plainLinesFolderName="Blank_Image_Ground_lines_from_Tracings"): trace, fnames, frames, root = initVars() for index in fnames: for frame_index in [0, -1]: video = os.path.join(root, "Videos", index) video = loader.loadvideo(video).astype(np.float32) t = trace[index][frames[index][frame_index]] x1, y1, x2, y2 = t[:, 0], t[:, 1], t[:, 2], t[:, 3] x = np.concatenate((x1[1:], np.flip(x2[1:]))) y = np.concatenate((y1[1:], np.flip(y2[1:]))) r, c = skimage.draw.polygon( np.rint(y).astype(np.int), np.rint(x).astype(np.int), (video.shape[2], video.shape[3])) mask = np.zeros((video.shape[2], video.shape[3]), np.float32) mask[r, c] = 1 if len(t) < 22: os.makedirs(os.path.join(root, outputFolderName), exist_ok=True) # creates frames parent directory rescaled = (255.0 / mask.max() * (mask - mask.min())).astype( np.uint8) im = Image.fromarray(rescaled) im.save( os.path.join( root, outputFolderName, index + "_" + str(frames[index][frame_index]) + '.png')) else: # more than 21 lines os.makedirs(os.path.join(root, moreLinesFolderName), exist_ok=True) # creates frames parent directory os.makedirs(os.path.join(root, plainLinesFolderName), exist_ok=True) # creates frames parent directory rescaled = (255.0 / mask.max() * (mask - mask.min())).astype( np.uint8) im = Image.fromarray(rescaled) im.save( os.path.join( root, moreLinesFolderName, index + "_" + str(frames[index][frame_index]) + '.png')) # Draw lines on black image blank_image = np.zeros((126, 126, 3), dtype="uint8") for coord in range(len(x1)): cv2.line(blank_image, (int(x1[coord]), int(y1[coord])), (int(x2[coord]), int(y2[coord])), (255, 255, 255), 1) cv2.imwrite( os.path.join( root, plainLinesFolderName, index + "_" + str(frames[index][frame_index]) + '.png'), blank_image)
import cv2 from tqdm import tqdm from algorithms import funcs as funcs import loader from PIL import Image import skimage.draw import numpy as np from scipy.interpolate import interp1d import matplotlib.pyplot as plt x = "/Users/ishan/Documents/Stanford/EchoData/control_video_frames/122.jpg" vidPath = "/Users/ishan/Documents/Stanford/EchoData/Control-Videos-Segmented/Control_0027_0001.avi" volumes, x1, y1, x2, y2, d = funcs.calculateVolumeAngleShift( x, 20, 10, method="Method of Disks") video = loader.loadvideo(vidPath).astype(np.float32) for iteration in x1: mask = loader.READ_AND_CROP_FRAME(vidPath, 122, False) overlay = mask.copy() # overlay layer x = np.concatenate((x1[iteration][1:], np.flip(x2[iteration][1:]))) y = np.concatenate((y1[iteration][1:], np.flip(y2[iteration][1:]))) x0 = np.concatenate((x1[0][1:], np.flip(x2[0][1:]))) y0 = np.concatenate((y1[0][1:], np.flip(y2[0][1:]))) r, c = skimage.draw.polygon( np.rint(y).astype(np.int), np.rint(x).astype(np.int), (video.shape[2], video.shape[3])) r0, c0 = skimage.draw.polygon( np.rint(y0).astype(np.int),
def get_landmarks(im): rects = detector(im, 1) if len(rects) is not 1: # if no face or multiple faces, return None return None return np.array([[p.x, p.y] for p in predictor(im, rects[0]).parts()]) def get_landmarks_facepp(img, api): res = api.detect(image_file=img, return_landmark=1) lm = np.zeros((83, 2)) if len(res['faces']) == 0: return None for i in range(83): point = res['faces'][0]['landmark'][landmark_name[i]] lm[i, 0] = point['x'] lm[i, 1] = point['y'] return lm if __name__ == "__main__": from loader import loadvideo filename1 = 'Datasets/Easy/FrankUnderwood.mp4' print('loading...') video = loadvideo(filename1) print('done') img = video[0] lm = get_landmarks_facepp(img) for groups in lm: cv2.circle(img, (int(groups[0]), int(groups[1])), 3, (255, 0, 0), 2) cv2.imshow('img', img) cv2.waitKey(0)
startYs_flat = startYs.flatten() newXs = np.full(startXs_flat.shape, -1, dtype=float) newYs = np.full(startYs_flat.shape, -1, dtype=float) for i in range(np.size(startXs)): if startXs_flat[i] != -1: newXs[i], newYs[i] = estimateFeatureTranslation( startXs_flat[i], startYs_flat[i], Ix, Iy, img1, img2) newXs = np.reshape(newXs, startXs.shape) newYs = np.reshape(newYs, startYs.shape) return newXs, newYs if __name__ == "__main__": from loader import loadvideo, loadlandmarks filename = 'Datasets/Easy/FrankUnderwood.mp4' video = loadvideo(filename) result = loadvideo(filename) landmarks = loadlandmarks(filename) startXs = landmarks[0][:, [0]] startYs = landmarks[0][:, [1]] for i in range(1, len(video)): newXs, newYs = estimateAllTranslation(startXs, startYs, video[i - 1], video[i]) newlandmarks = np.hstack((newXs, newYs)).astype(int) startXs, startYs = newXs, newYs # draw true landmarks for groups in landmarks[i]: cv2.circle(result[i], (groups[0], groups[1]), 3, (255, 0, 0), 2) # draw tracker landmarks
landmarks1_trans = landmarks1_trans[0:2, :].T dist = calcSimilarity(landmarks1_trans, landmarks2[i]) if dist < mindist: faceind[i] = j mindist = dist return faceind.astype(int) if __name__ == "__main__": from loader import loadlandmarks_facepp, loadvideo import time easy1 = 'Datasets/Easy/FrankUnderwood.mp4' easy2 = 'Datasets/Easy/MrRobot.mp4' lm1 = loadlandmarks_facepp(easy2) lm2 = loadlandmarks_facepp(easy1) video2 = loadvideo(easy1) print(len(lm1)) t0 = time.time() ind = findMinDistFace(lm1, lm2) ind_s = findMinDistFace_static(lm1, lm2) t1 = time.time() print(t1 - t0) T = cv2.estimateRigidTransform(lm1[ind[0]], lm2[0], False) T_full = np.vstack((T, np.array([0, 0, 1]))) landmarks1_full = np.vstack( (lm1[ind[0]].T, np.ones((1, lm1[ind[0]].shape[0])))) landmarks1_trans = np.dot(T_full, landmarks1_full) landmarks1_trans = landmarks1_trans[0:2, :].T for groups in landmarks1_trans.astype(int):
import matplotlib.pyplot as plt import time if __name__ == "__main__": easy1 = 'Datasets/Easy/FrankUnderwood.mp4' easy2 = 'Datasets/Easy/MrRobot.mp4' easy3 = 'Datasets/Easy/JonSnow.mp4' medium1 = 'Datasets/Medium/LucianoRosso1.mp4' medium2 = 'Datasets/Medium/LucianoRosso2.mp4' medium3 = 'Datasets/Medium/LucianoRosso3.mp4' hard1 = 'Datasets/Hard/Joker.mp4' hard2 = 'Datasets/Hard/LeonardoDiCaprio.mp4' xi = 'Datasets/xidada.mp4' source_video_path = easy2 target_video_path = easy1 source_video = loadvideo(source_video_path) target_video = loadvideo(target_video_path) target_video_with_landmark = vislandmarks(target_video_path, use_facepp=True) source_landmarks = smooth_landmark_traj( loadlandmarks_facepp(source_video_path)) target_landmarks = smooth_landmark_traj( loadlandmarks_facepp(target_video_path)) # Face Matching # source_ind = findMinDistFace(source_landmarks, target_landmarks) source_ind = findMinDistFace_static(source_landmarks, target_landmarks) N_FRAMES = len(target_video) output = target_video.copy()
easy1 = 'Datasets/Easy/FrankUnderwood.mp4' easy2 = 'Datasets/Easy/MrRobot.mp4' easy3 = 'Datasets/Easy/JonSnow.mp4' medium1 = 'Datasets/Medium/LucianoRosso1.mp4' medium2 = 'Datasets/Medium/LucianoRosso2.mp4' medium3 = 'Datasets/Medium/LucianoRosso3.mp4' hard1 = 'Datasets/Hard/Joker.mp4' hard2 = 'Datasets/Hard/LeonardoDiCaprio.mp4' xidada = 'Datasets/xidada.mp4' SOURCE_VIDEO_PATH = easy1 TARGET_VIDEO_PATH = easy2 if __name__ == "__main__": print("Loading videos...") source_video = loadvideo(SOURCE_VIDEO_PATH) target_video = loadvideo(TARGET_VIDEO_PATH) print("Loading landmarks...") source_landmarks = smooth_landmark_traj( loadlandmarks_facepp(SOURCE_VIDEO_PATH)) target_landmarks = smooth_landmark_traj( loadlandmarks_facepp(TARGET_VIDEO_PATH)) # Face Matching print("Matching faces...") source_ind = findMinDistFace_static(source_landmarks, target_landmarks) # For each frame in target video N_FRAMES = len(target_video) output = target_video.copy() for i in range(N_FRAMES):