[fd9ef4]: / opengait / modeling / models / BigGait_utils / save_img.py

Download this file

101 lines (86 with data), 4.1 kB

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
from os import path as osp
import os
import pickle
from PIL import Image
import imageio
from glob import glob
import matplotlib.pyplot as plt
import numpy as np
from sklearn.decomposition import PCA
from sklearn.preprocessing import minmax_scale
import cv2
def pca_image(data, mask, root, model_name, dataset, n_components=3, is_return=False):
features = data['embeddings']
ns,hw,c = features.shape
features = features.reshape(ns*hw,c)
mask = mask.reshape(ns*hw)
pca = PCA(n_components=n_components)
pca_features = pca.fit_transform(features[mask != 0])
pca_features = minmax_scale(pca_features, (0,255), axis=1)
# pca_features = minmax_scale(pca_features, (0,255), axis=0)
norm_features = np.zeros_like(mask,dtype=np.uint8).reshape(ns*hw,1).repeat(n_components,axis=1)
norm_features[mask != 0] = pca_features
if is_return:
norm_features = norm_features.reshape(1,ns,64,32,n_components)[...,:3].transpose(0,1,4,2,3) #
return norm_features
s = 20
assert ns % s == 0
norm_features = norm_features.reshape(ns//s,s,64,32,n_components)[...,:3].transpose(0,1,4,2,3)
data['embeddings'] = norm_features
save_image(data, root, model_name, dataset, need='image')
def save_image(data, root, model_name, dataset, need='image', mask=None):
images, label, seq_type, view = data['embeddings'], data['labels'], data['types'], data['views'] # n s c h w
if "image" in need:
root_path = os.path.join(root, dataset, model_name+'_image')
os.makedirs(os.path.join(root_path),exist_ok=True)
for i, id in enumerate(label[:]):
tmp = os.path.join(root_path, str(id).zfill(5), str(seq_type[i]), str(view[i]))
os.makedirs(tmp, exist_ok=True)
mb = None if mask is None else mask[i]
save_func(tmp, images[i], need, mb)
save_gif(tmp, tmp, str(view[i]))
if 'pkl' in need:
root_path = os.path.join(root, dataset, model_name+'_pkl')
os.makedirs(os.path.join(root_path),exist_ok=True)
for i, id in enumerate(label[:]):
tmp = os.path.join(root_path, str(id).zfill(5), str(seq_type[i]), str(view[i]))
os.makedirs(tmp, exist_ok=True)
mb = None if mask is None else mask[i]
save_func(tmp, images[i], 'pkl', mb)
if 'w' in need:
root_path = os.path.join(root, dataset, model_name+'_w')
os.makedirs(os.path.join(root_path),exist_ok=True)
for i, id in enumerate(label[:]):
tmp = os.path.join(root_path, str(id).zfill(5), str(seq_type[i]), str(view[i]))
os.makedirs(tmp, exist_ok=True)
mb = None if mask is None else mask[i]
save_func(tmp, data['w'], 'w', mb)
return
def save_func(tmp, data, ipts_type='image', mask=None):
if 'image' in ipts_type :
for i, con in enumerate(data):
if con.shape[0] == 1:
if 'jet' in ipts_type :
im = ((cv2.applyColorMap(con[0], cv2.COLORMAP_JET) * 0.5)[...,::-1] + 1.0*mask[i])
# im = mask[i]
im = np.clip(im,0,255).astype(np.uint8)
im = Image.fromarray(im, mode='RGB') # [h,w,c]
else:
im = Image.fromarray(con[0], mode='L')
else:
im = Image.fromarray(con.transpose(1,2,0), mode='RGB')
im.save(os.path.join(tmp, '%03d.png' % i))
elif ipts_type == 'pkl':
with open(os.path.join(tmp,'00.pkl'), 'wb') as f:
pickle.dump(data[:,0,:,:], f)
elif ipts_type == 'w':
for i in range(len(data)):
with open(os.path.join(tmp, str(i).zfill(2) + '.pkl'), 'wb') as f:
pickle.dump(data[i], f)
def save_gif(image_folder, save_folder, name="movie"):
images = []
filenames = sorted(glob(osp.join(image_folder, '*.png')))
# print(filenames)
for filename in filenames:
images.append(imageio.imread(filename))
imageio.mimsave(os.path.join(save_folder, f'{name}.gif'), images, duration=50, loop=0)