""" """ 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)