summaryrefslogtreecommitdiff
path: root/megapixels/commands/site
diff options
context:
space:
mode:
Diffstat (limited to 'megapixels/commands/site')
-rw-r--r--megapixels/commands/site/age_gender_to_site.py100
1 files changed, 100 insertions, 0 deletions
diff --git a/megapixels/commands/site/age_gender_to_site.py b/megapixels/commands/site/age_gender_to_site.py
new file mode 100644
index 00000000..3ad24a8d
--- /dev/null
+++ b/megapixels/commands/site/age_gender_to_site.py
@@ -0,0 +1,100 @@
+"""
+
+"""
+
+import click
+
+from app.settings import types
+from app.utils import click_utils
+from app.settings import app_cfg as cfg
+
+
+@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('-f', '--force', 'opt_force', is_flag=True,
+ help='Force overwrite file')
+@click.pass_context
+def cli(ctx, opt_fp_in, opt_fp_out, opt_dir_media, opt_data_store, opt_dataset, opt_force):
+ """Converts age/gender to CSV for pie chartgs"""
+
+ import sys
+ import os
+ from os.path import join
+ from pathlib import Path
+ from glob import glob
+
+ from tqdm import tqdm
+ import numpy as np
+ import cv2 as cv
+ import pandas as pd
+
+ from app.utils import logger_utils
+ from app.models.data_store import DataStore
+
+ # -------------------------------------------------------------------------
+ # init here
+
+ log = logger_utils.Logger.getLogger()
+
+ # init filepaths
+ data_store = DataStore(opt_data_store, opt_dataset)
+ # set file output path
+ metadata_type = types.Metadata.FACE_ATTRIBUTES
+ fp_in = data_store.metadata(metadata_type) if opt_fp_out is None else opt_fp_in
+ dk = opt_dataset.name.lower()
+ log.debug(f'dk: {dk}')
+ fp_out_age = f'../site/content/pages/datasets/{dk}/assets/age.csv'
+ fp_out_gender = f'../site/content/pages/datasets/{dk}/assets/gender.csv'
+
+ if not opt_force and (Path(fp_out_age).exists() or Path(fp_out_gender).exists()):
+ log.error('File exists. Use "-f / --force" to overwite')
+ return
+
+ # -------------------------------------------------------------------------
+ # Age
+
+ df = pd.read_csv(fp_in)
+
+ results = []
+ brackets = [(0, 12), (13, 18), (19,24), (25, 34), (35, 44), (45, 54), (55, 64), (64, 75), (75, 100)]
+ df_age = df['age_real']
+
+ for a1, a2 in brackets:
+ n = len(df_age.loc[((df_age >= a1) & (df_age <= a2))])
+ results.append({'age': f'{a1} - {a2}', 'faces': n})
+
+ df_out = pd.DataFrame.from_dict(results)
+ df_out = df_out[['age','faces']]
+ df_out.to_csv(fp_out_age, index=False)
+
+ # Gender
+ results = []
+
+ df_f = df['f']
+ nm = len(df_f.loc[((df_f < 0.33))])
+ nnb = len(df_f.loc[((df_f >= 0.33) & (df_f <= 0.66))])
+ nf = len(df_f.loc[((df_f > 0.66))])
+
+ results = []
+ results.append({'gender': 'Male', 'faces':nm})
+ results.append({'gender': 'Female', 'faces': nf})
+ results.append({'gender': 'They', 'faces': nnb})
+
+ df_out = pd.DataFrame.from_dict(results)
+ df_out = df_out[['gender','faces']]
+ df_out.to_csv(fp_out_gender, index=False) \ No newline at end of file