{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# LFW Visualize" ] }, { "cell_type": "code", "execution_count": 11, "metadata": {}, "outputs": [], "source": [ "%reload_ext autoreload\n", "%autoreload 2\n", "\n", "import os\n", "from os.path import join\n", "import math\n", "from glob import glob\n", "from random import randint\n", "\n", "import cv2 as cv\n", "import numpy as np\n", "import pandas as pd\n", "from PIL import Image, ImageDraw\n", "%matplotlib inline\n", "import matplotlib.pyplot as plt\n", "import scipy.io\n", "from pathlib import Path\n", "from sklearn import preprocessing\n", "from tqdm import tqdm_notebook as tqdm\n", "\n", "import sys\n", "sys.path.append('/work/megapixels_dev/megapixels/')\n", "from app.settings import app_cfg as cfg\n", "from app.utils import file_utils\n", "from app.models.bbox import BBox" ] }, { "cell_type": "code", "execution_count": 124, "metadata": {}, "outputs": [], "source": [ "# function to create spaced colormaps as RGB values\n", "\n", "import matplotlib as mpl\n", "import matplotlib.cm as mplcm\n", "import matplotlib.pyplot as plt\n", "from matplotlib import cm\n", "\n", "def get_color_map(cmap='prism', ncolors=20, as_hex=False, reverse=False, bgr=True):\n", " norm = mpl.colors.Normalize(vmin=0, vmax=ncolors-1)\n", " scalars = mplcm.ScalarMappable(norm=norm, cmap=cmap)\n", " colors = [scalars.to_rgba(i) for i in range(ncolors)]\n", " colors = [(int(255*c[0]),int(255*c[1]),int(255*c[2])) for c in colors] \n", " if reverse:\n", " colors = colors[::-1]\n", " if bgr:\n", " colors = [c[::-1] for c in colors]\n", " if as_hex:\n", " colors = ['#{:02x}{:02x}{:02x}'.format(c[0],c[1],c[2]) for c in colors]\n", " return colors\n", "\n", "def jitter_clr(clr, amt=10, mono=False):\n", " clr = list(clr)\n", " if mono:\n", " r = randint(-amt, amt)\n", " for i in range(len(clr)):\n", " clr[i] = max(0, min(255, clr[i] + r))\n", " else:\n", " for i in range(len(clr)):\n", " r = randint(-amt, amt)\n", " clr[i] = max(0, min(255, clr[i] + r))\n", " return clr\n", "\n", "def random_color():\n", " return tuple(map(int, np.random.choice(range(256), size=3)))" ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [], "source": [ "DATA_STORE = '/data_store_nas/'\n", "fp_dataset = join(DATA_STORE, 'datasets/people/lfw')\n", "\n", "DATA_STORE_HDD = '/data_store_hdd/'\n", "fp_rois = join(DATA_STORE_HDD, 'apps/megapixels/datasets/people/lfw/rois.csv')" ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
Unnamed: 0extfnhwxy
00.jpgAJ_Cook_00010.3300000.3300000.3366670.350000
11.jpgAJ_Lamas_00010.3933330.3933330.2866670.313333
22.jpgAaron_Eckhart_00010.3933330.3933330.2866670.273333
33.jpgAaron_Guiel_00010.3933330.3933330.2866670.313333
44.jpgAaron_Patterson_00010.3933330.3933330.2866670.273333
\n", "
" ], "text/plain": [ " Unnamed: 0 ext fn h w x \\\n", "0 0 .jpg AJ_Cook_0001 0.330000 0.330000 0.336667 \n", "1 1 .jpg AJ_Lamas_0001 0.393333 0.393333 0.286667 \n", "2 2 .jpg Aaron_Eckhart_0001 0.393333 0.393333 0.286667 \n", "3 3 .jpg Aaron_Guiel_0001 0.393333 0.393333 0.286667 \n", "4 4 .jpg Aaron_Patterson_0001 0.393333 0.393333 0.286667 \n", "\n", " y \n", "0 0.350000 \n", "1 0.313333 \n", "2 0.273333 \n", "3 0.313333 \n", "4 0.273333 " ] }, "execution_count": 7, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df_rois = pd.read_csv(fp_rois)\n", "df_rois.head()" ] }, { "cell_type": "code", "execution_count": 105, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "13230\n" ] } ], "source": [ "rois = {}\n", "for idx, row in df_rois.iterrows():\n", " x, y, w, h = row['x'], row['y'], row['w'], row['h']\n", " rois[row['fn'].lower()] = BBox.from_xywh(x, y, w, h)\n", "print(len(rois))" ] }, { "cell_type": "code", "execution_count": 101, "metadata": {}, "outputs": [], "source": [ "colors = get_color_map(cmap='winter', ncolors=len(rois), reverse=False)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ " Colormap PiYGF is not recognized. Possible values are: Accent, Accent_r, Blues, Blues_r, BrBG, BrBG_r, BuGn, BuGn_r, BuPu, BuPu_r, CMRmap, CMRmap_r, Dark2, Dark2_r, GnBu, GnBu_r, Greens, Greens_r, Greys, Greys_r, OrRd, OrRd_r, Oranges, Oranges_r, PRGn, PRGn_r, Paired, Paired_r, Pastel1, Pastel1_r, Pastel2, Pastel2_r, PiYG, PiYG_r, PuBu, PuBuGn, PuBuGn_r, PuBu_r, PuOr, PuOr_r, PuRd, PuRd_r, Purples, Purples_r, RdBu, RdBu_r, RdGy, RdGy_r, RdPu, RdPu_r, RdYlBu, RdYlBu_r, RdYlGn, RdYlGn_r, Reds, Reds_r, Set1, Set1_r, Set2, Set2_r, Set3, Set3_r, Spectral, Spectral_r, Wistia, Wistia_r, YlGn, YlGnBu, YlGnBu_r, YlGn_r, YlOrBr, YlOrBr_r, YlOrRd, YlOrRd_r, afmhot, afmhot_r, autumn, autumn_r, binary, binary_r, bone, bone_r, brg, brg_r, bwr, bwr_r, cividis, cividis_r, cool, cool_r, coolwarm, coolwarm_r, copper, copper_r, cubehelix, cubehelix_r, flag, flag_r, gist_earth, gist_earth_r, gist_gray, gist_gray_r, gist_heat, gist_heat_r, gist_ncar, gist_ncar_r, gist_rainbow, gist_rainbow_r, gist_stern, gist_stern_r, gist_yarg, gist_yarg_r, gnuplot, gnuplot2, gnuplot2_r, gnuplot_r, gray, gray_r, hot, hot_r, hsv, hsv_r, inferno, inferno_r, jet, jet_r, magma, magma_r, nipy_spectral, nipy_spectral_r, ocean, ocean_r, pink, pink_r, plasma, plasma_r, prism, prism_r, rainbow, rainbow_r, seismic, seismic_r, spring, spring_r, summer, summer_r, tab10, tab10_r, tab20, tab20_r, tab20b, tab20b_r, tab20c, tab20c_r, terrain, terrain_r, viridis, viridis_r, winter, winter_r" ] }, { "cell_type": "code", "execution_count": 120, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "(47, 139, 95)" ] }, "execution_count": 120, "metadata": {}, "output_type": "execute_result" } ], "source": [ "random_color()" ] }, { "cell_type": "code", "execution_count": 138, "metadata": {}, "outputs": [ { "data": { "application/vnd.jupyter.widget-view+json": { "model_id": "e813bce44c274c7fac7ba0d8dd8fb437", "version_major": 2, "version_minor": 0 }, "text/plain": [ "HBox(children=(IntProgress(value=0, max=13230), HTML(value='')))" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/plain": [ "" ] }, "execution_count": 138, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# draw it\n", "im = np.zeros([3000, 3000, 3]).astype(np.uint8)\n", "im_blank = im.copy()\n", "im[::] = (0,0,0)\n", "limit = 12000\n", "stroke_weight = 2\n", "\n", "h, w = im.shape[:2]\n", "for i, roi in enumerate(tqdm(rois.items())):\n", " fname, bbox = roi # expand\n", " bbox = bbox.to_dim((w,h))\n", " pt1, pt2 = tuple(map(int, bbox.pt_tl)), tuple(map(int, bbox.pt_br))\n", " im_cp = im.copy()\n", " cv.rectangle(im_cp, pt1, pt2, jitter_clr(colors[i]), stroke_weight, cv.LINE_AA,)\n", " rn = random_color()\n", " cv.rectangle(im_cp, pt1, pt2, rn, stroke_weight, cv.LINE_AA,)\n", " im = cv.addWeighted(im_cp, 0.3, im, .7, 0)\n", " if i > limit:\n", " break\n", "\n", " \n", "cv.imwrite('output/lfw_rand.png', im)\n", "plt.imshow(cv.cvtColor(im, cv.COLOR_BGR2RGB))" ] }, { "cell_type": "code", "execution_count": 108, "metadata": {}, "outputs": [], "source": [ "from time import sleep" ] }, { "cell_type": "code", "execution_count": 110, "metadata": {}, "outputs": [ { "data": { "application/vnd.jupyter.widget-view+json": { "model_id": "5ffef71ceb0d4fa39bcf63a81d3a359f", "version_major": 2, "version_minor": 0 }, "text/plain": [ "HBox(children=(IntProgress(value=0, description='2nd loop'), HTML(value='')))" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "\n" ] } ], "source": [ "for j in tqdm(range(100), desc='2nd loop'):\n", " sleep(0.01)" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] } ], "metadata": { "kernelspec": { "display_name": "megapixels", "language": "python", "name": "megapixels" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.6.8" } }, "nbformat": 4, "nbformat_minor": 2 }