summaryrefslogtreecommitdiff
path: root/megapixels/commands/visualize
diff options
context:
space:
mode:
authoradamhrv <adam@ahprojects.com>2019-01-07 02:26:34 +0100
committeradamhrv <adam@ahprojects.com>2019-01-07 02:26:34 +0100
commit5e5a7d09774bde195fe31ae143704eb124a764ac (patch)
tree20e48a5f80e94c5021c01e9558de8af873e2eaf7 /megapixels/commands/visualize
parent4bcb82c0f295d79d3d247252e7e98b2d986ae821 (diff)
add demos, in progress
Diffstat (limited to 'megapixels/commands/visualize')
-rw-r--r--megapixels/commands/visualize/plot_3d_landmarks.py89
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