diff options
| author | adamhrv <adam@ahprojects.com> | 2019-01-07 02:26:34 +0100 |
|---|---|---|
| committer | adamhrv <adam@ahprojects.com> | 2019-01-07 02:26:34 +0100 |
| commit | 5e5a7d09774bde195fe31ae143704eb124a764ac (patch) | |
| tree | 20e48a5f80e94c5021c01e9558de8af873e2eaf7 /megapixels/commands/visualize | |
| parent | 4bcb82c0f295d79d3d247252e7e98b2d986ae821 (diff) | |
add demos, in progress
Diffstat (limited to 'megapixels/commands/visualize')
| -rw-r--r-- | megapixels/commands/visualize/plot_3d_landmarks.py | 89 |
1 files changed, 89 insertions, 0 deletions
diff --git a/megapixels/commands/visualize/plot_3d_landmarks.py b/megapixels/commands/visualize/plot_3d_landmarks.py new file mode 100644 index 00000000..a0f9e555 --- /dev/null +++ b/megapixels/commands/visualize/plot_3d_landmarks.py @@ -0,0 +1,89 @@ +""" +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
\ No newline at end of file |
