示例#1
0
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),
示例#3
0
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)
示例#4
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
示例#5
0
            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):
示例#6
0
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()
示例#7
0
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):