""" Crop images to prepare for training """ import click # from PIL import Image, ImageOps, ImageFilter, ImageDraw from app.settings import types from app.utils import click_utils from app.settings import app_cfg as cfg color_filters = {'color': 1, 'gray': 2, 'all': 3} @click.command() @click.option('-i', '--input', 'opt_fp_in', default=None, help='Override enum input filename CSV') @click.option('-o', '--output', 'opt_fp_out', default=None, help='Override enum output filename CSV') @click.option('-m', '--media', 'opt_dir_media', default=None, help='Override enum media directory') @click.option('--store', 'opt_data_store', type=cfg.DataStoreVar, default=click_utils.get_default(types.DataStore.HDD), show_default=True, help=click_utils.show_help(types.Dataset)) @click.option('--dataset', 'opt_dataset', type=cfg.DatasetVar, required=True, show_default=True, help=click_utils.show_help(types.Dataset)) @click.option('--size', 'opt_size', type=(int, int), default=(480, 480), help='Output image size') @click.option('--slice', 'opt_slice', type=(int, int), default=(None, None), help='Slice list of files') @click.option('--display/--no-display', 'opt_display', is_flag=True, default=False, help='Display detections to debug') @click.option('-f', '--force', 'opt_force', is_flag=True, help='Force overwrite file') @click.pass_context def cli(ctx, opt_fp_in, opt_dir_media, opt_fp_out, opt_data_store, opt_dataset, opt_size, opt_slice, opt_display, opt_force): """Generates 3D landmark animations from CSV files""" import sys import os from os.path import join from pathlib import Path from tqdm import tqdm import numpy as np import pandas as pd import matplotlib.pyplot as plt from app.utils import logger_utils, file_utils, im_utils, display_utils, draw_utils from app.utils import plot_utils from app.processors import face_detector from app.models.data_store import DataStore # ------------------------------------------------- # init here log = logger_utils.Logger.getLogger() # set storage location data_store = DataStore(opt_data_store, opt_dataset) # load file records fp_record = data_store.metadata(types.Metadata.FILE_RECORD) # file_record.csv df_records = pd.read_csv(fp_record).set_index('index') # load ROI data fp_roi = data_store.metadata(types.Metadata.FACE_ROI) # face_roi.csv df_rois = pd.read_csv(fp_roi).set_index('index') fp_landmark_3d = data_store.metadata(types.Metadata.FACE_LANDMARK_3D_68) # face_landmark_3d_68.csv df_landmarks_3d = pd.read_csv(fp_landmark_3d).set_index('index') if opt_slice: df_landmarks_3d = df_landmarks_3d[opt_slice[0]:opt_slice[1]] # slice if you want log.debug('processing {:,} groups'.format(len(df_landmarks_3d))) # get filepath out #fp_out = data_store.metadata(types.Metadata.FACE_ROI) if opt_fp_out is None else opt_fp_out fp_out = '/home/adam/Downloads/3d.gif' for roi_index, df_3d in tqdm(df_landmarks_3d.iterrows(), total=len(df_landmarks_3d)): log.debug(f'roi_index: {roi_index}') # unflatten points points_3d = np.array([(df_3d[f'x{i}'], df_3d[f'y{i}'], df_3d[f'z{i}']) for i in range(1, 68)]) plot_utils.generate_3d_landmark_anim(points_3d, fp_out, size=(300,300)) break