Showing preview only (9,308K chars total). Download the full file or copy to clipboard to get everything.
Repository: zhuhao-nju/hmd
Branch: master
Commit: ff1f696bcc17
Files: 51
Total size: 8.9 MB
Directory structure:
gitextract_z1bj5p9q/
├── LICENSE
├── README.md
├── conf.ini
├── datasets/
│ ├── COCO.py
│ ├── H36M.py
│ ├── LSP.py
│ ├── LSPET.py
│ ├── MPII.py
│ ├── data.md
│ ├── data_filter.py
│ ├── h36m_cdf2mat.m
│ ├── h36m_list.txt
│ └── proc_all_data.py
├── demo/
│ ├── demo.py
│ ├── demo_data/
│ │ └── test/
│ │ └── para/
│ │ ├── 00000002.json
│ │ ├── 00000477.json
│ │ ├── 00002040.json
│ │ └── 00002726.json
│ └── download_pretrained_model.sh
├── demo_wild/
│ ├── demo_wild.md
│ ├── predict_hmd.py
│ └── predict_hmr.py
├── eval/
│ ├── eval.md
│ ├── eval_data/
│ │ └── save_downloaded_zip_here
│ ├── eval_functions.py
│ ├── eval_recon.py
│ ├── eval_syn.py
│ ├── eval_wild.py
│ ├── pred_hmd_ja.py
│ ├── pred_hmd_s.py
│ └── pred_hmr.py
├── predef/
│ ├── anchor_point_list.pkl
│ ├── dja_IJV.pkl
│ ├── dja_achr.pkl
│ ├── dsa_IJV.pkl
│ ├── dsa_achr.pkl
│ ├── exempt_vert_list.pkl
│ ├── mesh_joint_list.pkl
│ └── smpl_faces.npy
├── requirements.txt
└── src/
├── data_loader.py
├── hmr_predictor.py
├── lighting.py
├── mesh_edit.py
├── network.py
├── predictor.py
├── renderer.py
├── train_anchor.py
├── train_joint.py
├── train_shading.py
└── utility.py
================================================
FILE CONTENTS
================================================
================================================
FILE: LICENSE
================================================
MIT License
Copyright (c) 2019 zhuhao-nju
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
================================================
FILE: README.md
================================================
# Detailed Human Shape Estimation from a Single Image by Hierarchical Mesh Deformation
[Hao Zhu](https://zhuhao-nju.github.io/), [Xinxin Zuo](https://sites.google.com/site/xinxinzuohome/), [Sen Wang](https://sites.google.com/site/senwang1312home/), [Xun Cao](https://cite.nju.edu.cn/People/Faculty/20190621/i5054.html), [Ruigang Yang](https://orcid.org/0000-0001-5296-6307) CVPR 2019 Oral
**[[Project Page]](http://cite.nju.edu.cn/Researches/3DCaptureandReconstruction/20190621/i5141.html)** **[[Arxiv]](https://arxiv.org/abs/1904.10506)**
<img src="https://github.com/zhuhao-nju/hmd/blob/master/demo/results/2726.gif" width="200"> <img src="https://github.com/zhuhao-nju/hmd/blob/master/demo/results/0002.gif" width="200"> <img src="https://github.com/zhuhao-nju/hmd/blob/master/demo/results/0477.gif" width="200"> <img src="https://github.com/zhuhao-nju/hmd/blob/master/demo/results/2040.gif" width="200">
From green bounded frame:
**source image** --> **initial guess** --> **joint deform** --> **anchor deform** --> **vertex deform**
## Requirements
The project is tested on ubuntu 16.04 with python 2.7, PyTorch 1.0. We recomend using [Anaconda](https://www.anaconda.com/download/#linux) to create a new enviroment:
```
conda create -n py27-hmd python=2.7
conda activate py27-hmd
```
Install dependecies:
```
sudo apt-get install libsuitesparse-dev
pip install -r requirements.txt
```
The installation of OpenDR is unstable now, we recommend using a old stable version:
```
sudo apt-get install python-dev python-pip cython python-numpy \
python-scipy python-matplotlib libopencv-dev python-opencv \
libosmesa6-dev freeglut3-dev
pip install pip==8.1.1
pip install opendr==0.78
pip install --upgrade pip
```
Refer to the [guide](https://pytorch.org/get-started/locally/) to install the PyTorch 1.0.
## Demo
Download the pretrained model from [Google Drive](https://drive.google.com/file/d/1LaQBoJPvrqAkF2AGzeV97lmMu9OhsGAS/view?usp=sharing) or [Baidu Netdisk](https://pan.baidu.com/s/11NpU9NAiO6KOHveWo6tRAg)(extracting code:q23f), place the file in "/hmd/demo/", then extract the pretrained model:
```
cd demo
chmod +x download_pretrained_model.sh
./download_pretrained_model.sh
```
Run the demo:
```
python demo.py --ind 2 # or 477, 2040, 2726
```
The results will be saved in the folder "demo/results/" by default. Run "python demo.py -h" for more usages.
This repository merely contains 4 samples for demo. To run the full test data, download the test set from [Google Drive](https://drive.google.com/open?id=1ifcvLFJb1t9uS9bz0CxqhaYUfXvQNHC4) or [Baidu Netdisk](https://pan.baidu.com/s/1OVfM4ETgkFiUgmGpp0Cb4A)(extracting code:0ch3). Extract the test set and change the "dataset_path" in "conf.ini" to the extracted location. The range of test data number is [0-4624]. You can also follow the instructions in the "Data preparation" part to generate testing data together with training data.
In the generation of the dataset, we predicted the initial mesh using [HMR](https://github.com/akanazawa/hmr) and saved it as "/para/\*.json" files. To test on images beyond the dataset, you have to run HMR to get the initial mesh firstly.
## Demo wild
This demo runs for images out of the dataset. Please see [demo_wild/demo_wild.md](/demo_wild/demo_wild.md).
## Data preparation
Please see [datasets/data.md](/datasets/data.md) for detail.
## Training
After data preparation, run the traning of anchor_net and joint_net:
```
conda activate py27-hmd
cd src
python ./train_joint.py
python ./train_anchor.py
python ./train_shading.py
```
If the training data location changed, the "tgt_path" in "/conf.ini" should be changed accordingly.
## Evaluation
Please see [eval/eval.md](/eval/eval.md) for detail.
## Citation
If you find this project useful for your research, please consider citing:
```
@article{zhu2022detailed,
title={Detailed Avatar Recovery from Single Image},
author={Zhu, Hao and Zuo, Xinxin and Yang, Haotian and Wang, Sen and Cao, Xun and Yang, Ruigang},
booktitle={IEEE Transactions on Pattern Analysis and Machine Intelligence},
volume={44},
number={11},
pages={7363--7379},
year={2022},
}
```
```
@inproceedings{zhu2019detailed,
title={Detailed human shape estimation from a single image by hierarchical mesh deformation},
author={Zhu, Hao and Zuo, Xinxin and Wang, Sen and Cao, Xun and Yang, Ruigang},
booktitle={Proceedings of the IEEE/CVF Conference on Computer Vision and Pattern Recognition (CVPR)},
pages={4491--4500},
year={2019}
}
```
================================================
FILE: conf.ini
================================================
[HMR]
hmr_path = /media/hao/Document/Code/hmr/
[DATA]
tgt_path = /media/hao/Document/Data/HybridHuman/
lsp_path = /media/hao/DATA/LSP/lsp_dataset/
lspet_path = /media/hao/DATA/LSP/lspet_dataset/
upi_path = /media/hao/DATA/upi-s1h/data/
coco_api_path = /media/hao/Document/Code/cocoapi/PythonAPI/
coco_list_path = /media/hao/DATA/DensePose_COCO/densepose_coco_2014_train.json
h36m_path = /media/hao/DATA/H36M/
[DEMO]
dataset_path = ../demo/demo_data/
joint_model = ../demo/pretrained_model/pretrained_joint.pth
anchor_model = ../demo/pretrained_model/pretrained_anchor.pth
shading_model = ../demo/pretrained_model/pretrained_shading.pth
================================================
FILE: datasets/COCO.py
================================================
from __future__ import print_function
import numpy as np
import PIL.Image
import skimage.io as io
import pickle
import json
from tqdm import trange
from time import sleep
import os.path
import sys
sys.path.append("../src/")
import renderer as rd
from mesh_edit import fast_deform_dja
from mesh_edit import fast_deform_dsa
from hmr_predictor import hmr_predictor
from hmr_predictor import proc_sil
from utility import make_trimesh
from utility import get_joint_move
from utility import get_achr_move
from utility import points2sil
from utility import get_anchor_posi
from data_filter import coco_filter
from utility import take_notes
from utility import transform_coco_joints
# cofigure coco_api_path
import configparser
conf = configparser.ConfigParser()
conf.read(u'../conf.ini', encoding='utf8')
coco_api_path = conf.get('DATA', 'coco_api_path')
sys.path.append(coco_api_path)
from pycocotools.coco import COCO
# all 10000 are train set
def proc_coco(train_dir, test_dir, train_id, test_id, coco_dataset):
# read dataset
coco=COCO(coco_dataset)
tupleIds = coco.getImgIds(catIds=1) # id = 1 means person
faces = np.load("../predef/smpl_faces.npy")
face_num = len(faces)
hmr_pred = hmr_predictor()
renderer = rd.SMPLRenderer(face_path =
"../predef/smpl_faces.npy")
with open ('../predef/mesh_joint_list.pkl', 'rb') as fp:
mesh_joint = pickle.load(fp)
count_all = 0.
count_work = 0.
total_num = len(tupleIds)
train_num = int(np.floor(total_num*0.8))
# make train set
tr = trange(train_num, desc='Bar desc', leave=True)
for i in tr:
tr.set_description("COCO - train part")
tr.refresh() # to show immediately the update
sleep(0.01)
count_all += 1
# get tuple
one_tuple = coco.loadImgs(tupleIds[i])[0]
img_size = (one_tuple['height'], one_tuple['width'])
crt_id = one_tuple['id']
# get anns
annIds = coco.getAnnIds(imgIds=one_tuple['id'], catIds=1, iscrowd=None)
anns = coco.loadAnns(annIds)
# RULE 1: objects < 5
if len(anns)>4:
#print("filter out by too many objects")
take_notes("COCO %05d BAN -1\n" % (i), "./data_log.txt")
continue
for j in range(len(anns)):
# get sil points
seg_points = anns[j]['segmentation'][0]
# RULE 2: seg_points number >= 80
if len(seg_points)<80:
take_notes("COCO %05d%03d BAN -1\n" % (i, j), "./data_log.txt")
#print("filter out by too few seg_points number")
continue
# get key points
key_points = anns[j]['keypoints']
key_points = np.resize(key_points,(17,3))
# draw sil
sil = points2sil(seg_points, img_size)
result = coco_filter(key_points, sil)
if result is False:
take_notes("COCO %05d BAN -1\n" % (i), "./data_log.txt")
continue
# Here we finally decide to use it
if result is True:
# read image
ori_img = io.imread(one_tuple['coco_url'])
# read sil
src_gt_sil = sil
# hmr predict
verts, cam, proc_para, std_img = hmr_pred.predict(ori_img,
True,
src_gt_sil)
# unnormalize std_img
src_img = ((std_img+1)/2.0*255).astype(np.uint8)
# save img
img_file = "img/COCO_%08d%02d.png" % (crt_id, j)
PIL.Image.fromarray(src_img).save(train_dir + img_file)
# process sil
gt_sil = proc_sil(src_gt_sil, proc_para)
# get proj sil
proj_sil = renderer.silhouette(verts = verts,
cam = cam,
img_size = src_img.shape,
norm = False)
# make TriMesh
mesh = make_trimesh(verts, faces, compute_vn = True)
vert_norms = mesh.vertex_normals()
# get joint move
coco_joints_t = transform_coco_joints(key_points)
new_jv, _, joint_move, joint_posi = get_joint_move(verts,
coco_joints_t,
proc_para,
mesh_joint,
unseen_mode = True,
)
joint_move = joint_move.flatten()
# joint deform
fd_ja = fast_deform_dja(weight = 10.0)
ja_verts = fd_ja.deform(np.asarray(verts), new_jv)
# get achr move
proj_sil_ja = renderer.silhouette(verts = ja_verts,
norm = False)
_, achr_verts, achr_move = get_achr_move(gt_sil,
ja_verts,
vert_norms,
proj_sil_ja)
achr_posi = get_anchor_posi(achr_verts)
# save sil
compose_sil = np.stack((gt_sil, proj_sil, proj_sil_ja))
compose_sil = np.moveaxis(compose_sil, 0, 2)
compose_sil = PIL.Image.fromarray(compose_sil.astype(np.uint8))
compose_sil.save(train_dir + "sil/%08d.png" % train_id)
# save para
proc_para['end_pt'] = proc_para['end_pt'].tolist()
proc_para['start_pt'] = proc_para['start_pt'].tolist()
para = {"verts": verts.tolist(),
"vert_norms": vert_norms.tolist(),
"proc_para": proc_para,
"joint_move": joint_move.tolist(),
"joint_posi": joint_posi.tolist(),
"achr_move": achr_move.tolist(),
"achr_posi": achr_posi.tolist(),
"img_file": img_file,
}
with open(train_dir + "para/%08d.json" % train_id, 'wb') as fp:
json.dump(para, fp)
take_notes("COCO %05d%03d TRAIN %08d\n" % (i, j, train_id),
"./data_log.txt")
train_id += 1
count_work += 1
# make test set
test_num = total_num - train_num
tr = trange(test_num, desc='Bar desc', leave=True)
for i in tr:
tr.set_description("COCO - test part")
tr.refresh() # to show immediately the update
sleep(0.01)
count_all += 1
# get tuple
one_tuple = coco.loadImgs(tupleIds[i+train_num])[0]
img_size = (one_tuple['height'], one_tuple['width'])
crt_id = one_tuple['id']
# get anns
annIds = coco.getAnnIds(imgIds=one_tuple['id'], catIds=1, iscrowd=None)
anns = coco.loadAnns(annIds)
# RULE 1: objects < 4
if len(anns)>3:
#print("filter out by too many objects")
take_notes("COCO %05d BAN -1\n" % (i+train_num), "./data_log.txt")
continue
for j in range(len(anns)):
# get sil points
seg_points = anns[j]['segmentation'][0]
# RULE 2: seg_points number >= 100
if len(seg_points)<100:
take_notes("COCO %05d%03d BAN -1\n" % (i+train_num, j), "./data_log.txt")
#print("filter out by too few seg_points number")
continue
# get key points
key_points = anns[j]['keypoints']
key_points = np.resize(key_points,(17,3))
# draw sil
sil = points2sil(seg_points, img_size)
result = coco_filter(key_points, sil)
if result is False:
take_notes("COCO %05d BAN -1\n" % (i+train_num), "./data_log.txt")
continue
# Here we finally decide to use it
if result is True:
# read image
ori_img = io.imread(one_tuple['coco_url'])
# read sil
src_gt_sil = sil
# hmr predict
verts, cam, proc_para, std_img = hmr_pred.predict(ori_img,
True,
src_gt_sil)
# unnormalize std_img
src_img = ((std_img+1)/2.0*255).astype(np.uint8)
# save img
img_file = "img/COCO_%08d%02d.png" % (crt_id, j)
PIL.Image.fromarray(src_img).save(test_dir + img_file)
# process sil
gt_sil = proc_sil(src_gt_sil, proc_para)
# get proj sil
proj_sil = renderer.silhouette(verts = verts,
cam = cam,
img_size = src_img.shape,
norm = False)
# make TriMesh
mesh = make_trimesh(verts, faces, compute_vn = True)
vert_norms = mesh.vertex_normals()
# get joint move
coco_joints_t = transform_coco_joints(key_points)
new_jv, _, joint_move, joint_posi = get_joint_move(verts,
coco_joints_t,
proc_para,
mesh_joint,
unseen_mode = True,
)
joint_move = joint_move.flatten()
# joint deform
fd_ja = fast_deform_dja(weight = 10.0)
ja_verts = fd_ja.deform(np.asarray(verts), new_jv)
# get achr move
proj_sil_ja = renderer.silhouette(verts = ja_verts,
norm = False)
_, achr_verts, achr_move = get_achr_move(gt_sil,
ja_verts,
vert_norms,
proj_sil_ja)
achr_posi = get_anchor_posi(achr_verts)
# save sil
compose_sil = np.stack((gt_sil, proj_sil, proj_sil_ja))
compose_sil = np.moveaxis(compose_sil, 0, 2)
compose_sil = PIL.Image.fromarray(compose_sil.astype(np.uint8))
compose_sil.save(test_dir + "sil/%08d.png" % test_id)
# save para
proc_para['end_pt'] = proc_para['end_pt'].tolist()
proc_para['start_pt'] = proc_para['start_pt'].tolist()
para = {"verts": verts.tolist(),
"vert_norms": vert_norms.tolist(),
"proc_para": proc_para,
"joint_move": joint_move.tolist(),
"joint_posi": joint_posi.tolist(),
"achr_move": achr_move.tolist(),
"achr_posi": achr_posi.tolist(),
"img_file": img_file,
}
with open(test_dir + "para/%08d.json" % test_id, 'wb') as fp:
json.dump(para, fp)
take_notes("COCO %05d%03d TEST %08d\n" % (i+train_num, j, test_id),
"./data_log.txt")
test_id += 1
count_work += 1
print("work ratio = %f, (%d / %d)"
% (count_work/count_all, count_work, count_all))
return train_id, test_id
================================================
FILE: datasets/H36M.py
================================================
from __future__ import print_function
import sys
sys.path.append("../src/")
import numpy as np
import PIL.Image
import cv2
import cPickle as pickle
import json
from tqdm import trange
from time import sleep
import renderer as rd
from scipy.io import loadmat
from mesh_edit import fast_deform_dja
from mesh_edit import fast_deform_dsa
from hmr_predictor import hmr_predictor
from hmr_predictor import proc_sil
from utility import make_trimesh
from utility import get_joint_move
from utility import get_achr_move
from utility import transform_h36m_joints
from utility import get_anchor_posi
from utility import take_notes
from utility import refine_sil
def proc_h36m(train_dir, test_dir, train_id, test_id, h36m_dir):
sample_interval = 10
faces = np.load("../predef/smpl_faces.npy")
face_num = len(faces)
with open ('../predef/mesh_joint_list.pkl', 'rb') as fp:
mesh_joint = pickle.load(fp)
hmr_pred = hmr_predictor()
renderer = rd.SMPLRenderer(face_path = "../predef/smpl_faces.npy")
# open available video list
with open("./h36m_list.txt") as f:
h36m_list = f.read().split("\r\n")
vid_num = int(h36m_list[0])
h36m_list = [[h36m_list[i*3+1],
h36m_list[i*3+2],
h36m_list[i*3+3]] for i in range(vid_num)]
# compute data number for training and testing
train_num = int(vid_num * 0.8)
test_num = vid_num - train_num
count_all = 0.
count_work = 0.
# make test set
tr = trange(test_num, desc='Bar desc', leave=True)
for i in tr:
tr.set_description("H36M - test part")
tr.refresh() # to show immediately the update
sleep(0.01)
vid_idx = i + train_num
# read video of image, silhouette and pose
vid_img = cv2.VideoCapture(h36m_dir + h36m_list[vid_idx][0])
vid_sil = cv2.VideoCapture(h36m_dir + h36m_list[vid_idx][1])
pose_list = loadmat(h36m_dir + h36m_list[vid_idx][2])['pose']
vid_len = min(int(vid_img.get(cv2.CAP_PROP_FRAME_COUNT)),
int(vid_sil.get(cv2.CAP_PROP_FRAME_COUNT)),
len(pose_list))
for frm_idx in range(0, vid_len, sample_interval):
count_all += 1
# read sil
vid_sil.set(1, frm_idx)
_,src_gt_sil = vid_sil.read()
src_gt_sil[src_gt_sil<128] = 0
src_gt_sil[src_gt_sil>=128] = 255
src_gt_sil = refine_sil(src_gt_sil, 100)
src_gt_sil = src_gt_sil[:, :, 0]
# read ori img
vid_img.set(1, frm_idx)
_,ori_img = vid_img.read()
# BGR to RGB
ori_img = np.stack((ori_img[:,:,2],
ori_img[:,:,1],
ori_img[:,:,0]), axis = 2)
# hmr predict
verts, cam, proc_para, std_img = hmr_pred.predict(ori_img,
True,
src_gt_sil)
# unnormalize std_img
src_img = ((std_img+1).astype(np.float)/2.0*255).astype(np.uint8)
# save img
img_file = "img/H36M_%04d%04d.png" % (vid_idx, frm_idx)
PIL.Image.fromarray(src_img).save(test_dir + img_file)
# process sil
gt_sil = proc_sil(src_gt_sil, proc_para)
# get proj sil
proj_sil = renderer.silhouette(verts = verts,
cam = cam,
img_size = src_img.shape,
norm = False)
# make TriMesh
mesh = make_trimesh(verts, faces, compute_vn = True)
vert_norms = mesh.vertex_normals()
h36m_joint = transform_h36m_joints(pose_list[frm_idx])
# get joint move
new_jv, _, joint_move, joint_posi = get_joint_move(verts,
h36m_joint,
proc_para,
mesh_joint)
joint_move = joint_move.flatten()
# joint deform
fd_ja = fast_deform_dja(weight = 10.0)
ja_verts = fd_ja.deform(np.asarray(verts), new_jv)
# get achr move
proj_sil_ja = renderer.silhouette(verts = ja_verts,
norm = False)
_, achr_verts, achr_move = get_achr_move(gt_sil,
ja_verts,
vert_norms,
proj_sil_ja)
achr_posi = get_anchor_posi(achr_verts)
# save sil
compose_sil = np.stack((gt_sil, proj_sil, proj_sil_ja))
compose_sil = np.moveaxis(compose_sil, 0, 2)
compose_sil = PIL.Image.fromarray(compose_sil.astype(np.uint8))
compose_sil.save(test_dir + "sil/%08d.png" % test_id)
# save para
proc_para['end_pt'] = proc_para['end_pt'].tolist()
proc_para['start_pt'] = proc_para['start_pt'].tolist()
para = {"verts": verts.tolist(),
"vert_norms": vert_norms.tolist(),
"proc_para": proc_para,
"joint_move": joint_move.tolist(),
"joint_posi": joint_posi.tolist(),
"achr_move": achr_move.tolist(),
"achr_posi": achr_posi.tolist(),
"img_file": img_file,
}
with open(test_dir + "para/%08d.json" % test_id, 'wb') as fp:
json.dump(para, fp)
take_notes("H36M %04d%04d TEST %08d\n" % (vid_idx, frm_idx,
test_id), "./data_log.txt")
test_id += 1
count_work += 1
print("work ratio = %f, (%d / %d)"
% (count_work/count_all, count_work, count_all))
return train_id, test_id
================================================
FILE: datasets/LSP.py
================================================
from __future__ import print_function
import sys
sys.path.append("../src/")
import numpy as np
import PIL.Image
import pickle
import json
from tqdm import trange
from time import sleep
import renderer as rd
from scipy.io import loadmat
from mesh_edit import fast_deform_dja
from mesh_edit import fast_deform_dsa
from hmr_predictor import hmr_predictor
from hmr_predictor import proc_sil
from utility import make_trimesh
from utility import get_joint_move
from utility import get_achr_move
from utility import get_anchor_posi
from data_filter import lsp_filter
from utility import take_notes
# first 1000 are train set, last 1000 are test set
def proc_lsp(train_dir, test_dir, train_id, test_id, lsp_dir, upi_dir):
faces = np.load("../predef/smpl_faces.npy")
face_num = len(faces)
hmr_pred = hmr_predictor()
renderer = rd.SMPLRenderer(face_path =
"../predef/smpl_faces.npy")
lsp_joints = loadmat(lsp_dir + "joints.mat")['joints']
with open ('../predef/mesh_joint_list.pkl', 'rb') as fp:
mesh_joint = pickle.load(fp)
count_all = 0.
count_work = 0.
# make train set
tr = trange(1000, desc='Bar desc', leave=True)
for i in tr:
tr.set_description("LSP - train part")
tr.refresh() # to show immediately the update
sleep(0.01)
count_all += 1
# read sil
src_gt_sil = np.array(PIL.Image.open(
upi_dir + "lsp/im%04d_segmentation.png"%(i+1)))
# judge using filter
result = lsp_filter(lsp_joints[:,:,i], src_gt_sil)
if result is False:
take_notes("LSP %04d BAN -1\n" % (i+1), "./data_log.txt")
continue
# read ori img
ori_img = np.array(PIL.Image.open(
lsp_dir + "images/im%04d.jpg"%(i+1)))
# hmr predict
verts, cam, proc_para, std_img = hmr_pred.predict(ori_img)
# unnormalize std_img
src_img = ((std_img+1).astype(np.float)/2.0*255).astype(np.uint8)
# save img
img_file = "img/LSP_%08d.png" % (i+1)
PIL.Image.fromarray(src_img).save(train_dir + img_file)
# process sil
gt_sil = proc_sil(src_gt_sil, proc_para)
# get proj sil
proj_sil = renderer.silhouette(verts = verts,
cam = cam,
img_size = src_img.shape,
norm = False)
# make TriMesh
mesh = make_trimesh(verts, faces, compute_vn = True)
vert_norms = mesh.vertex_normals()
# get joint move
new_jv, _, joint_move, joint_posi = get_joint_move(verts,
lsp_joints[:,:,i],
proc_para,
mesh_joint)
joint_move = joint_move.flatten()
# joint deform
fd_ja = fast_deform_dja(weight = 10.0)
ja_verts = fd_ja.deform(np.asarray(verts), new_jv)
# get achr move
proj_sil_ja = renderer.silhouette(verts = ja_verts,
norm = False)
_, achr_verts, achr_move = get_achr_move(gt_sil,
ja_verts,
vert_norms,
proj_sil_ja)
achr_posi = get_anchor_posi(achr_verts)
# save sil
compose_sil = np.stack((gt_sil, proj_sil, proj_sil_ja))
compose_sil = np.moveaxis(compose_sil, 0, 2)
compose_sil = PIL.Image.fromarray(compose_sil.astype(np.uint8))
compose_sil.save(train_dir + "sil/%08d.png" % train_id)
# save para
proc_para['end_pt'] = proc_para['end_pt'].tolist()
proc_para['start_pt'] = proc_para['start_pt'].tolist()
para = {"verts": verts.tolist(),
"vert_norms": vert_norms.tolist(),
"proc_para": proc_para,
"joint_move": joint_move.tolist(),
"joint_posi": joint_posi.tolist(),
"achr_move": achr_move.tolist(),
"achr_posi": achr_posi.tolist(),
"img_file": img_file,
}
with open(train_dir + "para/%08d.json" % train_id, 'wb') as fp:
json.dump(para, fp)
take_notes("LSP %04d TRAIN %08d\n" % (i+1, train_id), "./data_log.txt")
train_id += 1
count_work += 1
#make test set
tr = trange(1000, desc='Bar desc', leave=True)
for i in tr:
tr.set_description("LSP - test part")
tr.refresh() # to show immediately the update
sleep(0.01)
count_all += 1
# read sil
src_gt_sil = np.array(PIL.Image.open(
upi_dir + "lsp/im%04d_segmentation.png"%(i+1001)))
# judge using filter
result = lsp_filter(lsp_joints[:,:,i], src_gt_sil)
if result is False:
take_notes("LSP %04d BAN -1\n" % (i+1), "./data_log.txt")
continue
# read ori img
ori_img = np.array(PIL.Image.open(
lsp_dir + "images/im%04d.jpg"%(i+1001)))
# hmr predict
verts, cam, proc_para, std_img = hmr_pred.predict(ori_img)
# unnormalize std_img
src_img = ((std_img+1).astype(np.float)/2.0*255).astype(np.uint8)
# save img
img_file = "img/LSP_%08d.png" % (i+1001)
PIL.Image.fromarray(src_img).save(test_dir + img_file)
# process sil
gt_sil = proc_sil(src_gt_sil, proc_para)
# get proj sil
proj_sil = renderer.silhouette(verts = verts,
cam = cam,
img_size = src_img.shape,
norm = False)
# make TriMesh
mesh = make_trimesh(verts, faces, compute_vn = True)
vert_norms = mesh.vertex_normals()
# get joint move
new_jv, _, joint_move, joint_posi = get_joint_move(verts,
lsp_joints[:,:,i+1000],
proc_para,
mesh_joint)
joint_move = joint_move.flatten()
# joint deform
fd_ja = fast_deform_dja(weight = 10.0)
ja_verts = fd_ja.deform(np.asarray(verts), new_jv)
# get achr move
proj_sil_ja = renderer.silhouette(verts = ja_verts,
norm = False)
_, achr_verts, achr_move = get_achr_move(gt_sil,
ja_verts,
vert_norms,
proj_sil_ja)
achr_posi = get_anchor_posi(achr_verts)
# save sil
compose_sil = np.stack((gt_sil, proj_sil, proj_sil_ja))
compose_sil = np.moveaxis(compose_sil, 0, 2)
compose_sil = PIL.Image.fromarray(compose_sil.astype(np.uint8))
compose_sil.save(test_dir + "sil/%08d.png" % test_id)
proc_para['end_pt'] = proc_para['end_pt'].tolist()
proc_para['start_pt'] = proc_para['start_pt'].tolist()
# save para
para = {"verts": verts.tolist(),
"vert_norms": vert_norms.tolist(),
"proc_para": proc_para,
"joint_move": joint_move.tolist(),
"joint_posi": joint_posi.tolist(),
"achr_move": achr_move.tolist(),
"achr_posi": achr_posi.tolist(),
"img_file": img_file,
}
with open(test_dir + "para/%08d.json" % test_id, 'wb') as fp:
json.dump(para, fp)
take_notes("LSP %04d TEST %08d\n" % (i+1001, test_id),
"./data_log.txt")
test_id += 1
count_work += 1
print("work ratio = %f, (%d / %d)"
% (count_work/count_all, count_work, count_all))
return train_id, test_id
================================================
FILE: datasets/LSPET.py
================================================
from __future__ import print_function
import numpy as np
import PIL.Image
import pickle
import json
from tqdm import trange
from time import sleep
import os.path
import sys
sys.path.append("../src/")
import renderer as rd
from scipy.io import loadmat
from mesh_edit import fast_deform_dja
from mesh_edit import fast_deform_dsa
from hmr_predictor import hmr_predictor
from hmr_predictor import proc_sil
from utility import make_trimesh
from utility import get_joint_move
from utility import get_achr_move
from utility import get_anchor_posi
from data_filter import lspet_filter
from utility import take_notes
# all 10000 are train set
def proc_lspet(train_dir, train_id, lspet_dir, upi_dir):
faces = np.load("../predef/smpl_faces.npy")
face_num = len(faces)
hmr_pred = hmr_predictor()
renderer = rd.SMPLRenderer(face_path =
"../predef/smpl_faces.npy")
lspet_joints = loadmat(lspet_dir + "joints.mat")['joints']
# roll axis because the definition order of lspet is different from lsp
lspet_joints = np.rollaxis(lspet_joints,1,0)
with open ('../predef/mesh_joint_list.pkl', 'rb') as fp:
mesh_joint = pickle.load(fp)
count_all = 0.
count_work = 0.
# make train set
tr = trange(10000, desc='Bar desc', leave=True)
for i in tr:
tr.set_description("LSPET - train part")
tr.refresh() # to show immediately the update
sleep(0.01)
count_all += 1
# judge if sil file exists, if not, skip it
if not os.path.isfile(upi_dir + \
"lsp_extended/im%05d_segmentation.png"%(i+1)):
take_notes("LSPET %05d BAN -1\n" % (i+1), "./data_log.txt")
continue
# read sil
src_gt_sil = np.array(PIL.Image.open(upi_dir + \
"lsp_extended/im%05d_segmentation.png"%(i+1)))[:,:,0]
# judge using filter
result = lspet_filter(lspet_joints[:,:,i], src_gt_sil)
if result is False:
take_notes("LSPET %05d BAN -1\n" % (i+1), "./data_log.txt")
continue
# read ori img
ori_img = np.array(PIL.Image.open(
lspet_dir + "images/im%05d.jpg"%(i+1)))
# hmr predict
verts, cam, proc_para, std_img = hmr_pred.predict(ori_img,
True,
src_gt_sil)
# unnormalize std_img
src_img = ((std_img+1).astype(np.float)/2.0*255).astype(np.uint8)
# save img
img_file = "img/LSPET_%08d.png" % (i + 1)
PIL.Image.fromarray(src_img).save(train_dir + img_file)
# process sil
gt_sil = proc_sil(src_gt_sil, proc_para)
# get proj sil
proj_sil = renderer.silhouette(verts = verts,
cam = cam,
img_size = src_img.shape,
norm = False)
# make TriMesh
mesh = make_trimesh(verts, faces, compute_vn = True)
vert_norms = mesh.vertex_normals()
# get joint move
new_jv, _, joint_move, joint_posi = get_joint_move(verts,
lspet_joints[:,:,i],
proc_para,
mesh_joint,
unseen_mode = True)
joint_move = joint_move.flatten()
# joint deform
fd_ja = fast_deform_dja(weight = 10.0)
ja_verts = fd_ja.deform(np.asarray(verts), new_jv)
# get achr move
proj_sil_ja = renderer.silhouette(verts = ja_verts,
norm = False)
_, achr_verts, achr_move = get_achr_move(gt_sil,
ja_verts,
vert_norms,
proj_sil_ja)
achr_posi = get_anchor_posi(achr_verts)
# save sil
compose_sil = np.stack((gt_sil, proj_sil, proj_sil_ja))
compose_sil = np.moveaxis(compose_sil, 0, 2)
compose_sil = PIL.Image.fromarray(compose_sil.astype(np.uint8))
compose_sil.save(train_dir + "sil/%08d.png" % train_id)
# save para
proc_para['end_pt'] = proc_para['end_pt'].tolist()
proc_para['start_pt'] = proc_para['start_pt'].tolist()
para = {"verts": verts.tolist(),
"vert_norms": vert_norms.tolist(),
"proc_para": proc_para,
"joint_move": joint_move.tolist(),
"joint_posi": joint_posi.tolist(),
"achr_move": achr_move.tolist(),
"achr_posi": achr_posi.tolist(),
"img_file": img_file,
}
with open(train_dir + "para/%08d.json" % train_id, 'wb') as fp:
json.dump(para, fp)
take_notes("LSPET %05d TRAIN %08d\n" % (i+1, train_id),
"./data_log.txt")
train_id += 1
count_work += 1
print("work ratio = %f, (%d / %d)"
% (count_work/count_all, count_work, count_all))
return train_id
================================================
FILE: datasets/MPII.py
================================================
from __future__ import print_function
import sys
sys.path.append("../src/")
import numpy as np
import PIL.Image
import cPickle as pickle
import json
from tqdm import trange
from time import sleep
import renderer as rd
from scipy.io import loadmat
from mesh_edit import fast_deform_dja
from mesh_edit import fast_deform_dsa
from hmr_predictor import hmr_predictor
from hmr_predictor import proc_sil
from utility import make_trimesh
from utility import get_joint_move
from utility import get_achr_move
from utility import transform_mpii_joints
from utility import get_anchor_posi
from data_filter import mpii_filter
from utility import take_notes
#train num: 10424, test num: 2606
#0:10424 --> 8642:19065
#10424:13030 --> 1000:3606
def proc_mpii(train_dir, test_dir, train_id, test_id, upi_dir):
mpii_dir = upi_dir + "data/mpii/"
faces = np.load("../predef/smpl_faces.npy")
face_num = len(faces)
hmr_pred = hmr_predictor()
renderer = rd.SMPLRenderer(face_path = "../predef/smpl_faces.npy")
mpii_joints_o = np.load(mpii_dir + "poses.npz")['poses']
mpii_joints = transform_mpii_joints(mpii_joints_o)
with open ('../predef/mesh_joint_list.pkl', 'rb') as fp:
mesh_joint = pickle.load(fp)
count_all = 0.
count_work = 0.
# make train set
tr = trange(10424, desc='Bar desc', leave=True)
for i in tr:
tr.set_description("MPII - train part")
tr.refresh() # to show immediately the update
sleep(0.01)
count_all += 1
# read sil
src_gt_sil = np.array(PIL.Image.open(mpii_dir + \
"images/%05d_segmentation.png"%(i+1)))[:,:,0]
# judge using filter
result = mpii_filter(mpii_joints[:,:,i], src_gt_sil)
if result is False:
take_notes("MPII %05d BAN -1\n" % (i+1), "./data_log.txt")
continue
# read ori img
ori_img = np.array(PIL.Image.open(
mpii_dir + "images/%05d.png"%(i+1)))
# hmr predict
verts, cam, proc_para, std_img = hmr_pred.predict(ori_img,
True,
src_gt_sil)
# unnormalize std_img
src_img = ((std_img+1).astype(np.float)/2.0*255).astype(np.uint8)
# save img
img_file = "img/MPII_%08d.png" % (i + 1)
PIL.Image.fromarray(src_img).save(train_dir + img_file)
# process sil
gt_sil = proc_sil(src_gt_sil, proc_para)
# get proj sil
proj_sil = renderer.silhouette(verts = verts,
cam = cam,
img_size = src_img.shape,
norm = False)
# make TriMesh
mesh = make_trimesh(verts, faces, compute_vn = True)
vert_norms = mesh.vertex_normals()
# get joint move
new_jv, _, joint_move, joint_posi = get_joint_move(verts,
mpii_joints[:,:,i],
proc_para,
mesh_joint)
joint_move = joint_move.flatten()
# joint deform
fd_ja = fast_deform_dja(weight = 10.0)
ja_verts = fd_ja.deform(np.asarray(verts), new_jv)
# get achr move
proj_sil_ja = renderer.silhouette(verts = ja_verts,
norm = False)
_, achr_verts, achr_move = get_achr_move(gt_sil,
ja_verts,
vert_norms,
proj_sil_ja)
achr_posi = get_anchor_posi(achr_verts)
# save sil
compose_sil = np.stack((gt_sil, proj_sil, proj_sil_ja))
compose_sil = np.moveaxis(compose_sil, 0, 2)
compose_sil = PIL.Image.fromarray(compose_sil.astype(np.uint8))
compose_sil.save(train_dir + "sil/%08d.png" % train_id)
# save para
proc_para['end_pt'] = proc_para['end_pt'].tolist()
proc_para['start_pt'] = proc_para['start_pt'].tolist()
para = {"verts": verts.tolist(),
"vert_norms": vert_norms.tolist(),
"proc_para": proc_para,
"joint_move": joint_move.tolist(),
"joint_posi": joint_posi.tolist(),
"achr_move": achr_move.tolist(),
"achr_posi": achr_posi.tolist(),
"img_file": img_file,
}
with open(train_dir + "para/%08d.json" % train_id, 'wb') as fp:
json.dump(para, fp)
take_notes("MPII %05d TRAIN %08d\n" % (i+1, train_id),
"./data_log.txt")
train_id += 1
count_work += 1
#make test set
tr = trange(2606, desc='Bar desc', leave=True)
for i in tr:
tr.set_description("MPII - test part")
tr.refresh() # to show immediately the update
sleep(0.01)
count_all += 1
# read sil
src_gt_sil = np.array(PIL.Image.open(mpii_dir + \
"images/%05d_segmentation.png"%(i+10425)))[:,:,0]
# judge using filter
result = mpii_filter(mpii_joints[:,:,i+10424], src_gt_sil)
if result is False:
take_notes("MPII %05d BAN -1\n" % (i+10425), "./data_log.txt")
continue
# read ori img
ori_img = np.array(PIL.Image.open(
mpii_dir + "images/%05d.png"%(i+10425)))
# hmr predict
verts, cam, proc_para, std_img = hmr_pred.predict(ori_img,
True,
src_gt_sil)
# unnormalize std_img
src_img = ((std_img+1).astype(np.float)/2.0*255).astype(np.uint8)
# save img
img_file = "img/MPII_%08d.png" % (i+10425)
PIL.Image.fromarray(src_img).save(test_dir + img_file)
# process sil
gt_sil = proc_sil(src_gt_sil, proc_para)
# get proj sil
proj_sil = renderer.silhouette(verts = verts,
cam = cam,
img_size = src_img.shape,
norm = False)
# make TriMesh
mesh = make_trimesh(verts, faces, compute_vn = True)
vert_norms = mesh.vertex_normals()
# get joint move
new_jv, _, joint_move, joint_posi = get_joint_move(verts,
mpii_joints[:,:,i+10424],
proc_para,
mesh_joint)
joint_move = joint_move.flatten()
# joint deform
fd_ja = fast_deform_dja(weight = 10.0)
ja_verts = fd_ja.deform(np.asarray(verts), new_jv)
# get achr move
proj_sil_ja = renderer.silhouette(verts = ja_verts,
norm = False)
_, achr_verts, achr_move = get_achr_move(gt_sil,
ja_verts,
vert_norms,
proj_sil_ja)
achr_posi = get_anchor_posi(achr_verts)
# save sil
compose_sil = np.stack((gt_sil, proj_sil, proj_sil_ja))
compose_sil = np.moveaxis(compose_sil, 0, 2)
compose_sil = PIL.Image.fromarray(compose_sil.astype(np.uint8))
compose_sil.save(test_dir + "sil/%08d.png" % test_id)
# save para
proc_para['end_pt'] = proc_para['end_pt'].tolist()
proc_para['start_pt'] = proc_para['start_pt'].tolist()
para = {"verts": verts.tolist(),
"vert_norms": vert_norms.tolist(),
"proc_para": proc_para,
"joint_move": joint_move.tolist(),
"joint_posi": joint_posi.tolist(),
"achr_move": achr_move.tolist(),
"achr_posi": achr_posi.tolist(),
"img_file": img_file,
}
with open(test_dir + "para/%08d.json" % test_id, 'wb') as fp:
json.dump(para, fp)
take_notes("MPII %05d TEST %08d\n" % (i+10425, test_id),
"./data_log.txt")
test_id += 1
count_work += 1
print("work ratio = %f, (%d / %d)"
% (count_work/count_all, count_work, count_all))
return train_id, test_id
================================================
FILE: datasets/data.md
================================================
## Despription
We assemble a quite large dataset (named as WILD dataset in the paper) for training and testing by extracting from 5 human datasets, including Leeds Sport Pose dataset (LSP) and its extension dataset (LSPet), MPII human pose database (MPII), Common Objects in Context dataset (COCO), and Human3.6M dataset (H36M).
We filter out images with incomplete human or low-quality silhouette, and re-arrange the data in the order of "LSP - LSPET - MPII - COCO - H36M". A data log will be produced during the generation. In each line, the log is written as:
```
[src_dataset] [src_num] [data_type] [new_num]
```
+ [src_dataset]: enum {LSP, LSPET, MPII, COCO, H36M}.
+ [src_num]: ID number in the source dataset.
+ [data_type]: enum {TRAIN (select as training data), TEST (select as testing data), BAN (not selected)}
+ [new_num]: ID number in the WILD dataset.
This will help trace the source of each tuple of the data.
## HMR configure
We use HMR to predict the initial shape for our method. In order to speed up the training, we pre-compute the HMR results and save them in the dataset. The HMR results include predicted keypoint position, SMPL mesh, rendered silhouette and other related attributes. HMR repository is required during the data processing. Please follow the instructions [here](https://github.com/akanazawa/hmr/blob/master/README.md) to setup the enviroment for HMR, and make sure the basic demo in HMR works. Then set the HMR location to *HMR_PATH* in "/conf.ini".
## Data acquire
Download and extract the source data, then set the path in the [DATA] part of "/conf.ini" as following:
+ **LSP**. Acquire the data from http://sam.johnson.io/research/lsp.html by clicking "Download (ZIP file)". Extract the data and set the extracting path to *lsp_path*.
+ **LSPet**. Acquire the data from http://sam.johnson.io/research/lspet.html by clicking "Dataset (ZIP file)". Extract the data and set the extracting path to *lspet_path*.
+ **UP** (contains MPII Human Shape data). Acquire the data from http://files.is.tuebingen.mpg.de/classner/up/ by clicking "UPi-S1h (26,294 images, 44.3Gb)". Extract the data and set the extracting path to *upi_path*.
+ **H36M**. Acquire the data from http://vision.imar.ro/human3.6m/description.php. Register and apply for the access to the data. The selectedd data are listed in "h36m_list.txt". Extract the data and set the extracting path to *h36m_path*. The joints in H36M dataset are saved in cdf files. As the cdf accessor in python is quite difficult to install, we use matlab to tansform all the *.cdf* files to *.mat* files, which are easier to access in python. The transforming script is saved in *h36m_cdf2mat.m*.
+ **COCO**. Visit http://cocodataset.org/#download to download the COCO API, then set the API path to *coco_api_path*. COCO data is stored online, so the data will be downloaded through the API while processing. Download the data list (json file) for densepose as following and set the path to *coco_list_path*:
```
cd $certain path$
wget https://dl.fbaipublicfiles.com/densepose/densepose_coco_2014_train.json
```
**Note:** Please follow the license agreements of the above-mentioned datasets.
## Run the processing
Finally, set the path to save the dataset in *tgt_path* and run the processing:
```
cd datasets
python proc_all_data.py
```
The dataset requires 26 GB space, and the processing will last for roughly 11 hours. We provide the download links of testing set in *Demo* part.
================================================
FILE: datasets/data_filter.py
================================================
import numpy as np
import scipy.ndimage
# select from LSPET dataset
# RULE: TESTED
# (1) valid point number >=12
# (2) all joints are inside image (ignore invalid joints)
# (3) all joints are inside silhouette (sils are morphology dilated)
def lsp_filter(joints, sil):
# make sil one channel
if len(sil.shape) == 3:
sil = sil[:, :, 0]
sil = scipy.ndimage.morphology.binary_dilation(sil, iterations = 2)
invalid_num = np.sum(joints[2,:])
if invalid_num > 5:
#print("filtered due to too few valid points")
return False
for i in range(14):
if joints[2,i] == 0:
continue
x = int(joints[0,i])
y = int(joints[1,i])
if x>=sil.shape[1] or y>=sil.shape[0] or x<0 or y<0:
#print("filtered due to outside image")
return False
if sil[y, x] == 0:
#print("filtered due to outside sil")
return False
return True
# select from LSPET dataset
# RULE: TESTED
# (1) valid point number >=12
# (2) all joints are inside image (ignore invalid joints)
# (3) all joints are inside silhouette (sils are morphology dilated)
def lspet_filter(joints, sil):
# make sil one channel
if len(sil.shape) == 3:
sil = sil[:, :, 0]
# to wipe out the region out side the silhouette but occur due to the
# the existence of joint point, refer to #00007 in LSPET dataset
sil = scipy.ndimage.morphology.binary_erosion(sil, iterations = 1)
sil = scipy.ndimage.morphology.binary_dilation(sil, iterations = 2)
valid_num = np.sum(joints[2,:])
if valid_num < 12:
#print("filtered due to too few valid points")
return False
for i in range(14):
if joints[2,i] == 0:
continue
x = int(joints[0,i])
y = int(joints[1,i])
if x>=sil.shape[1] or y>=sil.shape[0] or x<0 or y<0:
#print("filtered due to outside image")
return False
if sil[y, x] == 0:
#print("filtered due to outside sil")
return False
return True
# select from MPII dataset
# RULE: TESTED
# (1) all joints are inside image
# (2) all joints are inside sil (sils are morphology dilated, for head joint)
def mpii_filter(joints, sil):
# make sil one channel
if len(sil.shape) == 3:
sil = sil[:, :, 0]
sil = scipy.ndimage.morphology.binary_dilation(sil, iterations = 2)
for i in range(14):
x = int(joints[0,i])
y = int(joints[1,i])
if x>=sil.shape[1] or y>=sil.shape[0] or x<0 or y<0:
#print("filtered due to outside image")
return False
if sil[y, x] == 0:
#print("filtered due to outside sil")
return False
return True
# select from COCO dataset
# RULE: TESTED
# (1) object num = 1; # this is done before this function run
# (2) silhouetee seg_points number > 100 # this is done before this function run
# (3) non-zero key points >=14;
# (4) all key points are inside image
# (5) all key points are in silhouette
def coco_filter(key_points, sil):
# count key points number
kp_num = 17
for i in range(17):
if np.array_equal(key_points[i], np.array([0, 0, 0])):
kp_num -= 1
# filter if kp is too few
if kp_num < 12:
#print("filter out by too few key points")
return False
# check if all kps are in image and sil
for i in range(len(key_points)):
if i < 5:
# head points always outside the sil
continue
x = int(key_points[i,0])
y = int(key_points[i,1])
if x>=sil.shape[1] or y>=sil.shape[0] or x<0 or y<0:
#print("filtered due to outside image")
return False
if sil[y, x] == 0:
#print("filtered due to outside sil")
return False
return True
================================================
FILE: datasets/h36m_cdf2mat.m
================================================
% This script is the pre-process for h36m dataset processing.
% H36M dataset save the pose sequence as cdf file, which require complex
% dependencies to open in python. So we use matlab to transform all cdf
% files to mat files before processing.
% Before running the script, please set the h36m_path (line 13) to your
% H36M unzip path.
clc
clear all
h36m_path = '/media/hao/DATA/H36M/';
h36m_list = fileread('./h36m_list.txt');
h36m_list = strsplit(h36m_list, '\r\n');
num = str2num(h36m_list{1});
for i=1:num
src_file = strcat(h36m_path, h36m_list{i*3+1}(1:end-3), 'cdf');
tgt_file = strcat(h36m_path, h36m_list{i*3+1});
content = cdfread(src_file);
pose = content{1};
save(tgt_file, 'pose')
end
disp('Done')
================================================
FILE: datasets/h36m_list.txt
================================================
35
Videos_Directions/S1/Videos/Directions 1.54138969.mp4
Segments_gt_bs_Directions/S1/MySegmentsMat/ground_truth_bs/Directions 1.54138969.mp4
Poses_D2_Positions_Directions/S1/MyPoseFeatures/D2_Positions/Directions 1.54138969.mat
Videos_Directions/S1/Videos/Directions 1.58860488.mp4
Segments_gt_bs_Directions/S1/MySegmentsMat/ground_truth_bs/Directions 1.58860488.mp4
Poses_D2_Positions_Directions/S1/MyPoseFeatures/D2_Positions/Directions 1.58860488.mat
Videos_Directions/S11/Videos/Directions 1.54138969.mp4
Segments_gt_bs_Directions/S11/MySegmentsMat/ground_truth_bs/Directions 1.54138969.mp4
Poses_D2_Positions_Directions/S11/MyPoseFeatures/D2_Positions/Directions 1.54138969.mat
Videos_Directions/S11/Videos/Directions 1.55011271.mp4
Segments_gt_bs_Directions/S11/MySegmentsMat/ground_truth_bs/Directions 1.55011271.mp4
Poses_D2_Positions_Directions/S11/MyPoseFeatures/D2_Positions/Directions 1.55011271.mat
Videos_Directions/S11/Videos/Directions 1.58860488.mp4
Segments_gt_bs_Directions/S11/MySegmentsMat/ground_truth_bs/Directions 1.58860488.mp4
Poses_D2_Positions_Directions/S11/MyPoseFeatures/D2_Positions/Directions 1.58860488.mat
Videos_Directions/S11/Videos/Directions 1.60457274.mp4
Segments_gt_bs_Directions/S11/MySegmentsMat/ground_truth_bs/Directions 1.60457274.mp4
Poses_D2_Positions_Directions/S11/MyPoseFeatures/D2_Positions/Directions 1.60457274.mat
Videos_Directions/S6/Videos/Directions 1.54138969.mp4
Segments_gt_bs_Directions/S6/MySegmentsMat/ground_truth_bs/Directions 1.54138969.mp4
Poses_D2_Positions_Directions/S6/MyPoseFeatures/D2_Positions/Directions 1.54138969.mat
Videos_Directions/S6/Videos/Directions 1.58860488.mp4
Segments_gt_bs_Directions/S6/MySegmentsMat/ground_truth_bs/Directions 1.58860488.mp4
Poses_D2_Positions_Directions/S6/MyPoseFeatures/D2_Positions/Directions 1.58860488.mat
Videos_Directions/S9/Videos/Directions 1.58860488.mp4
Segments_gt_bs_Directions/S9/MySegmentsMat/ground_truth_bs/Directions 1.58860488.mp4
Poses_D2_Positions_Directions/S9/MyPoseFeatures/D2_Positions/Directions 1.58860488.mat
Videos_Discussion/S1/Videos/Discussion 1.54138969.mp4
Segments_gt_bs_Discussion/S1/MySegmentsMat/ground_truth_bs/Discussion 1.54138969.mp4
Poses_D2_Positions_Discussion/S1/MyPoseFeatures/D2_Positions/Discussion 1.54138969.mat
Videos_Discussion/S1/Videos/Discussion 1.55011271.mp4
Segments_gt_bs_Discussion/S1/MySegmentsMat/ground_truth_bs/Discussion 1.55011271.mp4
Poses_D2_Positions_Discussion/S1/MyPoseFeatures/D2_Positions/Discussion 1.55011271.mat
Videos_Discussion/S11/Videos/Discussion 1.54138969.mp4
Segments_gt_bs_Discussion/S11/MySegmentsMat/ground_truth_bs/Discussion 1.54138969.mp4
Poses_D2_Positions_Discussion/S11/MyPoseFeatures/D2_Positions/Discussion 1.54138969.mat
Videos_Discussion/S11/Videos/Discussion 1.55011271.mp4
Segments_gt_bs_Discussion/S11/MySegmentsMat/ground_truth_bs/Discussion 1.55011271.mp4
Poses_D2_Positions_Discussion/S11/MyPoseFeatures/D2_Positions/Discussion 1.55011271.mat
Videos_Discussion/S11/Videos/Discussion 1.58860488.mp4
Segments_gt_bs_Discussion/S11/MySegmentsMat/ground_truth_bs/Discussion 1.58860488.mp4
Poses_D2_Positions_Discussion/S11/MyPoseFeatures/D2_Positions/Discussion 1.58860488.mat
Videos_Discussion/S11/Videos/Discussion 1.60457274.mp4
Segments_gt_bs_Discussion/S11/MySegmentsMat/ground_truth_bs/Discussion 1.60457274.mp4
Poses_D2_Positions_Discussion/S11/MyPoseFeatures/D2_Positions/Discussion 1.60457274.mat
Videos_Discussion/S11/Videos/Discussion 2.54138969.mp4
Segments_gt_bs_Discussion/S11/MySegmentsMat/ground_truth_bs/Discussion 2.54138969.mp4
Poses_D2_Positions_Discussion/S11/MyPoseFeatures/D2_Positions/Discussion 2.54138969.mat
Videos_Discussion/S11/Videos/Discussion 2.58860488.mp4
Segments_gt_bs_Discussion/S11/MySegmentsMat/ground_truth_bs/Discussion 2.58860488.mp4
Poses_D2_Positions_Discussion/S11/MyPoseFeatures/D2_Positions/Discussion 2.58860488.mat
Videos_Discussion/S8/Videos/Discussion 1.58860488.mp4
Segments_gt_bs_Discussion/S8/MySegmentsMat/ground_truth_bs/Discussion 1.58860488.mp4
Poses_D2_Positions_Discussion/S8/MyPoseFeatures/D2_Positions/Discussion 1.58860488.mat
Videos_Greeting/S11/Videos/Greeting 2.54138969.mp4
Segments_gt_bs_Greeting/S11/MySegmentsMat/ground_truth_bs/Greeting 2.54138969.mp4
Poses_D2_Positions_Greeting/S11/MyPoseFeatures/D2_Positions/Greeting 2.54138969.mat
Videos_Posing/S1/Videos/Posing 1.54138969.mp4
Segments_gt_bs_Posing/S1/MySegmentsMat/ground_truth_bs/Posing 1.54138969.mp4
Poses_D2_Positions_Posing/S1/MyPoseFeatures/D2_Positions/Posing 1.54138969.mat
Videos_Posing/S11/Videos/Posing 1.54138969.mp4
Segments_gt_bs_Posing/S11/MySegmentsMat/ground_truth_bs/Posing 1.54138969.mp4
Poses_D2_Positions_Posing/S11/MyPoseFeatures/D2_Positions/Posing 1.54138969.mat
Videos_Posing/S7/Videos/Posing 1.54138969.mp4
Segments_gt_bs_Posing/S7/MySegmentsMat/ground_truth_bs/Posing 1.54138969.mp4
Poses_D2_Positions_Posing/S7/MyPoseFeatures/D2_Positions/Posing 1.54138969.mat
Videos_Posing/S9/Videos/Posing 1.54138969.mp4
Segments_gt_bs_Posing/S9/MySegmentsMat/ground_truth_bs/Posing 1.54138969.mp4
Poses_D2_Positions_Posing/S9/MyPoseFeatures/D2_Positions/Posing 1.54138969.mat
Videos_Purchases/S1/Videos/Purchases 1.60457274.mp4
Segments_gt_bs_Purchases/S1/MySegmentsMat/ground_truth_bs/Purchases 1.60457274.mp4
Poses_D2_Positions_Purchases/S1/MyPoseFeatures/D2_Positions/Purchases 1.60457274.mat
Videos_Taking_Photo/S1/Videos/TakingPhoto 1.54138969.mp4
Segments_gt_bs_Taking_Photo/S1/MySegmentsMat/ground_truth_bs/TakingPhoto 1.54138969.mp4
Poses_D2_Positions_Taking_Photo/S1/MyPoseFeatures/D2_Positions/TakingPhoto 1.54138969.mat
Videos_Taking_Photo/S1/Videos/TakingPhoto 1.58860488.mp4
Segments_gt_bs_Taking_Photo/S1/MySegmentsMat/ground_truth_bs/TakingPhoto 1.58860488.mp4
Poses_D2_Positions_Taking_Photo/S1/MyPoseFeatures/D2_Positions/TakingPhoto 1.58860488.mat
Videos_Taking_Photo/S7/Videos/Photo 1.54138969.mp4
Segments_gt_bs_Taking_Photo/S7/MySegmentsMat/ground_truth_bs/Photo 1.54138969.mp4
Poses_D2_Positions_Taking_Photo/S7/MyPoseFeatures/D2_Positions/Photo 1.54138969.mat
Videos_Taking_Photo/S7/Videos/Photo 1.60457274.mp4
Segments_gt_bs_Taking_Photo/S7/MySegmentsMat/ground_truth_bs/Photo 1.60457274.mp4
Poses_D2_Positions_Taking_Photo/S7/MyPoseFeatures/D2_Positions/Photo 1.60457274.mat
Videos_Taking_Photo/S9/Videos/Photo 1.54138969.mp4
Segments_gt_bs_Taking_Photo/S9/MySegmentsMat/ground_truth_bs/Photo 1.54138969.mp4
Poses_D2_Positions_Taking_Photo/S9/MyPoseFeatures/D2_Positions/Photo 1.54138969.mat
Videos_Waiting/S1/Videos/Waiting 1.54138969.mp4
Segments_gt_bs_Waiting/S1/MySegmentsMat/ground_truth_bs/Waiting 1.54138969.mp4
Poses_D2_Positions_Waiting/S1/MyPoseFeatures/D2_Positions/Waiting 1.54138969.mat
Videos_Waiting/S1/Videos/Waiting 1.58860488.mp4
Segments_gt_bs_Waiting/S1/MySegmentsMat/ground_truth_bs/Waiting 1.58860488.mp4
Poses_D2_Positions_Waiting/S1/MyPoseFeatures/D2_Positions/Waiting 1.58860488.mat
Videos_Waiting/S1/Videos/Waiting 1.60457274.mp4
Segments_gt_bs_Waiting/S1/MySegmentsMat/ground_truth_bs/Waiting 1.60457274.mp4
Poses_D2_Positions_Waiting/S1/MyPoseFeatures/D2_Positions/Waiting 1.60457274.mat
Videos_Waiting/S11/Videos/Waiting 1.54138969.mp4
Segments_gt_bs_Waiting/S11/MySegmentsMat/ground_truth_bs/Waiting 1.54138969.mp4
Poses_D2_Positions_Waiting/S11/MyPoseFeatures/D2_Positions/Waiting 1.54138969.mat
Videos_Walking/S1/Videos/Walking 1.55011271.mp4
Segments_gt_bs_Walking/S1/MySegmentsMat/ground_truth_bs/Walking 1.55011271.mp4
Poses_D2_Positions_Walking/S1/MyPoseFeatures/D2_Positions/Walking 1.55011271.mat
Videos_Walking_Dog/S1/Videos/WalkingDog 1.54138969.mp4
Segments_gt_bs_Walking_Dog/S1/MySegmentsMat/ground_truth_bs/WalkingDog 1.54138969.mp4
Poses_D2_Positions_Walking_Dog/S1/MyPoseFeatures/D2_Positions/WalkingDog 1.54138969.mat
================================================
FILE: datasets/proc_all_data.py
================================================
from __future__ import print_function
import os
import sys
import datetime
import configparser
from LSP import proc_lsp
from LSPET import proc_lspet
from MPII import proc_mpii
from COCO import proc_coco
from H36M import proc_h36m
sys.path.append("../src/")
from utility import take_notes
# parse configures
conf = configparser.ConfigParser()
conf.read(u'../conf.ini', encoding='utf8')
tgt_path = conf.get('DATA', 'tgt_path')
lsp_path = conf.get('DATA', 'lsp_path')
lspet_path = conf.get('DATA', 'lspet_path')
upi_path = conf.get('DATA', 'upi_path')
coco_api_path = conf.get('DATA', 'coco_api_path')
coco_list_path = conf.get('DATA', 'coco_list_path')
h36m_path = conf.get('DATA', 'h36m_path')
c_time = datetime.datetime.now()
time_string = "%s-%02d:%02d:%02d" % (c_time.date(), c_time.hour, c_time.minute, c_time.second)
take_notes("start at %s\n" % time_string, "./data_log.txt", create_file = True)
p_train = 0
p_test = 0
# build all dirs if not exist
for i in [tgt_path + "train/", tgt_path + "train/img/",
tgt_path + "train/sil/", tgt_path + "train/para/",
tgt_path + "test/", tgt_path + "test/img/",
tgt_path + "test/sil/", tgt_path + "test/para/"]:
if not os.path.exists(i):
os.makedirs(i)
p_train, p_test = proc_lsp(tgt_path + "train/", tgt_path + "test/",
p_train, p_test,
lsp_path, upi_path)
p_train = proc_lspet(tgt_path + "train/", p_train,
lspet_path, upi_path)
p_train, p_test = proc_mpii(tgt_path + "train/", tgt_path + "test/",
p_train, p_test, upi_path)
p_train, p_test = proc_coco(tgt_path + "train/", tgt_path + "test/",
p_train, p_test, coco_list_path)
p_train, p_test = proc_h36m(tgt_path + "train/", tgt_path + "test/",
p_train, p_test, h36m_path)
print("All done")
================================================
FILE: demo/demo.py
================================================
from __future__ import print_function
import numpy as np
import PIL.Image
import torch
import cv2
import argparse
import pickle
import configparser
import sys
import os
sys.path.append("../src/")
import renderer as rd
from predictor import joint_predictor
from predictor import anchor_predictor
from network import shading_net
from data_loader import dataloader_demo
from mesh_edit import fast_deform_dja
from mesh_edit import fast_deform_dsa
from utility import str2bool
from utility import center_crop
from utility import get_joint_posi
from utility import get_anchor_posi
from utility import subdiv_mesh_x4
from utility import CamPara
from utility import make_trimesh
from utility import smpl_detoe
from utility import flatten_naval
# parse arguments
parser = argparse.ArgumentParser()
parser.add_argument('--ind', type = int, required = True,
help = 'index of testing data (int, required)')
parser.add_argument('--outf', default = './results/',
help = 'output folder (str, default: "./results/")')
parser.add_argument('--step', type = str2bool, default = True,
help = 'save step results or not (True/False, default: True)')
parser.add_argument('--mesh', type = str2bool, default = False,
help = 'save mesh or not (True/False, default: False)')
parser.add_argument('--gif', type = str2bool, default = False,
help = 'make gif or not (True/False, default: False)')
parser.add_argument('--gpu', type = str2bool, default = True,
help = 'enable gpu or not (True/False, default: True)')
opt = parser.parse_args()
print(opt)
if opt.gpu is False:
print("cpu mode is slow, use '--gpu True' to enable gpu mode if conditions permit.")
# parse configures
conf = configparser.ConfigParser()
conf.read(u'../conf.ini', encoding='utf8')
dataset_path = conf.get('DEMO', 'dataset_path')
joint_model = conf.get('DEMO', 'joint_model')
anchor_model = conf.get('DEMO', 'anchor_model')
shading_model = conf.get('DEMO', 'shading_model')
# ==============================initialize==============================
print("initialize......", end='')
# initialize renderer
my_renderer = rd.SMPLRenderer()
# initialize joint and anchor predictor
pdt_j = joint_predictor(joint_model, gpu = opt.gpu)
pdt_a = anchor_predictor(anchor_model, gpu = opt.gpu)
#
dataset = dataloader_demo(dataset_path)
# make verts for joint deform
with open ('../predef/mesh_joint_list.pkl', 'rb') as fp:
item_dic = pickle.load(fp)
point_list = item_dic["point_list"]
index_map = item_dic["index_map"]
# make verts for anchor deform
with open ('../predef/dsa_achr.pkl', 'rb') as fp:
dic_achr = pickle.load(fp)
achr_id = dic_achr['achr_id']
achr_num = len(achr_id)
cam_para = CamPara(K = np.array([[1000, 0, 224],
[0, 1000, 224],
[0, 0, 1]]))
with open ('../predef/exempt_vert_list.pkl', 'rb') as fp:
exempt_vert_list = pickle.load(fp)
# get image and parameters of HMR prediction
test_num = opt.ind
test_tuple = dataset[test_num]
src_img = test_tuple[0]
verts = test_tuple[1]
vert_norms = test_tuple[2]
# make input tensor for joint net
joint_posi = get_joint_posi(verts)
proj_sil = my_renderer.silhouette(verts = verts)
src_sil = np.expand_dims(proj_sil, 2)
src_j = np.zeros((10, 4, 64, 64))
for i in range(len(joint_posi)):
crop_sil = center_crop(src_sil, joint_posi[i], 64)
crop_img = center_crop(src_img, joint_posi[i], 64)
crop_img = crop_img.astype(np.float)
crop_img = crop_img - crop_img[31, 31, :]
crop_img = np.absolute(crop_img)
crop_img = crop_img/255.0
src_j[i,0,:,:] = np.rollaxis(crop_sil, 2, 0)
src_j[i,1:4,:,:] = np.rollaxis(crop_img, 2, 0)
print("done")
# ==============================predict joint==============================
print("joint deform......", end='')
joint_tsr = pdt_j.predict_batch(src_j)
joint_para = np.array(joint_tsr.data.cpu())
joint_para = np.concatenate((joint_para, np.zeros((10,1))),axis = 1)
# apply scale
joint_para = joint_para * 0.007# 0.007
flat_point_list = [item for sublist in point_list for item in sublist]
num_mj = len(point_list)
j_list = []
for i in range(num_mj):
j_p_list = []
for j in range(len(point_list[i])):
j_p_list.append(verts[point_list[i][j]])
j_list.append(sum(j_p_list)/len(j_p_list))
new_jv = []
ori_jv = []
for i in range(len(j_list)):
# make new joint verts
for j in point_list[i]:
new_jv.append(verts[j] + joint_para[i])
ori_jv.append(verts[j])
new_jv = np.array(new_jv)
ori_jv = np.array(ori_jv)
# joint deform
fd_ja = fast_deform_dja(weight = 10.0)
ja_verts = fd_ja.deform(np.asarray(verts), new_jv)
print("done")
# ==============================predict anchor==============================
print("anchor deform......", end='')
# make src_a
proj_sil_j = my_renderer.silhouette(verts = ja_verts)
src_sil_j = np.zeros((224, 224, 2))
src_a = np.zeros((200, 4, 32, 32))
# make anchor posi
anchor_verts = np.zeros((200, 3))
for i in range(achr_num):
anchor_verts[i, :] = ja_verts[achr_id[i], :]
achr_posi = get_anchor_posi(anchor_verts)
for i in range(len(achr_posi)):
crop_sil = center_crop(proj_sil_j, achr_posi[i], 32)
crop_img = center_crop(src_img, achr_posi[i], 32)
crop_img = crop_img.astype(np.int)
crop_img = crop_img - crop_img[15, 15, :]
crop_img = np.absolute(crop_img)
crop_img = crop_img.astype(np.float)/255.0
src_a[i,0,:,:] = crop_sil
src_a[i,1:4,:,:] = np.rollaxis(crop_img, 2, 0)
# predict anchor
achr_tsr = pdt_a.predict_batch(src_a)
achr_para = np.array(achr_tsr.data.cpu())
achr_para = achr_para * 0.003
ori_av = []
new_av = []
for j in range(achr_num):
ori_av.append(ja_verts[achr_id[j]])
new_av.append(ja_verts[achr_id[j]] +
vert_norms[achr_id[j]] * achr_para[j])
ori_av = np.array(ori_av)
new_av = np.array(new_av)
# anchor deform
fd_sa = fast_deform_dsa(weight=1.0)
sa_verts = fd_sa.deform(np.asarray(ja_verts),
new_av,
)
print("done")
# ==============================predict vertex==============================
print("vertex deform......", end='')
# Shading Refine Start
if opt.gpu is True:
torch.cuda.empty_cache()
# prepare shading refine
device = torch.device("cuda:0" if opt.gpu else "cpu")
net_shading = shading_net(init_weights = True).eval().to(device)
if opt.gpu is True:
net_shading.load_state_dict(torch.load(shading_model, map_location='cuda:0'))
else:
net_shading.load_state_dict(torch.load(shading_model, map_location='cpu'))
faces_smpl = np.load("../predef/smpl_faces.npy")
mesh = make_trimesh(sa_verts, faces_smpl)
proj_sil = my_renderer.silhouette(verts = mesh.points())
proj_sil_l = cv2.resize(proj_sil, dsize=(448, 448))
proj_sil_l[proj_sil_l<0.5] = 0
proj_sil_l[proj_sil_l>=0.5] = 1
# load data
src_img_l = cv2.resize(src_img, dsize=(448, 448))
input_arr = np.rollaxis(src_img_l, 2, 0)
input_arr = np.expand_dims(input_arr, 0)
input_arr = torch.tensor(input_arr).float().to(device)
input_arr = input_arr/255.0
proj_sil_l = np.expand_dims(proj_sil_l, 0)
proj_sil_l = np.expand_dims(proj_sil_l, 0)
proj_sil_l = torch.tensor(proj_sil_l)
proj_sil_l = proj_sil_l.float().to(device)
# predict
pred = net_shading(input_arr, proj_sil_l)
pred_depth = np.array(pred.data[0][0].cpu())
# flatten naval
mesh = flatten_naval(mesh)
# remove toes
mesh = smpl_detoe(mesh)
# subdivide the mesh to x4
subdiv_mesh = subdiv_mesh_x4(mesh)
# genrate boundary buffering mask
sil_img = rd.render_sil(subdiv_mesh)
bound_img = rd.render_bound(subdiv_mesh)
radius = 10
circ_template = np.zeros((radius*2+1, radius*2+1))
for i in range(radius):
cv2.circle(img = circ_template,
center = (radius, radius),
radius = i+2,
color = (radius-i)*0.1,
thickness = 2)
img_size = bound_img.shape
draw_img = np.zeros(img_size, dtype=np.float)
draw_img = np.pad(draw_img, radius, 'edge')
for y in range(img_size[0]):
for x in range(img_size[1]):
if bound_img[y, x] == 0:
continue
win = draw_img[y:y+2*radius+1, x:x+2*radius+1]
win[circ_template>win] = circ_template[circ_template>win]
draw_img[y:y+2*radius+1, x:x+2*radius+1] = win
final_mask = sil_img - draw_img[10:10+img_size[0], 10:10+img_size[1]]
final_mask[sil_img==0] = 0
pred_depth = pred_depth * final_mask
# project mesh to depth and merge with depth difference
proj_depth, visi_map = rd.render_depth(subdiv_mesh, require_visi = True)
# get all visible vertex index
verts_sd = subdiv_mesh.points()
faces_sd = subdiv_mesh.face_vertex_indices()
visi_vert_inds = []
for y in range(visi_map.shape[0]):
for x in range(visi_map.shape[1]):
f_ind = visi_map[y, x]
if f_ind >= len(faces_sd):
continue
else:
fv = faces_sd[f_ind]
visi_vert_inds.append(fv[0])
visi_vert_inds.append(fv[1])
visi_vert_inds.append(fv[2])
visi_vert_inds = set(visi_vert_inds)
# filter out exempt version
visi_vert_inds = list(set(visi_vert_inds).difference(exempt_vert_list))
visi_vert_inds_m = []
for i in visi_vert_inds:
xy = cam_para.project(verts_sd[i])
x = int(round(xy[1]))
y = int(round(xy[0]))
if np.absolute(proj_depth[x, y] - verts_sd[i,2])<0.01:
visi_vert_inds_m.append(i)
for i in visi_vert_inds_m:
xy = cam_para.project(verts_sd[i])
x = int(round(xy[1]))
y = int(round(xy[0]))
depth = proj_depth[x, y] + pred_depth[x, y]*0.002
#print(depth, verts_sd[i])
if depth>10.:
continue
verts_sd[i][2] = depth
deformed_mesh = make_trimesh(verts_sd, faces_sd)
print("done")
# ==============================render and save==============================
print("render and save......", end = '')
# render hmr
ori_proj_img = my_renderer(verts = verts)
ori_sil_img = my_renderer.silhouette(verts = verts)
ori_sil_img = np.stack((ori_sil_img,)*3).transpose((1,2,0))
ori_proj_img[ori_sil_img==0] = src_img[ori_sil_img==0]
# render ours_ja
ja_proj_img = my_renderer(verts = ja_verts)
ja_sil_img = my_renderer.silhouette(verts = ja_verts)
ja_sil_img = np.stack((ja_sil_img,)*3).transpose((1,2,0))
ja_proj_img[ja_sil_img==0] = src_img[ja_sil_img==0]
# render ours_sa
sa_proj_img = my_renderer(verts = sa_verts)
sa_sil_img = my_renderer.silhouette(verts = sa_verts)
sa_sil_img = np.stack((sa_sil_img,)*3).transpose((1,2,0))
sa_proj_img[sa_sil_img==0] = src_img[sa_sil_img==0]
# render ours_sr
sr_proj_img = my_renderer(verts = verts_sd, faces = faces_sd)
sr_sil_img = my_renderer.silhouette(verts = verts_sd, faces = faces_sd)
sr_sil_img = np.stack((sr_sil_img,)*3).transpose((1,2,0))
sr_proj_img[sr_sil_img==0] = src_img[sr_sil_img==0]
# build output folder if not exist
if not os.path.exists(opt.outf):
os.makedirs(opt.outf)
PIL.Image.fromarray(sr_proj_img).save(opt.outf+"%04d_ours_s.png" % test_num)
if opt.step:
PIL.Image.fromarray(src_img).save(opt.outf+"%04d_src.png" % test_num)
PIL.Image.fromarray(ja_proj_img).save(opt.outf+"%04d_ours_j.png" % test_num)
PIL.Image.fromarray(sa_proj_img).save(opt.outf+"%04d_ours_a.png" % test_num)
PIL.Image.fromarray(ori_proj_img).save(opt.outf+"%04d_hmr.png" % test_num)
if opt.mesh:
import openmesh as om
om.write_mesh(opt.outf + "%04d_mesh.obj" % test_num, deformed_mesh)
print("mesh saved to [%s]" + opt.outf + "%04d_mesh.obj" % test_num)
if opt.gif:
gb_src_img = src_img.copy()# green bounding source image
gb_src_img[:,:3] = gb_src_img[:,:3]/2 + np.array([0, 128, 0])
gb_src_img[:3,:] = gb_src_img[:3,:]/2 + np.array([0, 128, 0])
gb_src_img[-3:,:] = gb_src_img[-3:,:]/2 + np.array([0, 128, 0])
gb_src_img[:,-3:] = gb_src_img[:,-3:]/2 + np.array([0, 128, 0])
PIL.Image.fromarray(gb_src_img).save(opt.outf+"%04d_src_gb.png" % test_num)
gif_name = opt.outf + "%04d.gif" % test_num
file_list = [opt.outf + "%04d_src_gb.png" % test_num,
opt.outf + "%04d_hmr.png" % test_num,
opt.outf + "%04d_ours_j.png" % test_num,
opt.outf + "%04d_ours_a.png" % test_num,
opt.outf + "%04d_ours_s.png" % test_num,
]
with open(opt.outf + "tmp_image_list.txt", 'w') as file:
for item in file_list:
file.write("%s\n" % item)
# this require ImageMagick on Ubuntu (installed with Ubuntu 16 by default).
# on windows use 'magick' instead of 'convert'
os.system("convert -delay 100 @" + opt.outf + "tmp_image_list.txt %s" % gif_name)
os.system("rm " + opt.outf + "tmp_image_list.txt")
os.system("rm " + opt.outf + "%04d_src_gb.png" % test_num)
print("done")
print("%d - finished, results are saved to [%s]" % (test_num, opt.outf))
================================================
FILE: demo/demo_data/test/para/00000002.json
================================================
{"proc_para": {"end_pt": [319, 335], "img_size": 224, "scale": 1.3099415204678362, "start_pt": [95, 111]}, "joint_move": [0.9907811104605173, -6.174685611605376, -0.8794392291656834, -0.9853454869298588, 8.921725637399192, 6.2924890768524335, -0.33462514800564236, -0.9200601088744236, 8.84008641762395, -1.9043964045528412, 6.348554593194123, 0.31222480769240235, -12.69418054523176, -6.548950826861358, 2.992539510885365, 5.457035793421284, -4.7636442710135825, 11.234049390811009, 1.1732653929552725, 10.775412400435954], "vert_norms": [[-0.8100748788140688, 0.19403619144546963, 0.553288936382889], [-0.7628650812559516, 0.23868321921915206, 0.6008886657805524], [-0.8599508543277045, 0.3010067722166771, 0.4121643497692984], [-0.9231271172046095, 0.2502192191953231, 0.29193606804708055], [-0.8159498942408419, 0.3374242036206723, 0.46943655258119166], [-0.648142260903785, 0.4308701088531097, 0.6279033038035708], [-0.9194584752950228, 0.3340351184860618, 0.20740456076507655], [-0.9529051589775003, 0.2835975087467487, 0.10744399018419996], [-0.9429642131994546, 0.26404091268417673, 0.20273354200536406], [-0.9499882907292988, 0.3113420365984873, -0.024256622269630528], [-0.9353307189004473, 0.3482971087810291, 0.062012662383970775], [-0.8913977093488137, 0.39307218490451135, 0.22561999295736554], [-0.8857444776071991, 0.46408835559593997, -0.008872349666602886], [-0.8507549877312162, 0.4968063760815184, 0.171462461008838], [-0.8640706775339586, 0.5025404649119622, -0.028895420953410158], [-0.8842641656212696, 0.46330468554403226, -0.05852908465938205], [-0.49778001683391, 0.39167005639610414, 0.7738279019029393], [-0.42307561923950665, 0.4382607905570787, 0.7930539072883963], [-0.5543582183684798, 0.33801907538395193, 0.760545902890748], [-0.5223316098154371, 0.22242800239586816, 0.8232226145689862], [-0.9417734454763059, 0.1806283546397956, 0.28361271991186776], [-0.8959040818991042, 0.06970711511790265, 0.43874456593610667], [-0.988798915611223, 0.060724525171174486, 0.13634235045944057], [-0.9925996653741389, 0.06095219797327146, 0.10502730055264106], [-0.6921766018719921, 0.4830807285096393, 0.5362131680251221], [-0.5267660493453106, 0.3851460360956879, 0.7577466991923574], [-0.7201593026202152, 0.29844563782142053, 0.6263391893494534], [-0.9412926965913604, 0.26874667142788383, 0.20431173715721318], [-0.5975679274114203, 0.8016398571530837, -0.016914832331507784], [-0.9839085662648502, 0.17860318145331033, 0.004983653820530135], [-0.9598818997068986, 0.24902059823067282, 0.1289010483739875], [-0.5008375565062646, 0.8653557488479803, -0.017921214484108026], [-0.831795152404042, 0.5344256799318978, -0.15002005554746659], [-0.9656380961270323, 0.21916793761116588, -0.13967276911205154], [-0.5487931527914498, 0.8331473293914969, -0.06849527704182917], [-0.47344796293985786, 0.8552046549434106, 0.21088391249979452], [-0.9994061951291299, -0.008136395828413455, 0.03348217735510586], [-0.9945379555128548, -0.05449386439902945, 0.08902063686118468], [-0.8760879742496129, -0.06628901446013695, 0.47757264152913265], [-0.7536293917890152, 0.44482902601846674, 0.48391102223774685], [-0.6740718489097254, 0.5583887651765556, 0.4835588169313282], [-0.5492667073599975, 0.5062685680363993, 0.6648294677616814], [-0.5123278097653263, 0.46541689139380327, 0.7217391028248313], [-0.5704164389259896, 0.6003087056510261, 0.5605841097663957], [-0.7912620182333399, 0.4593752437954277, 0.4035824623161828], [-0.6299319469382395, 0.6156814038973499, 0.47341541073520954], [-0.7371419384650507, 0.36116338746087323, 0.5711241284640096], [-0.6902084898009159, 0.35728325060226107, 0.6292542565973002], [-0.5773434140318496, 0.5948193339025964, 0.5593429558774471], [-0.7431281428806169, 0.6119594726316355, 0.27067723789638487], [-0.6396592978065835, 0.6045182397132941, 0.47475644343550394], [-0.6243138867161729, 0.7023443127025745, 0.34197169074017475], [-0.7129765463213147, 0.6894960645256065, 0.1275132204888221], [-0.615057597772707, 0.7439504476349874, 0.26123147376564143], [-0.6870325626169425, 0.7199401510769232, 0.09834854737785312], [-0.5900353383296565, 0.8073703249091483, 0.0033849635603223007], [-0.6418509057695627, 0.7634051158711712, 0.07238814698910034], [-0.6253322483068332, 0.7004617312085102, 0.3439664843264497], [-0.7198680910038944, 0.6329596468616536, 0.2848719308727687], [-0.6751807754601951, 0.48932664175185114, 0.5519876430870757], [-0.4945572570913876, 0.45786742569673405, 0.7387628441821428], [-0.5712170402051843, 0.7186408159265231, 0.39656836820867397], [-0.7227299201319022, 0.6421798390512444, 0.25547312356146556], [-0.6077387356186196, 0.661584449708617, 0.4392717212983647], [-0.485839575949919, 0.7539932730119199, 0.44210185556450143], [-0.44974058550844825, 0.855380944316519, 0.25701526383990964], [-0.47195912571707926, 0.8070642856448257, 0.3548264681347451], [-0.3834133518688733, 0.760098693705752, 0.5246371864779362], [-0.32802924260176525, 0.7198307610578296, 0.6117519852301406], [-0.33434474026064603, 0.8457987114854917, 0.41573805973175354], [-0.1611691215777677, 0.9518276353588347, 0.2608613938800824], [-0.39890432874624826, 0.8000988795050153, 0.4480146420847471], [-0.688190293960769, 0.468656453694324, 0.5538548977023224], [-0.6027838057385254, 0.5581764132172897, 0.5701673221671523], [-0.7975290007925783, 0.35397134677331604, 0.48851998788000117], [-0.4747785439731562, 0.40770522034215706, 0.7799755044156725], [-0.6365424435020001, 0.3931752303151904, 0.6634960104530394], [-0.5177988540345152, 0.5417059902395849, 0.66214723959184], [-0.4120508871848555, 0.5316297353882744, 0.7399891153396561], [-0.5503166749706914, 0.7134143499178353, 0.43381046850037525], [-0.4702153603071353, 0.7176143246620452, 0.5137384509369214], [-0.6397176852825431, 0.6008355000217536, 0.47933076789452445], [-0.5802168156450835, 0.7090144034194179, 0.4008079622294023], [-0.5031862696906674, 0.6420888320004036, 0.5783818028042967], [-0.3990346399653628, 0.7340495608415865, 0.5494930375682548], [-0.5276851108062116, 0.6414448485855835, 0.5568634752400753], [-0.46136322680919173, 0.5727173695378498, 0.6775978066507126], [-0.38962971013024883, 0.6431975595763558, 0.6591552080798866], [-0.34649066779861076, 0.6287404638305616, 0.6961534645971411], [-0.5368361958897717, 0.5793923089055334, 0.613279260340437], [-0.6543448307421516, 0.5157126993559296, 0.5530580929740072], [-0.7488685267248575, 0.49321363802056106, 0.4426468535429394], [-0.6777147609417672, 0.5916297397733735, 0.4366657231994904], [-0.663738026863411, 0.552359394105952, 0.5043321637952228], [-0.7130669543945178, 0.5202905189147768, 0.46992903132060154], [-0.6382551461151009, 0.41681946994521174, 0.6472185858982915], [-0.5002270525412171, 0.6197868713164898, 0.6046793613557876], [-0.5938375980732261, 0.5940464052213476, 0.542647008245891], [-0.49650364650980033, 0.6484353774901171, 0.5770751166197695], [-0.48064605933997934, 0.685977321294833, 0.5462732652346394], [-0.6421671694860246, 0.6035595187806834, 0.4725856892919392], [-0.7382859752942279, 0.5158846265543202, 0.4345076187695223], [-0.3582390174605501, 0.9309977324167712, -0.07005732369802385], [-0.521758111270499, 0.8505544779712684, -0.06576893891849622], [-0.18164157123745137, 0.8651067224838732, 0.4675432582249486], [-0.516718505683717, 0.685368520196521, 0.5131003580271772], [-0.39296162873793083, 0.8279227914811437, 0.40015623159673946], [-0.4347329085550953, 0.8215516893200293, 0.36886328089772386], [-0.28612775022097864, 0.7617005115420759, 0.5813288581087485], [-0.24000368379167314, 0.8310768446995178, 0.5017065974957076], [-0.7645389927790757, 0.5728736463848716, 0.2954588191238462], [-0.5520550412074114, 0.7999534454905683, 0.23518017885283532], [-0.7143621989273066, 0.5735191641117765, 0.4009518888099574], [-0.8542440934779857, 0.3047880415513486, 0.4211546966202181], [-0.7520950575895079, 0.30618671089765725, 0.5836117908499704], [-0.8226284892710869, 0.24038615889815262, 0.5152638772995459], [-0.7786652844439221, 0.43515366338665523, 0.4520195394482845], [-0.7173263484116066, 0.44682897491466966, 0.5345902889607852], [-0.5653777389324376, 0.4779800319033724, 0.672222508862427], [-0.41846815350030003, 0.43550560231932545, 0.797006445930352], [-0.4790897437473099, 0.40856284897741535, 0.7768844289027773], [-0.6255038695128412, 0.38995646265531486, 0.6757801909332772], [-0.07008705917458084, 0.8032416793852836, 0.5915155185069689], [-0.007156053761776435, 0.8126702611350408, 0.5826798757132967], [0.004985963366894066, 0.705469579401433, 0.7087226627591849], [-0.16943415640473802, 0.6400960792721824, 0.7493791269736533], [-0.4829191504060789, 0.4243810567300223, 0.7659567956874466], [-0.15186418322298795, 0.8036158237523476, 0.5754466766511475], [-0.40612928509277313, 0.8382401863521406, 0.3638851381608788], [-0.7559891554494198, 0.40687780809935226, 0.5127678286701883], [-0.5759723490357781, 0.1028875250639936, 0.810968563097494], [-0.44321825134461595, -0.002978956482561222, 0.896408783699321], [-0.7611661216381138, -0.043346336300857886, 0.6471068152938007], [-0.6826278593301631, 0.14697365055476777, 0.7158337458578803], [-0.922334134366075, 0.020358103295610296, 0.38585656948325814], [-0.973149613228568, 0.1318264440250218, 0.18868391274511584], [-0.9586302551209264, 0.273918112477827, 0.07743966440637812], [-0.8006311271979337, 0.5870097046617219, 0.12003918024846724], [-0.7951860865646012, 0.6061190293154861, -0.017286122634283724], [-0.8327337125663221, 0.5382720084158336, -0.12968349513910793], [-0.78157373274768, 0.586874909882947, -0.2114718431109465], [-0.7258579574943167, 0.6846533818346706, -0.06618135904110202], [-0.47495758347375394, 0.8470596869427048, -0.23854806781296467], [-0.61326122605311, 0.7732403297012752, -0.1612763502293486], [-0.6401019386927834, 0.6864760092397434, -0.3449930387993591], [-0.7348048985196446, 0.5197548550664048, -0.4357942768628743], [-0.8069548211363636, 0.510338843723422, -0.29728468045262624], [-0.6968699350928728, 0.5325522342228426, -0.4803752818244439], [-0.7368191295393122, 0.5309946165802695, -0.418500044812068], [-0.6405947284148283, 0.39729248457504646, -0.6571126810732835], [-0.6940028098009019, 0.706081667610234, 0.1407436629237846], [-0.6926338686932553, 0.643133147493905, 0.32655486297649494], [-0.8508845874343496, 0.49334599716684996, 0.1805689506701606], [-0.8497111930624133, 0.5218997883769424, 0.07490994110632453], [-0.8548553237435536, 0.47333101775456143, -0.2125561645747674], [-0.946640608612563, 0.3147213433716009, -0.0694408680246109], [-0.9112712793400033, 0.39988741697847296, 0.09836009959489983], [-0.94513151877174, 0.3100726301035637, -0.10286581689211838], [-0.9940284838336829, -0.07452648661404701, 0.07970681351224687], [-0.9769040803995075, 0.050570017345473145, 0.20760802259178532], [-0.9665264445164948, 0.255724918410681, 0.02077012648382265], [-0.9838466904146479, 0.14777040606546893, -0.10104254970748953], [-0.8460194767923681, -0.4155694134198042, 0.3339956699088892], [-0.8380129604753918, -0.26622678931948063, 0.4762956799341248], [-0.946471476385764, -0.13124252369473613, 0.29490192329381093], [-0.9422164843255868, -0.2598943180037389, 0.2113836326078786], [-0.9806179291070742, 0.06471030051469577, -0.18493527008402297], [-0.9536864293098445, 0.07825682055877613, -0.29044459813580664], [-0.950776036643652, -0.1470504152417012, -0.27276565678514697], [-0.9860047274127961, -0.15292361442159183, -0.06640064511624928], [-0.884600489471983, -0.43877006690183357, -0.1579962101345742], [-0.9261065379043613, -0.37288512316195777, 0.05730065772126546], [-0.8728450456851156, 0.27003806298728245, -0.4064738254316323], [-0.8066271987815959, 0.3133338485804788, -0.5011730853901686], [-0.8003204259780643, 0.5874327113824258, -0.12004176506608653], [-0.8876443299077538, 0.3327901047937576, -0.3183367552356697], [-0.7675660612935413, -0.6332842475017416, -0.09896162597932782], [-0.8184627257014473, -0.5531531575967232, 0.15537165403680303], [-0.7084777424154686, -0.02796393052785739, -0.7051789184960894], [-0.7755597693526493, -0.11488758616239521, -0.6207317348963591], [-0.8308808656453118, 0.08162601381433006, -0.5504309048130203], [-0.801182979880441, 0.09463938897156023, -0.5908884994692205], [-0.5751857684316499, -0.1982749709613631, -0.7936298681904324], [-0.6808378523680629, -0.28317114486644734, -0.6754805115603775], [-0.5112921261558192, 0.3635581763130818, -0.7787206265195289], [-0.5007234908689797, 0.41525708831549907, -0.7594982134907997], [-0.4277435437368175, 0.3578689458457132, -0.8300393234002514], [-0.4048641259581386, 0.18304061588053477, -0.895868948256511], [-0.8942688603239213, 0.3443277240427693, 0.28586994229978335], [-0.6960458218548176, 0.6226932821091765, 0.35745389953748335], [-0.737575399032643, 0.6432525805640591, 0.20544743449241742], [-0.8860539677022747, 0.4442251031314456, 0.13256102016397106], [-0.9229114784695556, 0.3690570127886019, 0.10968739317119697], [-0.9547075671614139, 0.29641351140893923, 0.025932440281572173], [-0.9304004067883749, 0.34906937128443727, -0.11182869524014971], [-0.9478482741559888, 0.2852067700553381, -0.14226998100131616], [-0.9211448697424081, 0.15452326643945585, -0.3572319821574257], [-0.9464958119131524, 0.20393297526428464, -0.2501140132633901], [-0.8510645230804694, 0.17229453295567235, -0.4959876726970135], [-0.8438243141354487, 0.17125293438179073, -0.5085596910289545], [-0.7225798950222463, 0.3042764818237699, -0.6207206440248211], [-0.7594095462787361, 0.17895952120719497, -0.625516291386576], [-0.587694208661103, 0.09080546519100173, -0.8039713207556883], [-0.5466113460992765, 0.3151713699860793, -0.7758112166349715], [-0.5477824530597228, 0.24321116862001688, -0.8004890452581835], [-0.573289487178312, 0.16184500491205683, -0.8032094112221572], [-0.8819665209809195, 0.025040508508386187, -0.4706463946557486], [-0.953002450988198, -0.03192406439398943, -0.30127592423400784], [-0.907344749822054, -0.29861595715070377, -0.29589527726093107], [-0.8215599927385314, -0.15220106340956546, -0.5494306276760169], [-0.7848871808639114, -0.5085817524720643, -0.35397275935860567], [-0.5558652571043863, -0.6703976897989905, -0.49150865043908537], [-0.6374940926345372, -0.3558237575666199, -0.6833672039300976], [-0.7945335959789118, -0.2614855905926224, -0.5480343518186127], [-0.4688484829386833, 0.8594984499803158, 0.20357680252801347], [-0.46266616465458366, 0.8093355448994234, 0.3618231554864491], [-0.5376668400192862, 0.6948146811353669, 0.4776472841149983], [-0.5645091967638326, 0.777247428178066, 0.2778773149424664], [-0.9808454475448175, -0.18827632277162026, 0.049942309860509446], [-0.8584115778176913, -0.5106263257107567, 0.048890884218575105], [-0.5766567097436431, 0.44521885590176785, -0.6850162110907717], [-0.6843970641247917, 0.38239440192948954, -0.6207859373329534], [-0.6718668568707691, -0.7335336054143716, -0.10258350923216848], [-0.695420009695112, -0.10815055001674258, -0.7104185165426972], [-0.7073543091335462, -0.05702186428409409, -0.7045554544134692], [-0.3196077105042418, 0.1313488262142553, -0.9384020445621236], [-0.18746134184669822, 0.15522994203591028, -0.9699288171863766], [-0.7196751778803553, 0.1627066519217886, 0.6749771727719988], [-0.2388345171091269, 0.2905692699129977, 0.9265676299221107], [-0.2577814995978222, 0.0792262375359179, 0.9629495842207942], [-0.2727182071780519, -0.007331179755869947, 0.9620660233460989], [-0.358389281069584, 0.17446006128722014, 0.9171263872717249], [-0.3505929523577071, 0.2905258277790147, 0.8903254040801176], [-0.2916708495931191, 0.6781802441247863, 0.6745366350143431], [-0.3652720839901098, 0.6354249936178953, 0.6803024196217587], [-0.6117546247037137, 0.24329904747804773, 0.7527030308494135], [-0.7739876886772602, 0.4709185837489787, 0.4232951042191353], [-0.6989280301483384, 0.35859635748286306, 0.6187958153324776], [-0.6829701611130888, 0.4306815899820784, 0.589970445937481], [-0.7642444381056256, 0.4843174087002186, 0.4258721480145443], [-0.32488787305109734, 0.9036146022815604, 0.2791568026895841], [-0.4895853026966762, 0.8461129478570282, 0.21071096519188018], [-0.2508164490993759, 0.9288966160452514, 0.2724741924675822], [-0.6865398344531923, 0.5825724883817475, 0.43505442359512003], [-0.77940865834152, 0.5361767364833159, 0.3240935830225161], [-0.9348517145612758, 0.3359349200574375, -0.11489125844835063], [-0.8437967505410576, 0.5162334105010803, 0.14666325258487622], [-0.6310277136952963, -0.586832348557983, 0.5073773933024698], [-0.6464875495624263, -0.36979236738420634, 0.6673136093960275], [-0.5161333751742406, -0.8556666236423961, 0.037960087139897826], [-0.570473847457191, -0.7540759115352536, 0.3254675237403358], [-0.5837220432509288, -0.43463386174062196, -0.6858294120635211], [-0.48920252715009965, -0.24263039968823133, -0.8377418316982178], [-0.1813872514221781, -0.49822326663070693, -0.8478633389935756], [-0.2662691936361499, -0.7289334037216528, -0.6306796409105976], [-0.15127159653932568, -0.01105522626843738, -0.9884304153821842], [-0.3385007455496977, -0.6635832697282924, -0.6671390330350991], [-0.35736396584793173, -0.40020837342554805, -0.843874548587357], [-0.5645899263826958, -0.10147651137797471, 0.8191097195527215], [-0.4889959030131847, 0.0866917043866246, 0.8679674851207632], [-0.9465299744268132, 0.31048923494247965, -0.08762101629409517], [-0.9462062922621768, 0.2909793502105819, 0.14150855180691937], [-0.8930606622258102, 0.17772190753674474, 0.4133492193851322], [-0.8848748943467636, 0.2292945391134023, 0.405487898324446], [-0.8742488320541257, 0.44667922936026233, 0.19017530257664694], [-0.9163963508130148, 0.3979969096376316, -0.04261675885710547], [-0.9170603239027736, 0.37592746141752986, -0.13296204750044868], [-0.879365364726745, 0.3636855663957963, -0.30732615266906194], [-0.8202947432983752, 0.4247936383968852, -0.38297114629510826], [-0.8914163986484276, 0.03905214478390798, -0.4514994288019029], [-0.8327210620007279, -0.19508081296844978, -0.5181882952286246], [-0.7895085867176038, -0.3782770898556855, -0.4833038741718147], [-0.6718497511689828, -0.6150810865778579, -0.41266592879516684], [-0.8754888904717955, 0.15317616457204694, -0.4583189558238472], [-0.4087974897832376, -0.8533919187866761, -0.3234298151013894], [-0.7741127684884315, 0.24065072564363255, 0.5855225443229057], [-0.738528208097662, 0.25463776658538345, 0.6242881495531244], [-0.7223689621173317, 0.45647875527698195, 0.5194326025099949], [-0.5213214182159404, 0.7021308802050477, 0.48501155241066746], [-0.34645217938801987, 0.7314455672708748, 0.5873314818031462], [-0.37903158930832, 0.6619213065226331, 0.6466801669123458], [-0.5422579988601641, 0.6113902902741866, 0.5763316541980114], [-0.1980085363772919, 0.9426312441124802, -0.26877305881483055], [-0.3276267213760633, 0.9113890824239427, -0.24905957495911513], [-0.43975315083645683, 0.8874807135704159, 0.1378228913132853], [-0.5957034890729839, 0.795738760127765, 0.10925739671345244], [0.41163520334017917, 0.9041675803497664, -0.11418163606963368], [-0.023407687273417473, 0.973411176357199, -0.2278656663900985], [-0.33295399636055795, 0.9424108882838845, 0.0316757628402776], [0.17911976071750751, 0.9653862180050155, 0.1895931470451281], [-0.29108844647092996, 0.9243690826565346, 0.24659544878171816], [-0.40464676130025057, 0.6623463895566506, 0.6305222111952026], [-0.23597408458953273, 0.6043600449119227, 0.7609633154864895], [-0.227628460465453, 0.8161895434994813, 0.5310554708015311], [-0.3062930954083943, 0.8032000700397527, 0.5109346212513696], [-0.540680732913444, 0.7663687473669775, -0.3469053013653018], [-0.6300368089803912, 0.7675975064745401, -0.11767619718479355], [-0.9579824723461713, 0.25036062184469815, -0.1399612150099208], [-0.9391610966939752, 0.27226630478357144, -0.20939793154677744], [-0.8070790532440012, 0.1018899250990454, -0.5815856299618121], [-0.6267136739940075, -0.0850462611753443, -0.7745948000658334], [-0.39128569971724503, -0.1121627816543785, -0.913408458253118], [0.20083368461788018, -0.2625343623006706, -0.9437910466486669], [0.29954489043286214, -0.20351683359916786, -0.9321232520741736], [0.008029156094362506, -0.04895984046103762, -0.998768475010321], [-0.07478366416733753, -0.18411407935766652, -0.9800558195102899], [-0.39864567876534013, 0.8844569279685841, -0.24252332953779188], [-0.2504771010693697, 0.9566471229679085, -0.1486186527899781], [-0.4325999479307844, 0.9015610594388003, -0.006703816366102847], [-0.5452598382057062, 0.8337536138714869, -0.08687128522200195], [-0.6614228406770022, 0.7496352938490382, -0.02380655469888567], [-0.49045299749419974, 0.8620067235157758, -0.1280635227633188], [-0.5607455319187484, 0.7623254989085748, 0.3231474619224986], [-0.6852850571060622, 0.6928397359809269, 0.22440474761693496], [-0.17787378558297715, 0.8607827707238109, 0.4768793747137952], [-0.6065640233074283, 0.6034845800005826, 0.517577479543523], [-0.6175803698282472, 0.6024396972478343, 0.5056292099777696], [0.135174735028783, 0.9847292372701397, -0.10970925337120396], [0.24209615023975767, 0.9572256276866821, 0.15845678192783752], [-0.20292179103124222, 0.8998230384258333, -0.38618809697189527], [0.10367749611545707, 0.9813473644450691, -0.16188986100415997], [-0.3560124014328074, 0.9331842663744576, -0.049216816406700566], [-0.6544924708886096, 0.7556223755222451, 0.025969812479912226], [-0.7873963444342983, 0.5783776401102622, 0.21327517950288605], [-0.052083392871100434, 0.8850081539272502, 0.46265309646571634], [-0.5091684603549128, 0.7901150150063939, 0.34127077525222305], [-0.00893258989564682, 0.9471860554082369, -0.3205601118011109], [0.3163330211843084, 0.9045285455874347, -0.28593973128246464], [-0.9014920218699404, -0.042403586637407086, 0.43071344342280654], [-0.28593074475913255, -0.2397047157546019, 0.9277851359266828], [-0.2775430868739676, -0.12620424244394934, 0.9523876963283483], [-0.1774255013155443, 0.3428616842925942, 0.9224782148793398], [0.055324014209514584, 0.8417431274273931, 0.537036088992627], [-0.18529302335403366, 0.9698385515107071, 0.15836565126293992], [-0.19631923292025905, 0.9398923890928711, 0.2793940867500529], [-0.23549439806971942, 0.08000300674509336, 0.9685772593807502], [-0.19537407263985468, 0.3121057585585821, 0.9297413442537064], [-0.430531733922945, 0.7777622213818242, 0.4579610824912013], [-0.05354445659381956, 0.9482047490938378, 0.31311458759368715], [-0.7586375670292529, 0.3051781731560476, 0.5756173420954872], [-0.5258442103233335, 0.1403159359802137, 0.8389274727766559], [-0.6031995443941568, 0.2121310235903168, 0.7688632768400415], [-0.5609544340332857, 0.21129484710512064, 0.8004277672127695], [-0.46224167846016195, 0.21925768714252256, 0.8592198189772184], [-0.31806048687639915, 0.9337769869211192, 0.16400629678297143], [-0.6650694155112246, 0.6299371519870128, 0.40107587449016335], [-0.6507417917561089, 0.7512551771969066, 0.1102305728774631], [-0.9486015691748768, 0.2807835909481982, 0.14599876031390324], [-0.946730170857563, 0.11619214722488867, 0.30033542666705065], [-0.9747148003885493, 0.012154684500521654, 0.22312176395009733], [-0.8519942281669725, 0.05541965498161558, 0.5206097358020536], [-0.4404847078190875, 0.8642608892790579, 0.2429533647433286], [-0.5102320034236687, 0.8068580790829617, 0.2977303190822569], [-0.8090109959585575, -0.0003993283381510009, 0.5877933726702109], [-0.6425960418924455, 0.11579405983231304, 0.7574048208532298], [-0.46561168237908096, 0.17286689674456304, 0.8679417015226462], [-0.6260039907871714, 0.06914254630749014, 0.77674855121117], [-0.6555409986228539, 0.23375062703031194, 0.7180714751941394], [-0.7383025074540165, 0.665717287041863, 0.10830466850849002], [-0.8165368187773588, 0.31617915328228113, 0.4830096961869921], [-0.6329323275755769, 0.3311004039772959, -0.6998351171496285], [-0.5731926193195022, 0.36436646436374265, -0.7339532006911026], [-0.4650449554615877, 0.822559740621266, -0.3273051519741259], [-0.670992634358532, 0.5021584035712752, -0.5455326043045873], [-0.1838530728552881, 0.4375905999777951, -0.8801775470964602], [0.29444706199416004, 0.6316289673515555, -0.7171790399094322], [-0.7536820195165569, -0.564960022724762, -0.3358326758674337], [-0.8411688073840645, 0.19697149026727875, -0.5036241351503699], [-0.9215049753685678, 0.26289220086751536, -0.28586057981822033], [-0.8803304158806171, -0.45544554954993743, 0.13261866486515136], [-0.934161533806551, 0.2800191538145715, -0.22120466146345907], [-0.9227054913901297, 0.3167769976777419, -0.21969731427756453], [-0.9804953176243661, 0.028306634326101303, 0.19449335867792963], [-0.8171344752330418, -0.3748719549256053, 0.4379066873157751], [-0.9087995398243974, 0.31131547540940435, -0.27778781684152404], [-0.9030532226630525, 0.3789067635120315, -0.2022981502701213], [-0.9282880468925293, 0.3404088092314498, -0.14967680045377701], [-0.9464024203884174, 0.2567660779222306, -0.19594295065498113], [-0.9099429358052998, 0.3442723156994028, -0.2312583538404672], [-0.9274225490490625, 0.35457981606476857, -0.11899819139303681], [-0.9152499267643104, 0.36944034403790077, -0.16072150993280865], [-0.9056702989214436, 0.3748181109749805, -0.1981733921006803], [-0.9083598149792206, 0.30063518372468245, -0.2906904416002406], [-0.42845662933864687, 0.4714232283215054, -0.7708340006607748], [0.16833597138700412, -0.6903904291492705, -0.7035794596747973], [0.054812204582370884, -0.8705560279189895, -0.48900697794891634], [-0.6295204409541701, 0.04033968143438483, -0.7759360312053046], [-0.47027305080923515, -0.09883820301100543, -0.8769687949454814], [-0.733597241128138, 0.14251402145862835, -0.66447335649887], [-0.7862035060473119, 0.3155058346392551, -0.5313568625580191], [-0.38858641411393935, -0.14016121790452374, -0.9106895364291776], [-0.17191780843362658, -0.18918142134509436, -0.9667753911644776], [-0.9249202335078694, 0.2631266593892974, -0.2743846256013205], [-0.9075001595649161, 0.30362844781045584, -0.2902640626565147], [-0.5651504080577274, 0.14851784404824572, -0.8115093753441455], [-0.42622592317339414, -0.01782844795271321, -0.904441047751917], [-0.6518673210856714, 0.3117042936282122, -0.6913099370284846], [-0.7205056072065807, 0.4300458514892594, -0.5439965400632196], [-0.2747135766715432, -0.09927069064270537, -0.9563878819661239], [0.1294130904309382, -0.06585790395551942, -0.9894013283353217], [0.02989886484387094, -0.11738660014909387, -0.9926361085445586], [-0.9611343471345326, 0.21518282188266755, 0.17296566111482256], [-0.9400925975524469, 0.3398254644795882, -0.027286658247677096], [-0.8899004145430985, 0.43184634935632504, 0.1469216891532234], [-0.8454641521091524, 0.3635246857630551, 0.39120348968180746], [-0.9132010008648175, 0.2656945274802144, -0.3089827666497939], [-0.9244768397647314, 0.26005127567755765, -0.27877572842177284], [-0.9283810353670016, -0.007941936376492018, 0.3715448543816563], [-0.28772179853423213, -0.16785923683465218, 0.9428888817127471], [-0.2814063792168124, -0.19047448220925609, 0.9404945089489887], [-0.17715792516719667, 0.232415842569552, 0.956346143231173], [-0.28374077026929073, -0.8454211516520451, 0.4524977918468991], [-0.3480013435770242, -0.6624022669987928, 0.6634141252215284], [-0.08599278524209233, -0.9905003910844505, -0.10730431560686506], [-0.16875564495352646, -0.9567566333304431, 0.2369351744138373], [-0.4670509526947089, 0.46857662365230457, 0.7498662249718753], [-0.30805247738069363, 0.728588429597593, 0.6117700314956026], [-0.5951886966838318, 0.3673985395741484, 0.7146808577670067], [-0.2971693110078054, 0.43509112807296146, 0.8499330037522629], [-0.2826399321986434, 0.40604007335896514, 0.8690489788000402], [-0.5093382584303341, 0.4240270521655613, 0.7488495159449184], [-0.08182611366408456, 0.8998650144957313, 0.42842437233335545], [0.15447346502714251, -0.02045505678107302, -0.9877851685739117], [-0.0988144741547219, -0.42326033197566193, -0.900603348357854], [-0.14897350869236298, -0.6869502677286841, -0.711270850924861], [-0.4473139574743381, -0.8506192822705188, -0.2763278127120644], [-0.27964315340320545, -0.874354973896901, -0.39661453122201745], [-0.37732781797799525, 0.6113350368000191, 0.6956243171142625], [-0.6411631623116356, 0.5030132379666995, 0.5795580054876299], [-0.37474685619290987, 0.9052089853720403, -0.20040330979116053], [-0.42320918249421896, 0.7889395708898013, 0.4454978578363663], [-0.6954843746074796, 0.5891828760720175, 0.41129675809608424], [-0.7417962820434694, 0.5898470507338367, 0.31909047727420564], [-0.1518488588176009, 0.9203127732594614, 0.36050842355106133], [-0.12758985881166168, 0.658462641564997, 0.7417194736500226], [-0.3605282352071666, 0.3841288563337634, 0.8499790664187684], [-0.3216490618599914, 0.29169976149553445, 0.9008069327819562], [-0.36623608432345, 0.8834817910537426, -0.2921147983514321], [-0.5560733512361624, 0.7445630385536253, -0.36933495592047116], [0.2631006416046531, 0.959976552809897, 0.09603681816078107], [-0.6936393189709447, 0.5665273897263081, 0.44487212979396684], [-0.8943432016725648, 0.4152957172782761, 0.16637218767687287], [-0.18899085266467203, 0.6296472554422335, 0.7535428264691681], [-0.1428458989544909, 0.7815136305930639, 0.6073149877527572], [-0.3478610938077559, -0.36733488606426357, 0.8625878163381547], [0.35212096040264207, -0.007381231389644283, -0.9359253958880983], [0.23909994739923346, -0.1145563116588232, -0.9642137038088654], [-0.8960794849239585, 0.4361951857639597, -0.08231231144098444], [-0.8712841729587276, 0.4296928758933391, -0.23712427618895865], [-0.8292838575514321, 0.5158242276682903, -0.21497360246092465], [-0.8924078317914502, 0.4510773382850073, -0.011725896255542342], [-0.25313528163560567, 0.925990337560219, 0.2801150191196004], [-0.9925397072606943, 0.0925213461156605, -0.07940233009050493], [-0.16070642773275462, -0.8674797010541292, -0.47079975822467884], [-0.5752267344621321, 0.7362803778063618, 0.3563781828582564], [-0.7531635096490863, 0.5146204787454183, 0.4097688257895018], [0.03103475007852641, 0.8076733263240917, 0.5888129093626774], [0.2269275449640676, -0.38948848726055463, -0.8926380048082571], [-0.7626411640888517, 0.3638154445405987, 0.5348053638015681], [-0.6187716118088843, 0.5918433140927346, 0.5165686633770615], [0.13071101581083333, -0.4245699979861402, -0.895910122253203], [-0.005797561131802911, 0.9947031027079852, -0.10262614553821359], [-0.01347978675281001, 0.9999056933467919, -0.0026267397606489274], [0.39956691704367175, -0.06484233491707289, -0.9144078687362208], [-0.8582174844578906, 0.4871629795522981, -0.16166317058779162], [-0.5306778055565204, 0.26374573080383273, -0.8054931757454362], [-0.6467239644242299, 0.4944368205538227, -0.5807584216522689], [-0.7864558296585872, 0.19225670235843728, -0.5869621694745604], [-0.7538734955158469, 0.39898641417799835, 0.5220005690227751], [-0.6203677067900779, 0.6428202602941552, -0.44936179335517035], [-0.7000326543113414, 0.5611277542139308, -0.4416898531194127], [-0.8111927489027103, 0.024298793532858846, 0.5842738165967323], [-0.9226760011117223, 0.31897317706514955, 0.21662204247362712], [-0.6012407559660958, 0.7749935288837968, 0.19466531163398718], [-0.6560808441406335, 0.634524079174137, -0.40857939118355846], [-0.9398461780966783, 0.21278144152900444, 0.2672325198360149], [-0.39649780084532427, -0.5884016540001867, 0.7046793508360141], [-0.9626387369494158, -0.21330469787450618, 0.16681656988770366], [-0.9259213254360775, 0.37615071559632435, 0.03435605127296503], [-0.5240546224908846, -0.7397088824672569, 0.42213448312709323], [-0.9619417550355883, 0.2685721092137784, -0.050369455739708906], [-0.42448474706786793, -0.9054142299855864, 0.006145864165088306], [-0.9425765903312628, 0.14333867436029887, -0.3016676909980961], [-0.24194963818134918, -0.9106848557106342, -0.3348334902055286], [-0.9232991912098634, 0.32426266026374195, -0.20584540478206698], [-0.9733752677344779, 0.22560218919178895, -0.04054923420615838], [-0.9185300005942203, 0.1711416046588862, -0.35638909798584334], [0.04382670986905507, -0.7671377550229096, -0.6399835031627487], [-0.8480326798649757, 0.2911340539760565, -0.4428109489347506], [0.2124790921235785, -0.5805525293627612, -0.7860097938708144], [-0.8630340879629245, 0.27167516421465326, -0.425869426189465], [0.24322293352157304, -0.37758383368586235, -0.8934612768040074], [-0.8254009231616972, 0.2800842710655301, -0.4901694779823696], [0.29457271387802053, -0.203310152080029, -0.9337515184992918], [-0.8633218324256314, 0.45370449574993804, -0.22096978117730126], [0.23249153910011294, 0.05305849985732187, -0.971150081006922], [-0.4935540030247387, 0.8669946280363852, -0.06873689732819102], [-0.5586463375624352, 0.8210604964802325, 0.11736239026072923], [-0.3110935483004816, -0.6443841229086075, -0.6985627433159606], [-0.5473452597879424, 0.7600048440379472, -0.3504365900223971], [0.4745597162218033, 0.5799462512917839, 0.6621596645463153], [0.2267173090430556, 0.9181090384633406, 0.32507699898977105], [-0.8274172779865464, 0.2712582958401129, -0.4917312121751597], [-0.37094794223961464, 0.7277170316614815, 0.5769103448353116], [-0.8784293407319104, 0.44083896755129837, -0.18445296969581818], [-0.661286890667424, -0.053523271604361045, -0.7482211622429401], [-0.6625415137435634, 0.18372765522303328, -0.7261424731226191], [-0.9559471439231741, -0.003579144819045537, -0.2935170314436463], [-0.6630914505206021, -0.5223347093634187, -0.5361680516784982], [-0.358166627621634, -0.39385346499997825, -0.8465200026967211], [-0.4787262639364905, 0.2370619400256197, -0.8453536542824543], [-0.9179558633630062, -0.39493617133394066, 0.03718135943676555], [-0.9897417500032377, -0.11699339947196095, 0.08199885840987466], [-0.9449001228342189, -0.32276503207131024, -0.05464880547536253], [-0.7998409171103716, -0.32162110318177767, -0.5067685599010421], [-0.8841208601002626, 0.08335278389044866, -0.4597636546675739], [-0.718538031989794, 0.6491065107118542, -0.24972752018092678], [-0.9055569686972679, 0.3861657053428443, -0.17562068346547038], [0.14340547212501115, -0.04006679841498373, -0.98885262917655], [0.1897278904634633, 0.08101227260185326, -0.9784888038542736], [-0.9157658136547809, 0.39056327496664456, -0.09398565203543671], [0.0076737231897907425, 0.39636870324008633, -0.9180593472451435], [-0.6376195199634135, 0.7700663132558137, -0.02095759886593016], [-0.331381560035301, 0.779194595266716, -0.5320169587294272], [-0.43827195468619984, -0.46505512684394623, -0.7691823078644611], [-0.23953954911742048, -0.33120674956089535, -0.912646094307059], [0.3323100209573103, 0.30775250534273435, -0.8915483416094845], [0.02561191103859733, -0.16553819432951758, -0.9858707502665214], [-0.8377232236202015, 0.4719716468738774, 0.27470450515879424], [-0.8144772024773106, 0.3736375500553218, 0.44387145417720975], [-0.9004963519096986, 0.4120990395688074, 0.13885496672352257], [-0.9755177890471557, 0.02846140299763602, 0.21807107050673963], [-0.9472812559559437, 0.1873069230673354, 0.25995064663427425], [-0.9755180560959191, 0.2151415517076115, 0.04559204930336114], [-0.9460289618464556, 0.09444580797190859, 0.31001482658777973], [-0.6861674124003172, 0.49595473293126274, 0.5321683803486759], [-0.7566151393917654, 0.31193478353430054, 0.5746566119558607], [-0.5171116407361609, 0.4854481812975369, 0.7049366030290026], [-0.6864806180173718, 0.2317414534619512, 0.6892316445389237], [-0.8875756869234427, -0.12731615946115576, 0.4427188673666852], [-0.9229505060333733, 0.02908902120959274, 0.3838179154987527], [-0.7882839314715551, 0.5090865576448286, 0.3455999424321242], [-0.45259483631567665, 0.465592690464507, 0.7605138793778897], [-0.9963628303273421, 0.005284297826963669, 0.085048142475682], [-0.6134629251349185, 0.5689839898891375, 0.5476499417828393], [-0.8119822459881486, 0.4658289445146062, 0.35169337021395475], [-0.7232261173231289, 0.6345594144729079, 0.2725405157504335], [-0.18745533300922232, 0.6858848777458936, 0.7031517848984683], [-0.9190505975477958, 0.3837983777116285, 0.08969283367672902], [-0.8991200867158037, 0.42500487695876804, 0.1046609966770254], [-0.8230858621364219, 0.5037680685805437, 0.26219724756330254], [-0.9132332397445854, 0.40618749794664616, -0.031886773707161184], [-0.8266100268867522, 0.5299776697966629, 0.18931331957150282], [-0.7510484813004862, 0.5750036191172407, 0.3244950180485191], [-0.8367721008920076, 0.5341982380469483, 0.12018607921182742], [-0.7951180406610425, 0.5957769474881685, 0.11330106026434512], [-0.8790089508667631, 0.47606963010890707, 0.026475867957085862], [-0.6378467926229372, 0.7269631891157046, 0.2543147475302134], [-0.7332326055665488, 0.6220876951306573, 0.27454843962608244], [-0.7710250283274831, 0.6015210566356579, 0.2090282854460741], [-0.8340772633323096, 0.540562357024255, 0.11003389005423253], [-0.7496757143150263, 0.6370076488961526, 0.1794647001893437], [0.020657526332812724, 0.7294782489794827, -0.683692000005585], [-0.1389798074790804, 0.4206371569960994, -0.8965204935010221], [-0.4702395308857409, 0.8362879220748235, -0.2819526467053156], [-0.20367837689555982, 0.9302129476907901, -0.30531785197331895], [-0.6441013479051168, 0.7576958297018427, 0.1050261076078135], [-0.6415697379724543, 0.6101365552363298, -0.46488886336661295], [-0.8014946048094734, 0.5670143731674933, 0.19000289230109293], [-0.7880067807780102, 0.6144811632589612, 0.038186561088827786], [-0.3391629474612101, 0.6654904009504766, 0.6648992565134949], [-0.3987210679739808, 0.7375087725088586, 0.5450709315549351], [-0.16619804370852417, 0.8320786196325582, 0.5291723547369381], [-0.11157577091930071, 0.7554426976911164, 0.6456447768308301], [-0.8083022450712634, 0.5705044368365579, 0.1455065914746042], [-0.757292234904291, 0.6426970711400506, 0.11596958955547475], [-0.6889507861188122, 0.7241886573028449, 0.029960022366030705], [-0.760060694513906, 0.6130807951035685, 0.2154986759361063], [-0.8279549608117914, 0.5447624736871001, 0.13313312934599245], [-0.803244101235388, 0.580252024921369, 0.13456040058354687], [-0.8367815729456995, 0.5285097083859579, 0.143087691016071], [-0.8264474473016677, 0.39252211164374695, -0.4036223590428195], [-0.6088098986050278, 0.6021734288906467, -0.5164665225342463], [-0.8391855029534567, 0.5150976835114564, -0.1744765545105855], [-0.3766774292704913, -0.11475842490051398, 0.9192086913168998], [-0.41708531272996474, -0.16610249725519594, 0.8935601839330887], [-0.5818654610413972, -0.12375090816454065, 0.8038148406041865], [-0.6014655742011328, 0.1986881860075517, 0.7737972394574243], [-0.31267851829754795, 0.04296307437034546, 0.9488868838991812], [-0.23133460417568988, 0.021340916029915412, 0.9726401524787474], [-0.22724221122224242, -0.08239901941529437, 0.9703460099563574], [-0.3146644965089739, -0.10062073081311837, 0.9438547150739822], [-0.16397275506479836, -0.1038644496240318, 0.9809817081376986], [-0.17234165085812497, -0.06828208694962964, 0.9826677525905179], [-0.17660196142376497, -0.09412746152909551, 0.9797712836205028], [-0.1525270475834253, -0.0871677471875496, 0.9844477048608173], [-0.11102734485788703, -0.1002940506260905, 0.98874366349566], [-0.11161301005076125, -0.1406545359708212, 0.983747344341138], [-0.4213759750546967, 0.5371539240938539, 0.7306900502109483], [-0.30365888055796086, 0.536492229606978, 0.7873800682196747], [-0.25377294896859315, 0.6607111594911003, 0.7064418264059045], [-0.35601170198699406, 0.6966710587646734, 0.6228202822066994], [-0.5861084412700749, 0.20631231778835735, 0.7835254447691913], [-0.6817952247343755, 0.39883979757168625, 0.6132553199136381], [-0.5511415923668115, 0.40298976477195947, 0.7306450538068509], [-0.44481443068558724, 0.25358304426742656, 0.8589736677651539], [-0.2655390550108661, -0.4456321037963112, 0.8549275047218975], [-0.3753338265895485, -0.40341387695434827, 0.8344949146030243], [-0.3039553178183919, -0.30107972744175937, 0.9038595922451209], [-0.1682223752443487, -0.2842998871443137, 0.9438616459189768], [-0.890592951868063, 0.38878977539111353, 0.23598030560675545], [-0.8280144091451188, 0.4105314193816622, 0.3819111047724819], [-0.8437592448173532, 0.3718907436798937, 0.3869982061333946], [-0.8658879427534344, 0.42958582179141547, 0.25630858805357903], [-0.7801451226106305, 0.25639226645550883, 0.5706457687292981], [-0.7182494242487858, 0.24768125460955567, 0.6502090130729687], [-0.7403384461271425, 0.18843219675650086, 0.645284659984698], [-0.7962647442750136, 0.1996197447406571, 0.5710642823135781], [-0.9721717148812322, 0.21006535081987238, 0.10370489462801644], [-0.9880445705662341, 0.14279457447699473, 0.05811743348187796], [-0.9813144716920805, 0.12867247499566456, -0.14305698803687705], [-0.9770749330870442, 0.18084393269209934, -0.11233898317771665], [-0.3358548585036896, 0.0832152067790352, 0.9382306450869046], [-0.29948585096528524, 0.013439868904112185, 0.9540060770222795], [-0.22214818713805112, -0.045098951773529544, 0.9739693360163892], [-0.26094923442523105, -0.011632662147400533, 0.9652824344326639], [0.09795447034765326, 0.6256155023144411, 0.7739574697635266], [0.09482207777368336, 0.5802530360238899, 0.8088975137504997], [0.3631738539180419, 0.7190719516376343, 0.592486523220875], [0.36746072381315925, 0.7713488194180758, 0.5196090984933287], [-0.9884744708329886, 0.04456403664561832, 0.1446798781769292], [-0.9844675612949989, 0.027810277410015103, 0.1733499617197982], [-0.9978491788174332, 0.04002533934478634, -0.05191327906912712], [-0.996342762721898, -0.02089452596227123, -0.08285238654684464], [-0.39406935102145796, 0.40879796370169347, 0.8231607203085409], [-0.6001735557138151, 0.03847036606029518, 0.7989441369438937], [-0.6179022637895338, -0.0694428138233615, 0.7831822827490822], [-0.4311107679266114, 0.30652344246854135, 0.8486382533181981], [-0.6877725459249987, 0.5860711547065761, 0.4283567750050726], [-0.664187194817457, 0.5322684631892581, 0.5249244263078854], [-0.607282946198975, 0.3370823100964909, 0.7194323731080676], [-0.6173670316748683, 0.43655692946943125, 0.6544279910984739], [-0.9411466372536461, 0.3010618950015113, -0.15363834991385672], [-0.9476694419271681, 0.29144164549555057, -0.13032419617360205], [-0.9510250340730567, 0.30117150460479547, 0.0696211848536423], [-0.9443949538217161, 0.327599952734345, 0.028221306924621863], [-0.9453410272578554, 0.32485258222795277, 0.02830445199776838], [-0.9491744616983059, 0.27884577709703867, -0.14598929363100505], [-0.5319728676474039, 0.2991484392019615, 0.7921584938697734], [-0.5213495762429657, 0.18512655238595482, 0.8330202752352251], [-0.41146578936728434, 0.09089043682229093, 0.9068819287396848], [-0.42376478337443, 0.18740001440625198, 0.8861741606321858], [-0.2610595038584543, 0.6618405752787287, 0.7027197082478184], [-0.4049728313988657, 0.6716325057048993, 0.620408561441043], [-0.9256964278366621, 0.050816595747997385, 0.37483836127993647], [-0.9340226333875634, 0.060440500666388286, 0.35206344058842237], [-0.8457739456935928, 0.03589648646037233, 0.5323324854315127], [-0.8444385890112985, 0.0599733223637612, 0.5322843882674558], [-0.5668368424476328, 0.29739597569464926, 0.768278352997548], [-0.7005324199010804, 0.3183155250918274, 0.6386936316834938], [-0.6092473200035957, 0.47489483338046773, 0.6350532263495511], [-0.47668119370336026, 0.48644296337987286, 0.7322214712419647], [-0.7642639287629491, 0.03335128936222778, 0.6440406343466993], [-0.751875471631835, -0.007686774652629433, 0.6592603345066691], [-0.7009697265645437, -0.05533220096654188, 0.7110413419599645], [-0.7137422196111392, -0.016142802718922662, 0.7002224317064847], [-0.15168555147723584, -0.08848509210545323, 0.9844601982549301], [-0.1322017325367004, -0.07607326567010737, 0.9882993272104255], [-0.6680013799924372, 0.5052021935113326, 0.5463926244007486], [-0.5764444613327804, 0.5230894019002181, 0.6277652910271743], [-0.46935911894810184, 0.7055595628677915, 0.5309309942978206], [-0.5985986671252808, 0.6786114174728543, 0.42563620592158374], [-0.6336349491008183, 0.7697494840147451, -0.07741113057588755], [-0.6337056870277257, 0.7676295680010632, -0.09571806809176216], [-0.6208947855516389, 0.6682506902570564, 0.40979346047216514], [-0.692357493712209, 0.6711536681456864, 0.26494122864352043], [-0.9910584677237834, 0.12469951790553198, -0.047467291760901614], [-0.9514740272445973, 0.24051256540479884, 0.1919658338386014], [-0.7694756282480082, 0.2974920241297819, 0.5651599358690409], [-0.7279777737869543, 0.23319759167671378, 0.6447226102040867], [-0.07429672958223059, 0.8927327015871087, -0.4444190809251635], [-0.1378346870924423, 0.9532396587029875, -0.2689530667420257], [-0.7476124678082879, 0.6571890077633044, 0.09580295430040248], [-0.7730152516622707, 0.6111507473625799, -0.17012402739083146], [0.04474225421787909, 0.43144751738979625, 0.9010278410935391], [-0.07752089364185978, 0.5974685409169097, 0.798136488116905], [-0.14681538062247917, 0.5404084329605915, 0.8284950027596754], [-0.10131620570697755, 0.3479481194582658, 0.932023139533884], [-0.6239269931597281, 0.6318621975662225, 0.45985353156569814], [-0.523944337647357, 0.6675725960081228, 0.5289888090557756], [-0.7043065462068859, 0.47576098736930333, 0.5268811743339415], [0.1658841922891093, 0.4191965962045421, 0.8926122609952858], [-0.10127586649043945, 0.5031369234749125, 0.8582519648115062], [-0.13400812142580426, -0.026786275944516477, 0.9906181498503606], [-0.09168521696109037, -0.08274580259617495, 0.992344170710703], [-0.20267321935123211, 0.01468456006785989, 0.9791363183200902], [-0.26805731823845125, 0.07019812407869742, 0.960842077302322], [-0.1897791249560039, 0.10228430962402524, 0.9764844103904935], [-0.15780322406731312, 0.08243328979165632, 0.9840238285773807], [-0.27938298606429884, 0.09934338335598179, 0.9550267217628949], [-0.1803517180325567, 0.08459352162280473, 0.9799577510801969], [-0.3589064563548997, -0.012148429829753877, 0.9332944718787527], [-0.4897995026331555, 0.3943113051125974, 0.777569959476775], [-0.6693944408472232, 0.7152716066158405, 0.20074264950933537], [-0.7315834299240134, 0.664899797463697, 0.15064509415626867], [-0.8198966056310659, 0.33265040295931747, 0.465954145260733], [-0.36059321478205125, -0.6773008633574559, -0.6412769089468219], [-0.47457482835593673, -0.6261914027925555, -0.61859765547537], [-0.4901317877014469, -0.5666832270830728, -0.6622997439432528], [-0.3355271425876768, -0.6133414815092063, -0.7150061283982403], [0.019249109450144693, -0.2723440529296408, 0.9620073745139552], [-0.1559443270296279, -0.5427045324961274, 0.8253200332449444], [-0.449148492383749, -0.0639671895266117, -0.8911643117032187], [-0.45999924803820724, 0.09282007208906437, -0.8830544298182672], [-0.5388665034629835, 0.08713488645313537, -0.8378725458017928], [-0.4894180884116469, -0.05521781826061667, -0.8702993320013677], [0.30580812425855536, 0.47264191446028636, -0.8264932013227813], [0.34136406541271935, 0.2894404879172665, -0.8942565508840936], [0.5465642830947713, 0.03545850086252535, -0.8366661097245908], [0.6759940473285225, 0.18469139277657157, -0.713387088059949], [-0.9518079767715072, -0.00023937529172022914, -0.30669450280955435], [-0.9250112334162764, -0.12509125476151292, -0.3587567365721365], [-0.711932946108603, -0.03601626459532762, -0.7013232556601303], [-0.7662728264632526, 0.011414440695103174, -0.6424139366231372], [-0.8557145024152982, 0.08958607781146045, -0.5096342070725802], [-0.8505339687451002, 0.03510667388561925, -0.5247470718921616], [0.1762917179285677, -0.6620304810898797, -0.7284482632951338], [0.22974531820307922, -0.6708148590877419, -0.7051414848034815], [0.23904238540382677, -0.6435185881361445, -0.7271468659794331], [0.17122167839932664, -0.6440812185883039, -0.7455484697240837], [-0.08699988026010125, -0.7596538551519236, -0.6444819944634204], [0.09340202539919046, -0.7482513978839767, -0.6568073592888586], [0.06116090660825488, -0.7875785544244833, -0.6131715617292584], [-0.10077031358478192, -0.8074185559063007, -0.5813094008169905], [-0.19996432007383888, -0.6981417161866251, -0.687468119128008], [-0.20021320648473567, -0.635346184894927, -0.7458216256509071], [-0.9153248909723569, 0.21941751587591204, -0.33769260828938363], [-0.9190861206384973, 0.22849288143474544, -0.3210478250717873], [-0.8446138980846025, 0.43567947402466756, -0.31114427373153064], [-0.8350704854719034, 0.4573428922395364, -0.30576913384397586], [-0.8477986568987721, 0.5222800317679683, -0.09198372560995854], [-0.8908151317301806, 0.44362025977328196, -0.09823169650996914], [-0.42076303423663314, -0.4713016797853859, 0.7751343081372774], [-0.46756816162010045, -0.7591158835870063, 0.45290516614973375], [-0.4652785205460915, -0.800419356310677, 0.3779480815689397], [-0.1587296169855215, -0.9059378263998491, -0.39253224503159784], [-0.21778844928735355, -0.9169962836925213, -0.334194564664231], [-0.18048455787933476, -0.9208758253252801, -0.345561917315241], [-0.09677474652220532, -0.8827289578970549, -0.4598089117508952], [0.0749698622109563, -0.3862144452081804, -0.9193573418821473], [0.022048409430664176, -0.34130485424358437, -0.9396940268573294], [0.12302053531463908, -0.355159060701113, -0.9266757736623976], [0.13161348959201502, -0.4184731178524312, -0.8986423865989616], [-0.7376700704723373, 0.365208423876578, -0.5678606116459589], [-0.6892228712721356, 0.27795408630421725, -0.6691138614781351], [-0.6086162482184045, 0.31670387410575607, -0.7275197031908887], [-0.6776160473788111, 0.3969307774770128, -0.61909809418719], [-0.7785653707530312, 0.21312454407909637, -0.5902659503776856], [-0.8173680370905149, 0.32640452949492876, -0.4747310555124795], [-0.8069104677053484, 0.34381085636431685, -0.48030156376340377], [-0.7610752720102327, 0.21392188923267924, -0.6123739508190004], [-0.7956111158178373, 0.035270637170405766, -0.6047800712165453], [-0.7605132786480225, 0.13535124701198184, -0.6350587318763019], [-0.8568718585468279, 0.1848060593832578, -0.48126639031386426], [-0.8608096075240194, 0.1307761173334834, -0.49183780530732146], [0.24058768706329633, -0.20938792710766546, -0.9477733172099163], [0.18813025822187474, -0.24396953128342705, -0.95136001269063], [0.053936648070199475, -0.24851894349501535, -0.9671241764732557], [0.07598556993651327, -0.2113287320111745, -0.9744569565598946], [0.7327349698146185, 0.6132301888261773, -0.2950393186051326], [0.8712177335178647, 0.3847143498487868, -0.30491725078194637], [0.8532378104284727, 0.5035218268531403, -0.13583449023610264], [0.753481046343962, 0.632209435809477, -0.18049249866371458], [0.05396297351900699, -0.46702739572433233, -0.8825947026421215], [-0.048841442669316754, -0.5080297831123181, -0.8599536341854898], [-0.10331024528823039, -0.6019231527091862, -0.791843110376746], [-0.0022062394657603366, -0.5656376379280524, -0.824650953474616], [0.8584456112578754, 0.3841923527512124, -0.3398048978451906], [0.7929974414647902, 0.4782886211591027, -0.37735269006596617], [0.7904346147806823, 0.5349847520746771, -0.2983361104595127], [0.8597297884774565, 0.40657930487621774, -0.3091245050960526], [-0.4140745135276958, -0.8075779842412613, 0.41995249328420864], [-0.4161944735811638, -0.7778822961454936, 0.47083042967071775], [-0.15753573959264802, -0.5930882104433634, 0.7895751169990645], [0.8360445137524252, 0.2966851504721468, -0.4615273475253557], [0.7735675761458873, 0.14605898316231075, -0.6166522347104313], [0.6475123850820459, 0.03692239828311328, -0.7611599356708048], [0.7946760253452593, 0.25390030916349887, -0.551384301325437], [-0.2069646717283131, 0.3854417277019293, 0.89922205222211], [-0.20630376465217298, 0.37546306825863185, 0.9035852151646543], [0.6645887305881623, 0.41676127963769355, -0.6201869516282709], [0.7716745119809508, 0.3957415349826504, -0.4979026863238809], [0.6563102424512047, 0.2013716439282575, -0.7271219475956369], [0.5139092084358436, 0.1663068379795963, -0.8415695818683518], [-0.7996677886340933, 0.08040792402882854, -0.5950344473847151], [-0.6415987389685852, -0.005395124453359137, -0.7670214800030402], [-0.6677156150916342, -0.1267320870580612, -0.7335494771811295], [-0.670577189444432, -0.18047072066871941, -0.7195530223535436], [-0.7998588716354805, -0.18426832273209653, -0.5712013398999654], [-0.8243711616005867, -0.08943402343370786, -0.5589398387785205], [-0.9463499807874608, 0.1013355484940294, -0.3068433158388608], [-0.6827907801382782, 0.047670969984839225, -0.7290570822499883], [-0.84123616587376, 0.09872753172687102, -0.531577452216641], [-0.610373941399806, -0.7380766836298861, 0.2875525356208411], [-0.5153234518342925, -0.81250144092102, 0.27254935056032703], [-0.436750904498357, -0.8880553013729187, -0.14354939610921974], [-0.48376498034476284, -0.8583209764133004, -0.17104544788140347], [-0.9814608929687836, 0.12651824076447854, -0.14397100515999445], [-0.9809538821899942, 0.12734553984592684, 0.14667172357931915], [-0.9991153899868191, 0.026883035048435564, 0.03233790219032223], [-0.9821970364028917, 0.1356767669162372, -0.12992611977787144], [-0.205692468890791, -0.8286351792906468, -0.5206288004745497], [-0.2261639221593218, -0.8638015633360121, -0.45021854636584424], [-0.3455578879882732, -0.8695246300965185, -0.3528691878084521], [-0.3354894294613685, -0.8636549884078234, -0.37622719694084855], [-0.95726608446932, -0.08854061020605987, -0.2753220003361793], [-0.9946116883516027, -0.10171049165409836, 0.02006402955181162], [-0.6356474766154665, -0.4005430952093281, 0.6599375079145913], [-0.4795176756503051, -0.473011582935745, 0.7391365510834581], [-0.740740955631187, -0.18096341391738452, 0.6469583290088794], [-0.48659597055544423, -0.2685470432024667, 0.8313283629387475], [-0.831371631610014, 0.0925350343778714, 0.5479584633590296], [-0.956190503430734, 0.04085118349927095, 0.28988084095984745], [-0.9739240970912949, -0.1755881353510984, 0.14366857634441302], [-0.5334220028909884, -0.8425840876203646, -0.07424972808518768], [-0.3401718258615198, -0.8863366311205316, -0.31415044998208497], [-0.22982344232220026, -0.898372665138549, -0.37430968447401225], [-0.1271077207545201, -0.9212967210297647, -0.3674996314887882], [-0.030543251116087942, -0.917993304467957, -0.39541801016552164], [-0.039881615140903055, -0.8584253643895692, -0.5113857160171648], [-0.930643443260882, 0.36474568129042195, 0.029383149856944006], [-0.9358978633131361, 0.2298950118240158, -0.2669147298002536], [-0.5859890164156504, 0.7485666706780538, -0.3102657122374181], [-0.6168575843567873, 0.7023869913426563, -0.35516085794203234], [-0.4064385617057933, 0.8850186623730418, -0.22704550823559144], [-0.4030768005756573, 0.8689608458541842, -0.28711694692245626], [0.1401707268793826, 0.9586729591466769, -0.24758498485784555], [-0.17365053432737226, 0.9544215634422826, -0.24274466248345666], [-0.12300378506359934, 0.9877078472880686, -0.09645349794381305], [0.12726025242009226, 0.9918583850445979, 0.004666065869302514], [0.05746403103217291, 0.20761333865152606, -0.9765216775635349], [0.0405959971786301, 0.054974741157868025, -0.9976621386259469], [-0.06980833336536521, 0.04500507736065528, -0.9965447002540888], [-0.07014654507423007, 0.19469026400758685, -0.978353291666566], [-0.842007145747498, 0.1507118340609331, -0.5179863990339334], [-0.703298171503545, 0.12641228356150108, -0.6995653054036748], [-0.8768697702298969, 0.43384866082277806, 0.20706217800276794], [-0.4537907240484124, -0.6021642126649608, -0.6568654654898562], [-0.48861136507151354, -0.538553034196274, -0.6864543417307077], [-0.5486054098877527, -0.304833268061229, -0.7785298856980389], [-0.537937504300886, -0.3709923759483665, -0.7569596412324239], [-0.547563587058146, 0.40674424952260724, -0.7312545614273511], [-0.39558431394459664, 0.735495088747726, -0.5500545654650614], [-0.5009988463511386, 0.7124523730842509, -0.49133671961440806], [-0.6332195708230568, 0.4162195198149795, -0.6525291460552944], [-0.6418811033832524, 0.23380926691476372, 0.7302888988778887], [-0.6138293667606023, 0.47374673617428603, 0.6314883518058662], [-0.6952597605432206, 0.4612958238446429, 0.5511987194042414], [-0.1278474894148638, 0.2954213561273573, 0.9467741239568124], [-0.09855043982725081, 0.45395146749746157, 0.8855596399829637], [-0.30132883035749086, 0.46995591961812233, 0.8296640100735184], [-0.3148954877332059, 0.2942966452683784, 0.9023471152439312], [0.09304689287054248, -0.7620804429912363, 0.640761792039303], [0.03754935591012062, -0.7304661421072965, 0.6819158753875862], [0.0179897564915545, -0.6965151748003686, 0.7173165130778646], [0.01980815148015721, -0.7311756797725932, 0.6819015782677332], [-0.8815959801399138, -0.24711988869262771, 0.4021446113199681], [-0.8565859945938987, -0.1879378365110658, 0.48056196631976766], [-0.6489930889733917, -0.5347094033120923, 0.541196659703662], [-0.5450230233342799, -0.7576617515130055, 0.3590244759480974], [-0.07557918865495604, 0.994477477819924, 0.07281711578455402], [0.0982475854622958, 0.9718193391341536, 0.2142768863776154], [-0.3237801671205188, -0.8652882304316392, -0.3826783004769038], [-0.3957383410279194, -0.8157986189043058, -0.42173899373225787], [-0.14826301261092162, -0.9825192672532076, 0.11257872164736081], [-0.11267908299318034, -0.9896796411927404, 0.08853040192173738], [0.15240609531055707, -0.8150809686048631, 0.5589413177877866], [0.17159038939498786, -0.8264619235569624, 0.536206515419015], [-0.1946160063853862, 0.5024152019882637, 0.8424390630008175], [-0.39440637086977876, 0.5233477430642298, 0.755348101504801], [-0.5415515855253725, 0.28237962230937297, 0.791822978398184], [-0.23800475147960884, 0.02197074581697622, 0.971015460536739], [0.1831832351343701, 0.7846499756310789, -0.5922569696574734], [-0.059314314168216496, 0.7766153548885347, -0.6271765323145544], [-0.07036384385933811, 0.8829545030394376, -0.46415544275567683], [0.16069216885184887, 0.8702385414239796, -0.465685417304379], [-0.5269469936925975, 0.08703081020541506, -0.845430366093697], [-0.4870869556284122, 0.014227959837462702, -0.8732375752425616], [-0.28469930032894647, -0.0034150550570302726, -0.9586107895236552], [-0.3066509280118348, -0.08875204797456897, -0.9476751987520833], [-0.4789924498231646, -0.12646259424801526, -0.868661870504551], [-0.30876433611019316, -0.17502436032622076, -0.9348962819686625], [-0.32637672073767404, -0.20431838766867866, -0.9228934026316333], [-0.49992081676769695, -0.1323334984926787, -0.8559012922872631], [-0.46372923771923574, -0.0992907883191627, -0.8803956686849929], [0.1226156178777293, -0.7083944606649297, -0.6950846699156198], [0.15769682003966937, -0.6482496089346446, -0.7449188932128494], [-0.1763819183956844, 0.9693845623991237, -0.17083029311371417], [-0.18573843418211308, 0.9125919297474038, -0.3642488213124193], [0.045645903177522394, 0.9979696072198124, -0.04441975448650843], [0.07522176177943417, 0.981628111763808, 0.17535089606220614], [-0.537197694663247, 0.48118837663077907, -0.6927311044293657], [-0.6014988917155828, 0.032385895684895194, -0.7982169110120461], [-0.6173977076226923, 0.1490043937257669, -0.7724103580821927], [-0.5496518861458852, -0.5096401475157964, -0.6619287908048327], [-0.6095862709298039, -0.17935029533192648, -0.7721645225327609], [-0.17492255297645073, -0.9736558871831582, 0.14627478871554694], [0.17586492587701102, -0.8100114925822132, 0.5594219424826029], [0.3901548281195965, -0.08735889782822141, 0.9165956758927059], [0.4445355293969998, -0.07585111954316959, 0.892543988141636], [0.42321345894038476, -0.25315090871567214, 0.8699453923023818], [0.3752837999066378, -0.2930033175451273, 0.879381103637771], [-0.10277670706143767, -0.7773181134897406, 0.6206557007926039], [-0.38426156832742975, -0.573934067602388, 0.7231477948192344], [-0.14268083985935529, -0.819856517823621, 0.5545065086355213], [-0.14274114278998562, -0.8540809566879223, 0.5001706564544272], [-0.33143294007167345, 0.005425593397367945, 0.9434631784927978], [-0.10591093989323554, 0.031350852260939505, 0.9938812790637743], [-0.6468067989801185, -0.019392014835775438, 0.7624073153857468], [-0.5171919583259682, -0.004206645576298139, 0.855859090257237], [-0.5107780272788689, 0.2638757899132238, 0.8182147483068117], [-0.3180592492589721, 0.048031406432509874, 0.9468533666608225], [-0.3141700647565815, 0.0948757539106397, 0.944614080845047], [-0.5116796397783555, 0.1510696868439453, 0.8457906927562897], [-0.5187091013770445, 0.10213668734167831, 0.848827995089398], [-0.5053270328209651, 0.04955001528624758, 0.8615041415370515], [-0.3120049995832969, -0.018755997438762547, 0.9498953062285885], [-0.22031114496188123, 0.2527899376499161, 0.9421041592247306], [-0.4043611179266727, 0.283467801433762, 0.8695620115088979], [-0.32581878679468046, 0.5055136758620661, 0.7989355679202575], [-0.09571444655713496, 0.03747170338648576, 0.994703280463866], [0.005379942659946612, -0.012148637660059183, 0.9999117295141507], [-0.8202631931048652, -0.5615478524968893, 0.10877639171043711], [0.28726041868116226, 0.8486944740714009, 0.4440710996448559], [0.2462343618534669, 0.9179351894611029, 0.31106852459164913], [0.39377398079856935, 0.7104436805080002, 0.5832768029609052], [0.3934942011321005, 0.6627743178037185, 0.6370969450054093], [-0.955399600346473, -0.08472159399886853, 0.2829025541915277], [-0.8821958338526237, 0.3238088828632591, 0.34187471113248813], [-0.8336113531935714, 0.462468948940902, 0.30201752116769665], [-0.8891434220534817, 0.3328610532390972, 0.3140501460843205], [-0.9351953210625175, 0.1780766257002225, 0.30610198764790425], [-0.22598615079533366, 0.4102306705450939, 0.8835389389228023], [-0.2259811573451264, 0.26866364635932904, 0.9363505548937677], [-0.6374888246309229, -0.03262679745976462, -0.7697684655519501], [-0.19812827950312736, -0.962263668656375, 0.18653100773089906], [0.1706862216715877, -0.8000303196232312, 0.575167542038864], [0.15850400454174002, -0.7906424719847343, 0.5914059198537843], [-0.21771863525837867, -0.9447565609172482, 0.24501762480491662], [0.4706441334165646, 0.2195506782130152, 0.8545710031219033], [0.48043063591951296, 0.2945793772665988, 0.8260807433654385], [0.505739861986519, 0.034152503514453876, 0.8620097438553418], [0.4895079713713412, -0.0402744512431962, 0.8710682605519348], [0.5218641043695921, 0.3416756453644872, 0.7816109069961118], [0.55638739255506, 0.4086394562590387, 0.723496277940736], [0.5821942709225117, 0.1541882622431323, 0.7982955659976122], [0.5690593416467276, 0.04851129110012963, 0.8208642520663153], [-0.45296399093739126, -0.8306314390698608, -0.3238441528618403], [-0.6821007786929814, -0.5276994103750724, -0.5062330095877088], [-0.6341394171191763, -0.5225071435519055, -0.569959195550857], [-0.4999866046709932, -0.8306250864702595, -0.24510275574918766], [-0.525282366435284, -0.8314821382065297, -0.18087534203325076], [-0.4091803267720496, 0.7210844513229231, -0.5591141871237374], [0.4286984592104879, 0.13907486386463774, 0.8926790091133464], [0.45003980755289263, 0.16385713653242392, 0.8778468035056857], [0.2802614323293996, 0.8161536498788846, 0.5053184632863204], [0.34026286572950626, 0.7668501489978112, 0.5442077095995415], [0.18175570486547543, 0.9532257913188683, 0.2415066345121217], [0.09728704176844478, 0.9695383041787761, 0.22479036508286562], [-0.6321357088031109, 0.4151167332827178, -0.654280171948282], [-0.5990823504255456, 0.4302658171056159, -0.6752567393510711], [-0.656957378623404, 0.12059113388386711, -0.7442209222407474], [-0.6972885114141758, 0.13474677996474, -0.7040113899213115], [-0.6593645335925815, -0.19096269610762273, -0.7271668725509607], [-0.7216726954794193, -0.17723731808075185, -0.6691602600864847], [-0.7248044427408993, -0.5620502722063829, -0.39844448960399154], [-0.7095060209473896, -0.5411125875163262, -0.45144033256986293], [-0.5337401287032111, -0.8383000788834256, -0.11124051760002808], [-0.5362115405848836, -0.8406167171155909, -0.0764245945320771], [-0.7634281355672192, -0.18939883824055098, -0.6174994428317236], [-0.7500931259204036, -0.17552877119922605, -0.6376126982175366], [-0.7286183835410206, 0.1468000454932329, -0.6690029878926214], [-0.7254690688186806, 0.14590050454777484, -0.672612572704422], [-0.6743785338029213, 0.37844775711728956, -0.6340275138183794], [-0.6647854120086217, 0.40428286380329853, -0.6281844649587657], [-0.5812923688300428, 0.5891387624715312, -0.5612617041037722], [-0.5639037862850843, 0.6214528617422915, -0.5438831312383778], [-0.4160325306746558, 0.8333164628324533, -0.36400632713299125], [-0.4409135657464739, 0.813087533527281, -0.3801103660297264], [-0.24883474448104495, 0.9557009447105295, -0.15721632936325255], [-0.19882445148462075, 0.9755901564420079, -0.0932345651853352], [0.2605912571264149, 0.9057183836004068, 0.3343148311360729], [0.23909544616062828, 0.8682738367448651, 0.4346652873759316], [0.04444149632352265, 0.9811724097013115, 0.18795120602286156], [0.01259508957807536, 0.9961573800220106, 0.0866708598446094], [0.2466446847359399, 0.8568731339966515, -0.4526972848673438], [0.1593747728635717, 0.9453921767919709, -0.284312000863882], [-0.0465044587278248, 0.8609953704539773, -0.50648228732627], [0.2641298409381324, 0.703010659913534, -0.6603116227766512], [0.24241706972023133, 0.5008612829920072, -0.8308862374042892], [-0.19646665882255543, 0.7711354753068654, -0.6055996455533605], [-0.27087039923302003, 0.6396133900814085, -0.7193913663979518], [0.15378378369121154, 0.24201217832052063, -0.9580086917237083], [-0.38916112442610395, 0.08299353901096698, -0.9174233982833911], [-0.13867045375608072, -0.31368758554756193, -0.9393458382983467], [0.012013296923666933, -0.032107560036083053, -0.9994122199000536], [-0.3344360636861194, 0.3892352337986132, -0.8582822682986483], [-0.5098073264719403, -0.24918411344247618, -0.8234098417455425], [-0.4554373644752189, -0.5720479882199909, -0.6821568047108584], [-0.7000149608487874, -0.5144000073938867, -0.4953500650863388], [-0.7311251473753733, -0.6055846205972859, -0.3142026196125364], [-0.7635923500660451, -0.593643984778013, -0.2539951618781288], [-0.83435056172749, -0.5276350979293298, -0.15956297684026993], [0.3666933155467854, 0.4389677286411994, 0.820270288103191], [0.4542556656102595, 0.6737224081145112, 0.582880697111651], [0.333860169966208, 0.8700625899409834, 0.3626685490848671], [0.23216789076453656, 0.6181651185560052, 0.7509793317386215], [0.26058096129293196, 0.3034841469146727, 0.9165123759028706], [0.17894781457109063, 0.4333835009133146, 0.883264638031179], [-0.06712478861210035, 0.2646393000658459, 0.9620084737747584], [-0.015653017116699256, -0.021414787233434922, 0.999648133066276], [-0.7080708816300136, -0.6065818914493359, -0.3615163005362845], [-0.7391089684400979, -0.2606790254010974, -0.6210993306125424], [-0.699521897293697, 0.10362292208707616, -0.7070582756921541], [-0.6486225546719645, 0.3374556548399902, -0.6822114500558663], [0.3016144405582455, 0.9375629976558624, 0.17321765115971915], [-0.0232332281683676, 0.9928431424620554, -0.11714397797133103], [0.5552102028955017, 0.23136897315346536, 0.7988804847176121], [0.5747286572104964, 0.47167910348364017, 0.6687344719078636], [-0.3150565064463287, -0.7958745851262258, 0.5170329220620216], [-0.6004264458158872, -0.799627322393107, -0.00917760575158931], [-0.5474215880468625, -0.8355921132376611, -0.045993752132990826], [-0.22607612732529883, -0.9037122355685206, 0.3635846255513865], [-0.6883904803506161, -0.393220108291772, -0.6095051213875528], [-0.616267452179558, -0.021341763612185413, -0.7872477097521706], [-0.5639366296726049, 0.26979905514164665, -0.7805023687076023], [-0.4556109848262055, 0.7180522910128312, -0.5261364251569353], [-0.5317893724607936, 0.5116074084162863, -0.6748762279050333], [-0.2806066097564046, 0.8683966924466874, -0.4088362937762132], [0.2612480004252605, 0.9639119546833768, -0.051217437384886835], [-0.07541999624013818, 0.9430192511841319, -0.3240779475114851], [0.45265284205707623, 0.33983452552732885, 0.8243894103136375], [0.5334466599836053, 0.5550565219665564, 0.6382373526946894], [-0.5071927386021287, -0.08015830206612133, 0.8580968316682851], [-0.8495936265130123, -0.3936408361334826, 0.3510520786387698], [-0.7399856561540201, -0.6642807275421277, 0.10560465757913236], [-0.45625628601410817, -0.47438634785952827, 0.7528531028275776], [-0.43451946427679966, 0.18528803696336113, 0.8813972875626899], [-0.10262972232362805, 0.41285833061634203, 0.9049945518821991], [0.46442793123704496, -0.36371965604264483, -0.8074742772962484], [0.6735848570997357, -0.12315479853297534, -0.7287772882604334], [0.26912741134661206, -0.5202575521723604, -0.8104952287765149], [-0.8072969321955874, -0.571938675619573, -0.1454572603829798], [-0.5834667043480213, -0.6930690964446042, -0.423345996167105], [-0.9314063606837869, -0.3316307431789852, 0.150010804465337], [-0.8069000916054614, -0.10450542724240657, 0.5813698116035783], [0.6977863726806911, 0.5794922198690826, 0.421049813219679], [0.46600677398329704, 0.5966218550973246, 0.6533605808601459], [0.3176654890102995, 0.679957848047298, 0.6608675827809491], [0.48610079903528697, 0.8093481893904219, 0.32963847091579185], [0.9824156474086352, 0.050511526236001095, -0.17974448932855225], [0.7466601968315002, 0.5114033188272591, -0.4254000422661123], [0.804004929290166, 0.22082887302862472, -0.5520966242552319], [0.9148304024151547, -0.19842725300356642, -0.3517271102465442], [0.4867824044279952, -0.622194260667982, -0.613120863069528], [0.7127585088959277, -0.45970324913781724, -0.5297624285739672], [0.2002868938720102, -0.717517228318096, -0.6671238170008768], [-0.7412801537023564, -0.6175301196106936, -0.2629834312283065], [-0.3390436070566932, -0.7419458420726305, -0.5784166318019582], [-0.08233968940657595, -0.6660870891299276, -0.7413151591886195], [-0.9111190094333512, -0.40308993323592196, 0.08591074655157445], [-0.7960529523459512, 0.07779624222271611, 0.600206166044068], [-0.9334225791067672, -0.26168575742617495, 0.24544419564120884], [-0.9043837971940952, -0.04354772977241687, 0.42449209957837647], [-0.3468127167988104, 0.4859866987465238, 0.8022081201958028], [-0.36915186403637534, 0.4681760344046501, 0.8028313036296014], [-0.7075999434143684, 0.336076769551824, 0.6215743922070733], [-0.7659567765315956, 0.28275398422673725, 0.5773737099048009], [0.8673678536989953, 0.3344390149428357, 0.3685424692673347], [0.5186327978060173, 0.4893245306135765, 0.7011287505014366], [0.8537951338631131, -0.27065708271503874, -0.4447230744720285], [0.9805880395227917, -0.03797368073360364, -0.1923670874042394], [-0.8873354592264757, -0.40359866320473553, -0.22303340973650132], [-0.6431504172500022, -0.5406687992460223, -0.5422497490207001], [-0.6115214556442032, -0.6427841602434488, -0.4613784050287997], [-0.8523481135212515, -0.49378815672006876, -0.17226708815023456], [0.6230795212811708, 0.5958563329214968, 0.5066824850706542], [0.6032277621226344, 0.5177334878631861, 0.6066863296214433], [0.8936993459244552, 0.36411055577165463, 0.2621545007621606], [0.8531127403587783, 0.48467811187853443, 0.19309526173211616], [0.8677615909807362, -0.1756166715935941, -0.46491784852484347], [0.8134198070568758, -0.09383727687076446, -0.5740581703599685], [0.9523528391971188, 0.04004569966082132, -0.3023580850777139], [0.9798274044283266, -0.010679488299477017, -0.19956003122095833], [-0.9210397689647436, -0.2243590638249575, -0.31835319138491497], [-0.7077949432407636, -0.30909954502477743, -0.6352037386447593], [-0.6945274963638207, -0.39478638339566985, -0.6014775708868703], [-0.9189222449453669, -0.2873781003199404, -0.2701772292423422], [-0.7669547249342519, 0.14476120794992384, 0.6251596936574727], [-0.8492287640012977, 0.15212037435995185, 0.5056381098151287], [-0.9884546339652581, -0.13836664422834202, 0.061742273667199296], [-0.9712213940974019, -0.1930061814055883, 0.1395622355321535], [-0.40702132807074837, 0.4066538570044047, 0.817903587887329], [-0.3953866931869209, 0.44126930378741536, 0.8055748037182403], [0.8590584620507722, 0.5070035584776913, 0.07046950028147168], [0.6188265308611016, 0.6353042886002339, 0.46199803634708775], [0.6057010224993661, 0.6594873315627039, 0.44519965279807533], [0.8319080338872351, 0.5481881252764015, 0.08613247041516328], [0.7109518335546843, -0.011576363554046296, -0.7031454175148246], [0.6816298302148123, 0.042565925486173425, -0.7304580183342719], [0.8336223348135249, 0.23189617165606854, -0.5012962881084465], [0.8857957242544293, 0.15734772498948785, -0.43658633548612513], [-0.9110400109480353, -0.19936635297489808, -0.3609143329840087], [-0.6982657776591276, -0.27327098500435393, -0.6616251752350754], [-0.7053960033410022, -0.2836723241363706, -0.6495740842964802], [-0.9127577943147951, -0.20642759484505882, -0.3525065346969817], [-0.7866917746236111, 0.2537130368909737, 0.5628016938950283], [-0.9990238352671424, -0.028553577035574935, 0.033705634641743795], [-0.9926457540519638, 0.017368907730764483, 0.11980287144659123], [-0.3257675860672916, 0.44379633534593044, 0.8348175205405145], [-0.2688376638233213, 0.36255612766468415, 0.8923448687602838], [-0.7658050706221509, 0.1933062120010537, 0.6133313152050908], [0.8558575044859256, 0.4883345340594663, 0.17040338864015578], [0.6014728299258818, 0.6166588329109057, 0.507899910074722], [0.9139596550715572, 0.16647222630582673, -0.3700874852926828], [0.8716955796169031, 0.20035103583067318, -0.44722061548851655], [0.6787793380528675, 0.005106848192130592, -0.734324540195991], [0.6978288907814046, -0.03093423977601182, -0.7155961933942037], [0.015699440017347317, -0.25429254509891536, -0.9669999116288779], [-0.10918600662592393, -0.26462128074025604, -0.9581513417704273], [0.3032719358987629, -0.20036516209468272, -0.9316007378244116], [0.4055104225031227, -0.15039254104243627, -0.9016337287613735], [-0.6966632776271142, -0.25205621271746026, -0.6716605863353728], [-0.40071663510776856, -0.2751466828726088, -0.8739110259357685], [-0.3745272558761667, -0.28521667634971154, -0.88225890878919], [-0.8922493022555515, -0.18730956950707472, -0.4108604480788527], [-0.9976410375014436, -0.021718931395574965, 0.06512026038090808], [0.12842128564227892, 0.797166768711759, 0.5899433161377771], [0.16780768990958325, 0.8429179037701269, 0.5112044470766901], [0.24999006024070008, 0.6988395176248003, 0.6701703502743072], [0.17048201443649436, 0.6717437227071366, 0.720899614202444], [0.521434124707028, -0.1961747431467997, 0.8304347799450013], [0.48461717994080916, -0.2597376400983646, 0.835273935438159], [0.554415641373732, -0.09052354002925062, 0.8273021124720558], [0.5626920650464289, -0.20764658418154747, 0.8001628184385481], [0.5166588695585557, 0.04192476382552378, 0.8551642688306436], [0.2760611927210997, 0.3606548177994049, 0.8909087047904974], [0.39923433557755766, 0.24049665299252154, 0.8847447683910546], [0.2282932084654983, 0.49584453540415374, 0.8378665810726473], [0.24313554367403875, 0.5579119617722457, 0.7934855703248636], [0.20037924341846222, 0.5632103559512323, 0.8016497076381496], [0.1541748683639821, 0.4868893235644526, 0.8597493219327939], [0.1594629925834308, 0.5129004805611468, 0.843507350908385], [0.5858169964833527, 0.4481625367183903, 0.675254609249993], [0.13783521438599264, 0.6251927473427527, 0.7682027612194507], [0.10545968458397512, 0.5393100811088225, 0.8354776426343459], [0.22483972424580245, 0.6420101989999275, 0.7329870413459879], [0.14880789192749047, 0.6512711276452535, 0.744111637858041], [0.3326155001945291, 0.5854413902242743, 0.7393411307661789], [0.08689766176170102, -0.4977109414770718, 0.8629789192757582], [-0.1998395275241592, -0.4736674883855577, 0.8577314694503393], [-0.3908978384917244, -0.06794907209605468, 0.9179225476388425], [0.027001433894874798, -0.2302595015957062, 0.9727545859529616], [-0.013972348878866205, 0.7507945890477141, 0.6603879606136694], [-0.04058268765723307, 0.7234215731140843, 0.6892127922606044], [-0.2148550522174467, 0.6565949364192848, 0.722994049771638], [-0.10662997659071577, 0.6996495360746399, 0.7064846599628364], [-0.7101260929490348, -0.6354995549773749, -0.30308620512404927], [-0.5834001481153286, 0.5428797537852743, -0.6040909203994482], [-0.25189171156452606, 0.9269467198581164, -0.2780653595638481], [-0.44181255559093663, 0.7754133105895521, -0.45114949128061327], [0.3542602671949409, 0.03048862321698143, 0.9346497241968791], [0.08717506632457858, -0.4226706882151707, 0.9020809260454515], [0.17146160364678628, -0.6584550115865127, 0.7328287086294297], [0.4335043325905793, -0.24515875698599976, 0.8671627168520771], [-0.41372971868334785, 0.42713264206823287, 0.8039809860674622], [-0.11487366764090283, 0.49683189609978234, 0.8602105018544138], [-0.17381239181919345, 0.49333762148584515, 0.8522952796283576], [-0.48354797006298744, 0.36890086408360184, 0.7937842988660939], [-0.13131109308769834, -0.7042435276315323, -0.6977094313689685], [0.31137434295830974, -0.6357877245326812, -0.7062718937355758], [0.6087512319732511, -0.3750876881576037, -0.6990931009269321], [0.6194695613446511, -0.48549484550120103, -0.6168891452758998], [0.25131838865918293, -0.5276567900939978, -0.8114292201969624], [0.4240346406344229, -0.4906584882819994, 0.7612153909498012], [0.4494074749247747, -0.38598934140608504, 0.8056333842403968], [0.17200550069977474, -0.7446961028455341, 0.6448579860214908], [0.16692348428882525, -0.7884845252022461, 0.5919701883621059], [-0.6562927931902142, -0.02527717410564302, -0.7540827766736353], [-0.7822333500579928, -0.03329628308381305, -0.6220951242292871], [-0.7754533429700685, 0.5632683423240035, 0.28530840753842923], [-0.6969236903751106, 0.6177662055672103, 0.3642283419134601], [-0.7769973368204804, 0.4687868683274853, 0.42013570504967807], [-0.8132790882977817, 0.46232654482081925, 0.35331471875874637], [-0.8616364727237752, 0.4148952278189382, 0.29230897831781033], [-0.8410683278952216, 0.4787818382948464, 0.2517379969939852], [-0.8978268014219524, 0.35285739999533056, 0.26343631093105074], [-0.8976079918169445, 0.3720334318966528, 0.23641281390303456], [-0.6954064696483816, 0.714252666416942, -0.07907572628476575], [-0.6991189400048922, 0.7036348203166155, -0.12700687920124684], [-0.07069216689975082, 0.1279483369618918, 0.9892582274652582], [-0.10930510666429517, -0.0521635726556741, 0.992638582438192], [-0.2835629791597145, 0.01702550501656479, 0.9588024661154132], [-0.4772053208190531, 0.4836149581809261, 0.7337517659301719], [-0.08007602341641665, -0.8517777323621216, 0.5177475496087406], [-0.008517469771072416, -0.8053584892119999, 0.5927268819303407], [0.09869355743897609, -0.7782271116032601, 0.6201791229037678], [0.09956876743146323, 0.11686667581995179, 0.9881438360051505], [0.11372716961402671, 0.30967455970468244, 0.9440168419913352], [0.08468249220620067, 0.6644323625952211, 0.7425351917922003], [0.0967118441418424, 0.7615387451732513, 0.6408631357806702], [-0.17117374521785336, -0.1727863289205363, -0.9699713570442469], [-0.16816412077188447, -0.20128142044185596, -0.9649904757405267], [0.17689345127051098, -0.69596772431747, -0.6959437000260651], [0.2041233065139226, -0.7172438291530119, -0.6662544298387428], [0.13974903048662501, -0.7533072508866777, -0.6426495111953359], [0.1586234685700336, -0.725222950982079, -0.6699927362200702], [0.15634198529208176, -0.71265725577308, -0.6838690075072225], [0.08899068838286033, -0.7851206474007116, -0.6129161658874991], [-0.10823558372807521, -0.866407685175413, -0.48746567210832925], [-0.09796237888798395, -0.788578231878985, -0.6070813327135177], [0.11626806988304822, 0.7454524117508867, 0.6563401844626435], [0.13887189090661206, 0.7205626509273277, 0.6793409041156024], [0.03762576293982138, 0.6838532602116986, 0.7286487634388926], [0.3059720256660049, -0.06732918106262749, 0.9496567279218726], [0.0476376945928276, 0.02165543477136644, 0.9986299075226737], [0.11017509561937903, 0.2732144115869721, 0.9556230080980916], [0.3418982038075785, 0.1794576251867694, 0.9224427239647329], [-0.5980070690791588, -0.4227481673535546, -0.6809343083811865], [-0.4312029895811328, -0.6738842155132723, -0.5999533697366449], [-0.3217067832717125, 0.9246914429715152, -0.2035939117268112], [0.40224413464047876, 0.04314852916779396, -0.9145150958721175], [0.4484377058117821, 0.13364411198047163, -0.8837663013145596], [0.22835299907009546, -0.14354141028556422, -0.9629386124509309], [0.20099911246335786, -0.1980519902067994, -0.9593616450348993], [-0.06398907418561064, -0.31797273888400895, -0.9459380189586791], [-0.16265959368273689, -0.2934796592991394, -0.9420252364775734], [-0.39927276600963557, -0.24560899010219311, 0.8833218452546023], [-0.32460098226979467, -0.5739135057986777, 0.7518360793227173], [-0.2341383231789465, -0.5956153426061757, 0.7683889700347599], [-0.04688367907140045, -0.3035308406509922, 0.9516674573665067], [-0.1032939608374918, -0.24873329618723644, 0.9630483399198273], [-0.5192164758399231, -0.7419349329038147, -0.4242013750017586], [-0.480873484808326, -0.7270515486490834, -0.49005789169777325], [-0.5119564214889446, -0.8129703073622516, -0.27745252178266555], [-0.5587691650839568, -0.8002677146371361, -0.21759734617139295], [-0.05804222404831042, 0.3453311201594195, -0.9366843212507435], [0.09605143059612208, 0.3664905202933982, -0.9254506044168498], [0.04085400846811364, -0.08584569058373383, -0.99547047540361], [0.06760414753095928, -0.12824731451620996, -0.9894353468296917], [-0.19068939553991382, -0.08197730667692449, -0.978221485972691], [-0.19354565962244627, -0.07243515296691748, -0.9784136273866855], [-0.2893783058012385, -0.22664700043217353, -0.9299953404865549], [-0.4815470650862971, -0.17811516745969458, -0.8581301831468107], [0.2566365693193769, 0.2580494403215888, 0.9314226525255307], [0.048456592439849816, 0.21544755139152014, 0.9753124172533213], [0.04009934008814299, -0.041024080408870296, 0.9983531778639773], [0.2550655490420735, -0.031133482889275987, 0.9664224086469895], [-0.15783987427195018, -0.6111258867518289, -0.7756363352961271], [0.05359070271363024, -0.4103187438059981, -0.9103661708697919], [0.19576442527919444, -0.343366864341265, -0.9185725264058108], [0.0671196637306531, -0.4719740976873169, -0.8790536967972589], [-0.7523034517210911, 0.35374007336012553, -0.5557944557367452], [-0.7509079791687423, -0.0973906640357283, -0.6531862409599544], [-0.8950856056932593, 0.08529892434983267, -0.4376595160458555], [-0.8809383989126109, 0.1200598021103353, -0.45774794509480077], [-0.7542334663901205, 0.10211702948032397, -0.6486169828699043], [-0.7661864243564095, 0.03971172221522177, -0.6413901638243615], [-0.9435964755190336, 0.12829964061071883, -0.3052292476274483], [-0.9215686669217379, 0.1413967311286403, -0.3615496599005813], [-0.9251207927795537, 0.18758761666966656, -0.3300945392446295], [0.15113140585270404, 0.7063356248638721, -0.6915556978386836], [-0.6623130002656402, 0.5745219451885699, -0.4809012623978733], [-0.4525798405796465, 0.5202940285989603, -0.7241999804647651], [0.3033127438299181, -0.32177534326283386, 0.8969180608608861], [-0.590282212692126, -0.08414605708418507, 0.8027990722817714], [-0.23121803359518467, -0.484711799513024, 0.8435595369345438], [0.0391041505732363, 0.8038295407487578, 0.5935730240059657], [0.09686168270478705, 0.7701142837302106, 0.6305091628345317], [-0.9312438007693961, 0.2686805241258502, 0.24616205939183217], [-0.9587574146299052, -0.0487598420608443, 0.2800119599131108], [0.8430432813094831, 0.3616790706029277, -0.3980782281496211], [0.8605356392330356, 0.3881599863343296, -0.32986396987049676], [-0.8062870384434483, 0.5790442072625621, -0.1208677693753147], [-0.7956898197703195, 0.5909621250721714, -0.13282122362054916], [-0.8175183632364768, 0.5645239414067703, 0.11391420170337627], [-0.8079588190940967, 0.5793979937910493, 0.10724043751766373], [-0.7760154731054093, 0.4999122766079097, -0.3845617001180494], [-0.7490861449874036, 0.49361005509599754, -0.44183601131645783], [-0.4972038325611783, 0.10732124417256435, 0.8609706728081559], [-0.3650112431116432, 0.13305962788201403, 0.9214455642250348], [-0.31233825037314616, 0.01714316426184275, 0.9498162607962306], [-0.42121700021270375, 0.022328981557127998, 0.9066849812996972], [-0.29295325752154944, -0.023601691133835173, 0.9558354194541736], [-0.31442701161189307, -0.05669290519438078, 0.9475872354930892], [-0.20943027478482074, -0.10046094282494758, 0.9726492476583103], [-0.21908896414145754, -0.06702365269130062, 0.973400151926914], [-0.31433795360711664, -0.27825139091638007, 0.907616556908913], [-0.30300761197158466, -0.1851879261409495, 0.9348218114158932], [-0.2714352540914285, -0.07358194174098712, 0.9596398286263172], [-0.16067949989250963, 0.004782079828857859, 0.9869950506597304], [-0.02782951585048501, -0.7572238965485709, -0.6525622487880577], [-0.11166765995816873, -0.8593460751078358, -0.49905376154901837], [-0.0034748049969004955, -0.840137099279586, -0.5423629597827607], [0.01704123345356253, -0.8035293598222513, -0.5950211460662755], [-0.026114523947836105, -0.7362060183963969, -0.6762534510935246], [-0.04969947727126449, -0.7524763628746594, -0.656741414313036], [-0.7368645976023278, 0.42814410022141003, 0.5231856212148408], [-0.5316740650789059, 0.5711252990298821, 0.6254107301050239], [-0.3071166582914909, 0.478325666424151, 0.8227295515780135], [-0.4425598239815366, 0.152221945958048, 0.8837246637760974], [-0.4709528925792353, 0.12946446925803248, 0.8726066262474674], [-0.735168176518128, -0.6300053565378823, 0.2502418889166768], [-0.8561477145727386, -0.3051002058562229, 0.41704310954428536], [-0.6571940653298576, -0.14058529221457008, 0.7404942512323499], [-0.648461732514335, -0.1208579090019303, 0.7515921415875689], [0.041714331786579975, -0.04578910933634526, 0.998079792396271], [0.11854899184231799, -0.029969340566109552, 0.9924958313057051], [0.03899538217074609, -0.2659038307646357, 0.9632105236935743], [-0.7571946310235179, 0.5257552978496836, 0.3876050277436416], [-0.5574503663170736, 0.6297979801806303, 0.5409284548379376], [-0.6482216942884812, -0.5223075322945151, -0.5540789445216132], [-0.37897009332438136, -0.7711459380010522, -0.5115814799913961], [-0.9935912089110459, 0.05369850432048174, 0.0994634616752782], [-0.9463257437817505, 0.08682345564750328, 0.31133466592293063], [-0.009935031548209277, 0.0018076907365017392, 0.9999490124013011], [-0.007833443156576199, 0.09444938941838399, 0.9954988448043559], [-0.10008981796319144, 0.0626826971799043, 0.9930019676789908], [-0.13963528702432698, -0.0023825748429418627, 0.9902001363132361], [-0.03700487192991521, 0.0588220512787901, 0.9975823804262013], [-0.04472553937651419, -0.08618394494842122, 0.9952748131850858], [-0.23262296638206423, 0.8901837601531848, 0.3917389802804234], [-0.3169615688214403, -0.14783263766181412, 0.936846238788523], [-0.3172914102744677, -0.040530313989403696, 0.9474615847695144], [-0.08784718312251374, -0.1134252658245223, 0.9896552841722596], [-0.09375094995546968, -0.1682518771002548, 0.9812757335401135], [0.08688433881250976, -0.0330906170286508, 0.9956686812056389], [0.05407351034077369, 0.06512869365628336, 0.9964107128800112], [0.13818953800697417, -0.7979075227427636, 0.5867258616559567], [0.0888838457797183, -0.7867259977040365, 0.610869762302895], [0.03229433768152197, 0.6426467091453635, 0.76548173262224], [-0.2598889271047606, 0.5097463192111793, 0.8201319623200837], [-0.2695923409110341, 0.49771354429852, 0.8243792801519904], [-0.010610940504713133, 0.6840401612772704, 0.7293671679623175], [-0.6493404093116325, -0.08461578863351392, 0.755775893469043], [-0.517475746388518, -0.11334900002730816, 0.8481573297994044], [-0.683283335364096, 0.7292559632452569, -0.03618872317378611], [-0.7668035501006203, 0.6417630168972188, -0.012350939076257004], [0.045185363074153516, 0.31807861768643164, 0.9469869460211928], [-0.12012350468636353, 0.16698904946345122, 0.9786138160587956], [-0.12686792742605968, -0.010702234165884394, 0.9918618810976025], [-0.2604605608849231, 0.1378645200938764, 0.9555907441592328], [-0.26436279924661893, 0.0343598368756268, 0.9638110354132557], [0.07146917410226954, 0.7750765667583421, 0.6278124503506128], [0.03745536567711564, 0.7604359103141448, 0.6483319534672739], [-0.5391042936567461, -0.6079884393276693, -0.5828521409455112], [-0.46526439832843863, -0.6502178773876386, -0.6006211381341733], [-0.429194255644899, -0.5767560862793908, -0.695086115428226], [-0.5241250707675433, -0.5589782964080167, -0.6425232870003306], [0.4396371307260418, 0.4206587386796547, 0.7935776073323989], [0.3409715263324789, 0.44583408090270626, 0.8276293799377464], [0.09957356401920181, 0.9301433427646686, 0.3534380670769382], [0.12659418060520808, 0.8730526809680679, 0.47090649782240723], [0.046185608138038355, 0.88169835437341, 0.46954754977120255], [0.009792402229963979, 0.9229040134855809, 0.38490556082079824], [0.39562363185355665, -0.4840940013952297, 0.7804709730234408], [0.34279419174443504, -0.540994306107878, 0.767995639873779], [0.4181451370837859, -0.4902410612097868, 0.7647341670391642], [0.44227588935602963, -0.48208526480993386, 0.7562974515013714], [0.03223149060533449, 0.5003593179172111, 0.8652177090113108], [-0.05386784774043216, 0.5137138691681095, 0.8562688337222978], [-0.1896003492404723, 0.5135511481375652, 0.8368494045014787], [-0.17944803051066913, 0.5481159897380661, 0.8169254960761735], [-0.11230579852417126, 0.5495028588145799, 0.8279094248602634], [0.1448347338897243, 0.476183707437687, 0.8673361382013274], [-0.0030073263634771983, 0.5399163667299739, 0.841713296155673], [-0.795190335255911, -0.4183237430618499, 0.4389505401594983], [-0.7984553205530948, -0.5830995848852495, 0.14987986918564006], [-0.7523490211082529, -0.6546931277772556, 0.07312905632296693], [-0.7875531371084239, -0.4557386656331245, 0.4148039595732175], [0.725606736776898, 0.543370164857853, -0.42218920815948274], [0.6909504787668169, 0.513108725067113, -0.5092218300032985], [0.7320489057251078, 0.5824074504169153, -0.3534203748025017], [0.7367004356035297, 0.6000684856641156, -0.31175355762901064], [0.6706544692103142, 0.42437703116036635, -0.6083804059564584], [0.5935942218059553, 0.3653961397806647, -0.7170296792127723], [0.5676462122290877, 0.2678640353695098, -0.7784771263804294], [-0.044644771322606545, -0.4525680024706801, -0.8906116143040415], [0.006814690634130888, -0.39113310457089356, -0.9203088908080241], [-0.24142141870593212, -0.6096899925477846, -0.7549793451327642], [-0.3145090159618198, -0.6477742595470848, -0.693882257697193], [-0.7076371604511494, -0.6959265293240617, -0.12221258090556716], [-0.5195497805927421, -0.7249132717233335, -0.4522927967206708], [-0.5113931366148748, -0.729997607101716, -0.45340991767821864], [-0.673974748552135, -0.7236523148383804, -0.14861145831711584], [0.6001644970512237, 0.7845401168005462, 0.1558825891812074], [0.6044737083565123, 0.7644005478769644, 0.2242840571933787], [0.7221410610411748, 0.6737517020243176, -0.15675117855270312], [0.7215872281544633, 0.6641157138964132, -0.1956072358585337], [-0.5820958574435948, 0.2326098451200522, 0.7791386736006829], [-0.5774976008400837, 0.20345709905693146, 0.7906337520415413], [-0.48273549064964993, 0.8389820767127838, -0.25114840437865876], [0.1471927677544546, 0.9406519808279318, -0.30579100720144065], [0.02462336400608137, 0.981988077449356, 0.18733153950240614], [-0.42053593752712937, 0.8933596429574282, 0.15829742127765303], [-0.2278296244604081, 0.42248859696999264, 0.8772668052813559], [-0.4804994281687805, 0.18653999367330815, 0.8569265606163909], [-0.5298317204070837, 0.24605818112796923, 0.8116241245493294], [-0.21513974819174086, 0.4892497400404185, 0.8451920377159129], [0.5673341179742021, 0.7719880977665118, 0.28664677826425494], [0.5402462481528053, 0.7822924668241434, 0.31008464603558494], [0.7373170343610491, 0.6704934749693245, -0.08247478926670748], [0.7129914743284622, 0.6930364592020305, -0.1065064493429301], [0.450983790353366, -0.0580056449209893, -0.8906452526094839], [0.3268776620222711, -0.10886954662694379, -0.9387749548683634], [0.16246487131641354, 0.7558877383017661, 0.6342230622369246], [0.22920547359794657, 0.7091826050066758, 0.6667269933253686], [-0.7945167166233333, 0.6070434275376991, -0.015539114819075772], [-0.8439891192410254, 0.5219306399534815, 0.12357497190170584], [-0.8927245405771217, 0.4308361597254516, 0.13199658376030954], [-0.6935710928655365, 0.6273961540243782, 0.35402430009354485], [-0.7323958006224405, 0.4948010730185809, 0.467726725097332], [-0.9417044482760863, 0.27291179924875947, 0.19675335302819258], [-0.9215431779147115, 0.3367503249624201, 0.1932805988105347], [-0.8049936288901048, 0.45769824719603613, 0.3774885057323157], [-0.7849015864511912, 0.5532259106532196, 0.27905302608701305], [-0.5921901860358786, 0.20941066589686835, 0.7781117892510189], [-0.23106126703856536, 0.1155710801114935, 0.9660507317508722], [0.27355253142851466, 0.7222909125400173, 0.6351888303576825], [0.04379021333868779, 0.6096730657210536, 0.7914424616799659], [0.19540688748358345, -0.41523991645856917, -0.8884773267244689], [0.39154313676384955, -0.23266510421054734, -0.8902589069118154], [0.6238643403918201, -0.030200024487005254, -0.7809489377087747], [0.38242498119268903, -0.24394631481861628, -0.8912021820250374], [-0.5251962180254328, -0.12043441544885963, -0.8424158617614422], [-0.5900631882142073, -0.021535436488979705, -0.8070697980284692], [-0.583907085013486, -0.11782434348684948, -0.8032247133604309], [-0.4799491646962423, -0.17007575418301865, -0.8606526809035435], [-0.7708267766927107, -0.6062625700458705, -0.1956317369316696], [-0.7359677525359513, -0.6466882626777474, -0.20036406399855636], [-0.82044700339219, -0.5712419043987494, 0.023439310648262813], [-0.8405267368745348, -0.5407451206670277, 0.033309444214040265], [-0.8660032438285225, -0.4364153291604542, 0.2440902336273398], [-0.8201747428596817, -0.16102882101989593, 0.548983706475882], [-0.8218702221519312, -0.12674684982324544, 0.5553958714284966], [-0.8756559345656362, -0.40457605224675464, 0.2637136746708702], [-0.9474523866812399, -0.17662498623585485, -0.2667163084800144], [-0.9611929728440608, 0.05799035527579984, -0.2697131580961209], [-0.7470977070220671, 0.4551528462340138, 0.48443875023313904], [-0.7801115097348641, 0.4770323101127193, 0.404803912391807], [-0.14453772546775018, -0.8810254031336933, 0.4504476495107088], [-0.3956967691233743, 0.4794332767065781, 0.7833056875139593], [-0.5600680998051862, 0.2807518739290105, 0.7794242162429628], [0.448519271903052, 0.4566531669728017, 0.7683087581339072], [-0.8148164197340027, -0.5019685382800213, -0.2900030839644308], [0.416947449150771, 0.5564914626496437, 0.7186599172381367], [0.4235859350138658, 0.511181786627475, 0.7478423207326337], [-0.11859477708761347, 0.9894760748226075, -0.08289979614682402], [-0.024400213858011808, 0.9964923497445586, -0.08004765121008718], [-0.27509486904725217, 0.883919361482408, -0.3781658041394109], [-0.3567991616710359, 0.8550170797282935, -0.37635110150462797], [-0.47546648935850405, 0.6756631769799595, -0.5633923045005564], [-0.5238201116874698, 0.6454934927899482, -0.5558332855790121], [-0.2084170574092481, -0.9268059847414504, 0.3123987785320242], [0.5525668013044776, -0.24763772813194562, -0.7958300608181287], [0.12081321248460598, -0.2639403043363849, -0.9569428841033125], [0.47318329226386624, -0.13855742175453242, -0.869999662528133], [0.16295483592496632, -0.38747143076919555, -0.9073652030942887], [-0.2090761509889931, -0.5959741491345643, -0.7753076658017513], [-0.3011812823592903, -0.44559658613626607, -0.8430501275607037], [-0.9945327334473003, -0.049265274493860305, 0.09207374669733852], [0.4108622800661074, -0.12286829476601824, -0.9033800800107173], [0.05646609310962104, -0.24148205359070932, -0.9687610634839477], [-0.3521937342670207, -0.3404238152912423, -0.871820623480315], [-0.368011818005411, -0.3043357631432977, -0.8786051701875756], [0.15778155210125747, 0.4982865597578886, 0.8525347419203316], [-0.008083299237168315, 0.9709774690385911, 0.23903433831325238], [-0.09468347361808453, -0.9667829277206791, -0.2374148489278744], [-0.26130119982045785, -0.9125353383016183, -0.314644147129961], [-0.4262270120983454, -0.4383419258566639, 0.7913197142710321], [-0.12958118032517155, -0.7722619268981138, 0.621948739020466], [-0.7636797407716759, 0.07923381368433274, 0.6407146449894385], [-0.7046482149295545, 0.0864166590281895, 0.7042748428270018], [-0.7972825035016907, 0.11917086549426459, 0.5917253707822779], [-0.7782539760649732, 0.10810247082915635, 0.6185746555911353], [-0.8667690995828903, 0.09211891624382733, 0.49012797642894074], [-0.8664273867332749, 0.1234569139809639, 0.4837995183015844], [-0.9876421575247797, 0.14739474558814777, 0.05327060777580225], [-0.9929213447587526, 0.10520240273639286, 0.05513308970990456], [-0.9721239530827496, 0.10004639819836157, -0.21205126278874842], [-0.9711935500257364, 0.12717560439700606, -0.20151787522367307], [-0.9015298266299622, -0.052281506967695464, -0.4295469889613209], [-0.9862808511647297, -0.016652189601124273, -0.1642339404851031], [-0.3503287272103603, -0.06951494463747197, -0.9340436046369668], [-0.3464312910481017, -0.11701168409887416, -0.9307489599065317], [-0.4814353770135503, -0.0579097321700579, -0.8745664301125518], [-0.4917272510690082, -0.014294996130639007, -0.8706319335067728], [0.03986918340101077, -0.7145131588255822, 0.6984850707638817], [-0.16648963666158473, 0.5931511443832987, 0.7876883398915313], [0.292574787523157, -0.556125034401006, 0.7778977695161876], [0.1400609789906721, -0.8270247974944117, 0.5444381567207629], [-0.0321245462521019, -0.9951509521074507, 0.09296556377353354], [0.8624897496296854, 0.3866932664217589, -0.3264655410419195], [-0.636504153714853, 0.04163018666408783, -0.7701489400512422], [-0.5659005755323099, -0.034601948835558546, -0.8237470751079979], [-0.7948738929605986, -0.12455060527351786, 0.5938540570002558], [-0.8631552001921716, -0.42255264684296123, 0.2764278586308187], [0.5602075542737952, 0.7612872223603936, 0.32651073673827224], [-0.31277104548238277, 0.4652179876211787, 0.8280981204552742], [-0.2564216277246274, 0.6717432611167912, 0.6949884459321832], [-0.09171143642870334, 0.6836103805502836, 0.7240620553737644], [-0.19476288942273706, -0.912923127452466, 0.35866248795506234], [-0.02873017133840289, -0.9611103624015209, 0.2746660673240929], [-0.32174266920117967, -0.9427193405456592, 0.08810164457294649], [0.1760981586920508, 0.7693291478489486, 0.6141026793422091], [0.053696138731883974, 0.8244997685581859, 0.563308846311492], [-0.6020472961903708, -0.013211650222540996, 0.798351116644964], [0.4497622560424785, 0.6908588720180505, 0.5660635405972787], [0.4202843572507956, 0.6208592554432911, 0.6617362344474479], [0.49038735903438935, 0.7473730549764095, 0.44827865752733065], [0.5027099191149759, 0.7939508099585303, 0.34194275630521564], [0.40581206571951217, 0.8955335921909139, 0.1825819064806263], [0.29510887963023597, 0.9544611859565194, -0.04375607004589744], [0.5512200015002496, 0.8236097697295042, -0.13350452109264968], [0.9350468033936779, 0.3544496871527669, -0.0072728770490457185], [0.8997441205773381, 0.30662555932935814, 0.3105499699766056], [0.9898184050111211, 0.13750529505800857, 0.036767090342450244], [0.991379649832319, 0.1302584644354882, 0.014111071584309754], [0.9806349593986352, 0.19357417910582425, -0.029734047634710374], [0.8884732417691489, 0.40924088826055244, -0.20769495428616813], [0.9355900856477314, 0.3281635020707031, -0.1303069742813577], [0.8970371431452885, 0.3708945705451558, -0.24033639207965088], [0.9403006945738721, 0.31709332640763893, -0.1236382874826086], [0.07290666327340016, 0.7241562567608368, 0.6857713425366154], [0.13949997492363894, 0.7498148080689009, 0.6467746984823243], [-0.08625977417368175, -0.1277728701442358, 0.9880452140537951], [-0.7783197612267841, 0.6163443421448653, 0.11974139296790876], [-0.8108614312093977, 0.5769625304664829, 0.09807128945190888], [0.5621826253998983, 0.7589639349240077, 0.32851855531026547], [0.01656629827201881, 0.999682107511071, 0.019006359035493733], [0.043403015367922355, 0.9788941681659836, -0.19970574800841123], [-0.5938431767408622, -0.7621359135183225, -0.2578742537825617], [-0.7096562048934569, -0.7017845643861956, -0.062341768065186556], [0.8114080347003837, 0.5742890826344851, -0.10866945656670121], [-0.6741869652302166, 0.7147419777449634, -0.18605332881431888], [0.006800926657468825, 0.9649881920446499, -0.2622051422283658], [0.14595495800453342, -0.40961794452052436, 0.9005055745305943], [0.19385435571604911, -0.4630320124353977, 0.8648825609468267], [-0.21187794982399594, -0.17244290376896063, 0.9619621506681588], [-0.286346651091497, -0.1214471203683848, 0.9503979126465459], [0.46823095915468294, -0.5479028503423032, 0.693225962782602], [0.4995398983542722, -0.5910003674975587, 0.6333864977799527], [0.7552746405418556, 0.0011704429577669418, -0.6554073904203809], [0.7064411280509225, 0.049434117110543664, -0.7060433419158069], [0.8683214494101883, -0.22433577382044023, -0.4423701177504806], [0.8927644175729988, -0.2589406301194188, -0.3686752565455165], [0.754134760090108, -0.618512772625372, 0.22073222176000956], [0.7336784835324779, -0.5966060433599619, 0.3252339340042101], [0.8547254783569536, -0.5183586027076228, 0.02736266884786622], [0.8566650373461792, -0.5121832897867401, -0.06158970248265422], [0.027479797029507796, 0.549554168696382, -0.835006033764814], [0.0933558205229364, 0.4834191741076958, -0.8703968019699536], [-0.30001296595538357, 0.6382799729512254, -0.7089364544076127], [-0.3565383415921703, 0.685650021455404, -0.6346372657297308], [0.8219957573889479, -0.46164409773916454, -0.3334781879781084], [0.8489776112642814, -0.4843641744399491, -0.21125425934428224], [0.8061787569528568, -0.33518536771362006, -0.4875721291343794], [0.7568328110213182, -0.23578904486873414, -0.6095962782706762], [-0.046722815977216024, -0.34427777779536967, 0.937704532453289], [0.060163828069130426, -0.38134786336545917, 0.9224717453118373], [-0.37759646402522185, -0.09528580106966772, 0.9210545730140863], [-0.5084745456605784, -0.07294314652928373, 0.8579818959568295], [0.8029180132292582, -0.567611734773611, 0.18204280425018957], [0.7597501170233893, -0.632099058408059, 0.1524156817476193], [0.7872459223819551, -0.6091753438021585, -0.09565175480097991], [0.8597223870895835, -0.5028980528205218, -0.0892802643718958], [-0.6419205659521313, -0.037410011177753784, 0.7658580012452543], [-0.220242684006799, -0.284436318161763, 0.9330536646153111], [0.8578819887800205, -0.5043699959418972, 0.09823136220376555], [0.8359765634275557, -0.5253529395382995, 0.15857955201829105], [0.8969055530068397, -0.4306473145431785, -0.1005152697964043], [0.902831880251723, -0.4077003398480614, -0.13665660938613255], [-0.06560880351961118, 0.6472333492546103, -0.7594632818730507], [-0.01722390404657371, 0.6062456424108332, -0.7950909119008157], [-0.3926188275550683, 0.7311971711963986, -0.5578540607396063], [-0.42675529016078656, 0.7646450633625137, -0.48290563197701497], [0.8831484219021544, -0.37382397465964, -0.28338048779230224], [0.8941657077906232, -0.39946536820821077, -0.2022253856803649], [0.8384956996728389, -0.17875670133941832, -0.5147533422488936], [-0.6259315929666, 0.2904295701984385, 0.7237819462245829], [-0.6581927389241925, 0.3097244706432207, 0.6861873437423972], [-0.5172663497843006, 0.11906211220383536, 0.8475020571174956], [-0.4818992534064488, 0.09382474425311932, 0.8711888583608861], [0.8051982320218675, -0.2201711309397432, -0.5506182709006061], [0.7952232539833731, -0.07451402607857818, -0.6017205632531238], [0.8964784968373919, -0.3097460731429333, -0.3168338284980041], [0.8647522650634581, -0.40798001799248373, -0.2928409551044239], [0.35132755544009037, -0.5112557011660963, 0.7843382923290521], [0.4168298637120582, -0.5272163608600207, 0.7404699680333453], [-0.7135768045377713, 0.3188093537542645, 0.6238339041639623], [-0.7820815878271845, 0.31008538806541486, 0.5405510541013039], [-0.6440574270146479, 0.1339618595315094, 0.753156192896355], [-0.5703640905371257, 0.13671900191838587, 0.8099337742928109], [-0.8449664558246476, 0.5200965548227368, 0.12462448472372555], [-0.829407047485455, 0.5214054290808784, 0.2005500638405414], [-0.7449169950557659, 0.6514971368285858, -0.14370160465785725], [-0.7170660055094381, 0.6528116267228649, -0.24424029920999019], [0.6693825108493594, -0.0834538008925028, -0.7382157660776434], [0.8065009480457304, -0.3643065647190654, -0.46565754337703125], [0.18164944992483475, 0.41027764725892946, -0.8936865946749355], [0.3127415755367479, 0.27490830979132425, -0.9091854201088301], [-0.10194272139213899, 0.5123576719394427, -0.8527000044329537], [-0.21921036723081933, 0.5880598458082088, -0.7785450742548918], [0.436234017258128, -0.7437903568858055, 0.5064343858690104], [0.547239576035926, -0.6329933141792724, 0.5475840671754072], [0.14391314822956847, -0.456539179963547, 0.8779868922283899], [0.011928674028955357, -0.375680941117927, 0.9266722922461098], [-0.4086527542524888, -0.19306827468566498, 0.8920356314361864], [-0.5507590519550744, -0.03151035363684444, 0.8340692802778609], [-0.9216690909658432, -0.24306879954992533, 0.3023965036893688], [-0.894378843968821, 0.0010668685614661415, 0.44730900421573], [-0.930401200022987, -0.2060785961169008, 0.30312574819416643], [-0.9135208011233619, -0.37770890559070197, 0.1510487621677354], [-0.8533991139976296, 0.510605293939862, -0.10484362655234618], [-0.84606485892129, 0.5321732118965237, 0.031079366760524984], [-0.6529695101179255, 0.651131081725328, -0.3868580272755897], [-0.5721465043464532, 0.6211419544649923, -0.535566102332423], [-0.09989001289432403, 0.37128715353079045, -0.9231293706447514], [-0.2649944842406145, 0.5550831652876904, -0.7884545661839049], [0.060378410746572124, 0.39339475443546096, -0.917384878171851], [0.23697342306880181, 0.24223929196095856, -0.9408313994490768], [0.5249363829208467, -0.03838986701210332, -0.8502752566062188], [0.4498116618350901, -0.14581859442839368, -0.8811392661753771], [0.6900451624788967, 0.11208524927982198, -0.715034663938297], [0.6916347746290701, 0.2138725214461503, -0.6898549725080347], [0.5557626676231767, 0.8094868887694627, -0.18936428962902696], [0.14839208031925302, 0.9887204134411217, 0.020291243021111172], [0.40134705408269655, 0.9153935268449197, 0.031228723790131793], [0.621898058784299, 0.744582434670991, -0.24256917046430254], [-0.38794586126709163, 0.33208986060900697, 0.8597757458816949], [-0.2709919092721882, 0.5210803381238377, 0.8093445905977016], [-0.5380249367327669, -0.04689083840878966, 0.8416236788060463], [-0.6300412824757151, -0.27372080265645926, 0.7267220270292211], [-0.8783119045112465, 0.3532192133125883, -0.3221868801498024], [-0.4325699459519047, 0.44737112301929893, -0.782778589479565], [0.5289353708117147, 0.8370721147170785, -0.1397771378564888], [0.9323855799467172, -0.02247823339415508, -0.3607656570835167], [0.848650156230493, 0.5242397359413858, 0.07046709579701771], [-0.2575613104572083, 0.9647020047427157, 0.05488363509235591], [-0.6941553907066373, 0.6921794323018999, -0.197575117489868], [-0.6191172744497635, -0.5114550954530862, -0.5959089576545823], [-0.2989657758787036, -0.7542459955331852, -0.5845788595864541], [-0.7419096687135931, 0.20730876746355104, -0.6376465466087224], [-0.17847983696611644, 0.4520214200592157, 0.8739688687843512], [0.21008446899061808, -0.8181006304959582, 0.5353278194443528], [-0.1641953596431455, -0.03040866220499202, 0.9859590240646721], [-0.40218130738318025, 0.13143171826879171, 0.9060772038984696], [-0.9128029131925316, -0.10554086759864799, -0.39452752367072236], [-0.7434229376192156, -0.35678704180767534, -0.5657078244286038], [-0.88781496082631, -0.39385321859006683, -0.23804251204190982], [-0.9881388575303764, -0.14912006258770769, -0.036671585354337156], [0.44170110047061584, 0.09065112683847058, -0.8925707316767463], [0.05391721986854629, 0.1303233907893501, -0.9900044177754022], [0.6193617881065501, -0.7758946298998025, -0.11991037789159589], [-0.3973003637840081, -0.39994747576188505, -0.82595062659265], [0.7844814331850576, -0.6142409933310001, -0.08542179522618572], [-0.6849421046393399, 0.09801913493202864, 0.7219740732736933], [0.33320114562340636, -0.20614006237425225, -0.9200452549954209], [0.3794313112805693, -0.08594833486146856, -0.9212191724852716], [0.19797266755367643, -0.27435985393644025, -0.9410278919615808], [0.12293823600544722, -0.3515167883737268, -0.9280744246122127], [0.5548713245405842, 0.1354014055253095, -0.8208436346737108], [0.6663356187062349, 0.33239569843611183, -0.667465312135806], [0.5401043488622955, 0.8360162724107898, 0.096768200378037], [0.6859157657239442, 0.689051325716087, -0.233939806061813], [0.32501277145813634, 0.8452554257790048, 0.4241579465013644], [0.18947089236325712, 0.9396150493454276, 0.28499884208652665], [0.003756832598087887, 0.8302299618661072, 0.557408375097318], [0.10851502509434507, 0.7336146840035969, 0.6708457235036059], [-0.4206739024172637, 0.20782855824320792, 0.8830859291165157], [-0.654402562158979, -0.14368404318752268, 0.742369303226534], [-0.7736260451670443, -0.48236621841362476, 0.41088389305561474], [-0.790832738327703, -0.41966012754088877, 0.44549854920243215], [0.7624797083780228, 0.43717732087684774, -0.47697031817787877], [0.8262515783746818, 0.2266836104525624, -0.515677098566087], [-0.7945124986214723, 0.5301286386152272, 0.296164677256135], [-0.7498870077785221, 0.5272011700509599, 0.39966035813159373], [-0.7367154793126919, 0.6731593538422255, 0.06408421705683916], [-0.747576705909494, 0.6625821118583142, -0.045978406093363976], [-0.6328249269764429, 0.7351489202447075, -0.24308162592080124], [-0.646350601127087, 0.7498367057909319, -0.14133582373643672], [0.6684437023289218, -0.5677792200983758, 0.4804266583374448], [0.7074651666766669, -0.5731538899900408, 0.41350653722576164], [0.5329346912094928, -0.6447456103344582, 0.5479814895230402], [0.5222679063374948, -0.8526549793958625, 0.014687413703271627], [0.7270078793822139, -0.678006445263293, 0.10847489800691026], [-0.8747412018850889, -0.4811883085288822, -0.0573205151733975], [-0.8160811820033325, -0.5590805947471623, -0.14642538358222976], [-0.8565640445410118, -0.5106633696468041, 0.07430316615403909], [-0.9715064786131248, 0.10663770186774299, 0.2116685204585054], [-0.8855581956373357, -0.042524591549825706, 0.4625779299243174], [-0.818496784215507, 0.04871137838723468, 0.5724423253433393], [-0.9043192028033145, 0.21718857596393354, 0.3674723144836035], [-0.5565499867700381, -0.45767005637725283, -0.6933903891185056], [-0.40157967207726375, -0.5016941088741279, -0.7661832601246991], [-0.6661976941731216, -0.5753829939454771, -0.47446289903084665], [-0.7844516644725449, -0.49925648920771293, -0.367938234069582], [-0.28875691666072567, 0.6716704129882336, 0.6822597008447783], [-0.43896597166355933, 0.8210223593407074, 0.36500843988062215], [-0.7700696674569434, -0.6371628854411995, -0.031877338016174504], [-0.8087717467199218, -0.5538643462578782, 0.19779420530425007], [-0.8143626317514012, -0.5445818654823009, 0.20060931133611076], [-0.8201374445409308, -0.570220468299767, 0.04715071148843597], [-0.851911457828093, -0.46908695114206267, 0.2328181700156964], [-0.6226679895023415, -0.7037096137017296, -0.34216568272238335], [-0.7333430934868262, -0.6364983595844345, -0.2389094922381614], [-0.19482235536275988, 0.5039048779591383, 0.8415011133800671], [-0.21522236490820848, -0.5304009393227397, -0.8199720587976601], [-0.07567168848582173, -0.5083414382169914, -0.857824444599934], [-0.37756019191230783, -0.6733501728925717, -0.6356475801485324], [-0.5283609005743876, -0.6383741325924924, -0.5597438928483321], [-0.6157001239789446, 0.7093541209186022, -0.34311818440314323], [-0.5755174499562326, 0.6855401496075477, -0.44588604830375256], [0.6240622556661101, -0.06398212299990587, -0.7787506590619052], [0.4778915025272655, 0.1028591554967746, -0.8723758971582852], [0.7636598187339223, -0.06384139421177555, -0.6424546346913295], [0.44084435989022797, 0.297782360296363, -0.8467478469115243], [0.38038724466572904, 0.36368270217988896, -0.8503178442386993], [0.5686826881054137, 0.10734316728479316, -0.8155228045165074], [0.4979909575026405, 0.23434250542028845, -0.8349183172017162], [-0.8327470118259227, 0.29078808233241077, 0.4711419164842329], [-0.02406495901106377, -0.17197269641305066, -0.9848077322179292], [-0.19330050718027766, 0.06231336414224608, -0.9791588015092972], [0.26685531042029864, -0.08693347042109192, -0.9598076968961182], [0.7130484234505551, 0.509219248383242, -0.48193122215797984], [0.7185164109360012, 0.4839480728658241, -0.4995282073968421], [-0.6418791120738321, 0.07922029211591934, -0.7627026621170123], [0.7293038369102846, 0.5449650105064849, -0.41367747194112947], [-0.8021131803924858, 0.06383677059026628, 0.5937502105778636], [-0.7748000544643788, -0.3944892866636834, 0.4940274064356894], [-0.7970685301999207, -0.09296557435374021, 0.5966901709849234], [-0.17944600017907963, -0.22752534120182238, 0.9570952680536687], [0.6357677363857126, -0.5776868825823336, 0.5119348113415341], [0.756153481590403, -0.6470805682839204, -0.09756357121421134], [0.7853460292520917, -0.5953163161764559, -0.16979428150578765], [0.20645218650901812, -0.26048965368071614, -0.9431450763328757], [-0.07153079212897627, -0.36260180568399625, -0.9291949614005162], [-0.24997559776215897, -0.31012023411100165, -0.9172445916539321], [-0.12510277764960495, 0.9865728972342239, 0.10499149235639302], [-0.27171543918579766, 0.9260397011267416, 0.26195646975244646], [0.3235058945620663, 0.411549260019164, -0.8520394021178105], [-0.5575519106293444, 0.8279305076221362, -0.06055527641848578], [-0.7325404411413432, 0.010048812856930494, 0.6806493395667205], [0.16302775496166355, -0.7135969383638907, -0.6813232424259732], [-0.004826470601260375, -0.6876588367407127, -0.726017926386081], [-0.0028290186706613073, -0.7083358926947834, -0.7058698603663747], [-0.9021804232709716, 0.3749925412248067, 0.21319258404637798], [-0.7793163019821603, 0.31346422485393366, 0.542592186823191], [-0.8449880612484435, 0.2911438316480122, 0.44858716615715877], [-0.8202572195921038, 0.548308936813284, 0.1628969107064873], [-0.8845150003667401, 0.41711328994949654, 0.20892514801653944], [-0.09597335565295606, 0.9873908946599251, -0.12589017494381255], [-0.7464932455441221, 0.6586332770996004, 0.09460465450517756], [-0.9258000353338431, 0.28336322003961395, 0.2501990809428286], [-0.8426277323118587, 0.23296966825750687, -0.4854931909007185], [-0.8562384942598501, 0.25711571948315853, -0.4480481533744807], [-0.8704698887558588, 0.1870992324032946, -0.45527579553877084], [0.1462327857844712, -0.10204188917284959, 0.983973284807951], [-0.02171870365120397, 0.004547478221028886, 0.9997537788643464], [0.010109087415343124, 0.3259739906505433, 0.9453246869573377], [0.09456407982650167, 0.9236762656271676, 0.37132168146179795], [0.43911870218983673, 0.22944319606761537, 0.8686371999663559], [-0.46572062541959824, 0.8094946260821355, 0.3575230753432875], [-0.8279671722983063, 0.5482379388412053, -0.11792168592542081], [-0.252846227141004, 0.9019447260607378, -0.3500921258065945], [-0.9107968433945747, 0.21948808721235158, -0.34967712197732054], [-0.7190675980331501, 0.2567022215095852, -0.6457908012126525], [-0.6428005956775624, 0.33851019476849, -0.6871813750636506], [-0.9334653604116105, 0.2768976122701481, -0.2279695883900151], [0.021173289164221263, 0.016812323955813727, -0.9996344519819098], [-0.027436745511950886, -0.06585629610271686, -0.9974518400701579], [0.037381785089093025, -0.09849566583389555, -0.9944351190276268], [0.09576834914678747, -0.024973162451912473, -0.9950903297986818], [0.006510746161280823, -0.1159216416357312, -0.9932370226612078], [0.0054673787197078594, -0.12412666442179782, -0.9922513184417815], [0.020665706020794237, -0.106938443098524, -0.9940508528150489], [-0.7698571532393044, 0.016453964363564527, -0.6380040992525023], [-0.7314386290259579, -0.08882071738190256, -0.6760979308742123], [-0.8620967897848689, -0.13736569884411817, -0.4877702223626308], [-0.8762092205682818, 0.0029931244674859117, -0.48192161499256936], [-0.9463000762429397, -0.2238653916134054, -0.23323904505974802], [-0.9426428379105471, -0.23534936421828823, -0.23671746217378442], [-0.8614102209373418, -0.2095428716608977, -0.4626707427542667], [-0.9670861442445086, -0.2534325164004193, 0.022723319327084678], [-0.9516248713308499, -0.30595264088525764, -0.02833876849617703], [-0.9274308114447798, -0.2970211715175713, 0.22726749361315782], [-0.9104932309377443, -0.3628908665083712, 0.1982732846889639], [-0.8182842736317841, -0.37686393968409415, 0.4340327389641096], [-0.6957189149976988, -0.37688040307672294, 0.6115033549304136], [-0.316724398800011, -0.8345135085370775, 0.45085791472914044], [-0.582945714961545, -0.4559884816196612, 0.672494459485109], [-0.4223615352630839, -0.6161563837462692, 0.6648022595471009], [-0.2834014089967967, -0.6779376388901567, 0.678295067912682], [-0.19921146043003882, -0.6726044914980011, 0.712683654962036], [-0.1205178977241133, -0.6152681732411466, 0.7790510325547759], [-0.01816807350374262, -0.5704035189134313, 0.8211636540400077], [0.07704835072410694, -0.6033551209433514, 0.7937418658998205], [0.07750963370766131, -0.7020439213711522, 0.7079029517866976], [-0.20335050839694296, -0.1266710284972814, 0.9708774491531595], [-0.3851915653924615, -0.9225533217664607, -0.022865398491478017], [-0.43168714420753024, -0.751118318679294, 0.4994671969912917], [-0.4163751920977541, -0.9089086614023737, 0.02273201780097253], [-0.3896387771285594, -0.7464017074859487, -0.5395054350234305], [-0.23267046201601432, -0.7569418560732983, -0.6106582371749069], [-0.27715034370935776, -0.8246129027772046, -0.4931543851119419], [-0.4156695753086446, -0.8338655821234003, -0.3631624913351238], [-0.2429716085027403, -0.941646625441003, -0.23295156204061515], [-0.255329003300472, -0.9231140307283685, -0.2875197147084222], [-0.26340447815401086, -0.9422292121533273, -0.20693523782414003], [-0.14857878705812635, -0.9427303181517198, -0.29863672124153334], [-0.05146387560623403, -0.8973073408611079, -0.43839594608567417], [-0.4974013289844624, -0.7874479103682799, 0.36402981523649947], [-0.5260084251591914, -0.7641615780539401, 0.37332588885270096], [-0.5528556693362705, -0.8323134270412218, 0.04006205248912235], [-0.5736827590341904, -0.8187041637331003, 0.024730229942398114], [-0.46687939285715035, -0.6358544503908826, -0.6145833958409934], [-0.45838279742327037, -0.683114146081747, -0.5685422362933319], [-0.42252409698370036, -0.5730016264068155, -0.7022410722844774], [-0.47583117887977705, -0.5595271540863498, -0.6786118574309706], [-0.7255401345739017, -0.4422941622481142, 0.5272261252666862], [-0.7551296309358161, -0.35184157706157254, 0.5531606865401442], [-0.7794254349830125, -0.5795436888500387, 0.23796029924260764], [-0.6963144775065785, -0.6861538284958703, 0.21056844980955883], [-0.5123888588679564, -0.7787294272827375, -0.3619919010031758], [-0.201545867180071, -0.2865337904860922, -0.9366310107680108], [-0.3835196535359728, -0.2503256040495128, -0.8889599357163932], [-0.4749754958509681, -0.1995241470749443, -0.8570813223231171], [-0.5337133550311424, -0.17384736703108172, -0.8276032549704976], [-0.5896761311760024, -0.06902985814106088, -0.8046843722891152], [-0.5424827575147387, -0.15203785291816688, -0.8261942562613461], [-0.49626004383313316, -0.23358054853171978, -0.8361615252105048], [-0.45067841604679537, -0.19617741379089335, -0.8708635872671838], [-0.31447671624402024, 0.5667656122032882, 0.7614992683937456], [-0.3745540559453008, 0.7627490993350013, 0.5271840955857534], [-0.17653646052841, 0.8460716167309581, 0.5029887647516237], [-0.009069966251852933, -0.21094442063419233, -0.9774559770728783], [0.08744257880401644, -0.12379297260634523, -0.9884478212558254], [-0.26174170015454545, -0.020504216659958434, -0.9649201311504334], [-0.27598478490693706, -0.13264431233075993, -0.9519652750527046], [-0.4552264961686277, -0.8005437999529266, 0.3897415317142413], [-0.6939429176863218, -0.7190012950237289, -0.03847550840724089], [-0.6396
gitextract_z1bj5p9q/
├── LICENSE
├── README.md
├── conf.ini
├── datasets/
│ ├── COCO.py
│ ├── H36M.py
│ ├── LSP.py
│ ├── LSPET.py
│ ├── MPII.py
│ ├── data.md
│ ├── data_filter.py
│ ├── h36m_cdf2mat.m
│ ├── h36m_list.txt
│ └── proc_all_data.py
├── demo/
│ ├── demo.py
│ ├── demo_data/
│ │ └── test/
│ │ └── para/
│ │ ├── 00000002.json
│ │ ├── 00000477.json
│ │ ├── 00002040.json
│ │ └── 00002726.json
│ └── download_pretrained_model.sh
├── demo_wild/
│ ├── demo_wild.md
│ ├── predict_hmd.py
│ └── predict_hmr.py
├── eval/
│ ├── eval.md
│ ├── eval_data/
│ │ └── save_downloaded_zip_here
│ ├── eval_functions.py
│ ├── eval_recon.py
│ ├── eval_syn.py
│ ├── eval_wild.py
│ ├── pred_hmd_ja.py
│ ├── pred_hmd_s.py
│ └── pred_hmr.py
├── predef/
│ ├── anchor_point_list.pkl
│ ├── dja_IJV.pkl
│ ├── dja_achr.pkl
│ ├── dsa_IJV.pkl
│ ├── dsa_achr.pkl
│ ├── exempt_vert_list.pkl
│ ├── mesh_joint_list.pkl
│ └── smpl_faces.npy
├── requirements.txt
└── src/
├── data_loader.py
├── hmr_predictor.py
├── lighting.py
├── mesh_edit.py
├── network.py
├── predictor.py
├── renderer.py
├── train_anchor.py
├── train_joint.py
├── train_shading.py
└── utility.py
SYMBOL INDEX (175 symbols across 15 files)
FILE: datasets/COCO.py
function proc_coco (line 36) | def proc_coco(train_dir, test_dir, train_id, test_id, coco_dataset):
FILE: datasets/H36M.py
function proc_h36m (line 26) | def proc_h36m(train_dir, test_dir, train_id, test_id, h36m_dir):
FILE: datasets/LSP.py
function proc_lsp (line 24) | def proc_lsp(train_dir, test_dir, train_id, test_id, lsp_dir, upi_dir):
FILE: datasets/LSPET.py
function proc_lspet (line 25) | def proc_lspet(train_dir, train_id, lspet_dir, upi_dir):
FILE: datasets/MPII.py
function proc_mpii (line 27) | def proc_mpii(train_dir, test_dir, train_id, test_id, upi_dir):
FILE: datasets/data_filter.py
function lsp_filter (line 9) | def lsp_filter(joints, sil):
function lspet_filter (line 38) | def lspet_filter(joints, sil):
function mpii_filter (line 70) | def mpii_filter(joints, sil):
function coco_filter (line 95) | def coco_filter(key_points, sil):
FILE: eval/eval_functions.py
function make_cam_centers_real (line 30) | def make_cam_centers_real(radius = 5.):
function make_cam_centers_syn (line 40) | def make_cam_centers_syn(radius = 1.4):
function ct2Rt (line 51) | def ct2Rt(center, target = [0, 0, 0.85], up = None):
function render_color (line 78) | def render_color(mesh, f, Rt, img_size=(224, 224), bg_img = None):
function eval_crop (line 105) | def eval_crop(arr, center, size = 64):
function knnsearch (line 121) | def knnsearch(target, source, metrics = 'euclidean', k_size =1, leaf_siz...
function get_hf_list (line 138) | def get_hf_list():
FILE: src/data_loader.py
class dataloader_joint (line 18) | class dataloader_joint(Dataset):
method __init__ (line 19) | def __init__(self,
method __len__ (line 49) | def __len__(self):
method __getitem__ (line 52) | def __getitem__(self, index):
class dataloader_anchor (line 108) | class dataloader_anchor(Dataset):
method __init__ (line 109) | def __init__(self,
method __len__ (line 139) | def __len__(self):
method __getitem__ (line 142) | def __getitem__(self, index):
class dataloader_shading_orig (line 199) | class dataloader_shading_orig(Dataset):
method __init__ (line 200) | def __init__(self,
method __len__ (line 218) | def __len__(self):
method __getitem__ (line 221) | def __getitem__(self, index):
class dataloader_shading (line 254) | class dataloader_shading(Dataset):
method __init__ (line 255) | def __init__(self,
method __len__ (line 282) | def __len__(self):
method __getitem__ (line 285) | def __getitem__(self, index):
class dataloader_pred (line 351) | class dataloader_pred(Dataset):
method __init__ (line 352) | def __init__(self,
method __len__ (line 377) | def __len__(self):
method __getitem__ (line 380) | def __getitem__(self, index):
class dataloader_sil_pred (line 440) | class dataloader_sil_pred(Dataset):
method __init__ (line 441) | def __init__(self,
method __len__ (line 466) | def __len__(self):
method __getitem__ (line 469) | def __getitem__(self, index):
class dataloader_demo (line 523) | class dataloader_demo(Dataset):
method __init__ (line 524) | def __init__(self, dataset_path):
method __len__ (line 529) | def __len__(self):
method __getitem__ (line 532) | def __getitem__(self, index):
FILE: src/hmr_predictor.py
function proc_sil (line 19) | def proc_sil(src_sil, proc_para):
class hmr_predictor (line 36) | class hmr_predictor():
method __init__ (line 37) | def __init__(self):
method predict (line 45) | def predict(self, img, sil_bbox = False, sil = None, normalize = True):
method close (line 56) | def close(self):
function preproc_img (line 60) | def preproc_img(img, sil_bbox = False, sil = None, img_size = 224, margi...
FILE: src/lighting.py
function depthToNormal (line 10) | def depthToNormal(depthmap,
function normalToSH (line 69) | def normalToSH(normal,
function RGBalbedoSHToLight (line 102) | def RGBalbedoSHToLight(colorImg, albedoImg, SH, confidence_map):
function RGBDalbedoToLight (line 140) | def RGBDalbedoToLight(colorImg,
function depthToNormalBatch (line 156) | def depthToNormalBatch(depthmap,
function normalToSHBatch (line 225) | def normalToSHBatch(normal,
FILE: src/mesh_edit.py
function getLaplacianMatrixUmbrella (line 22) | def getLaplacianMatrixUmbrella(mesh, anchorsIdx):
function getLaplacianMatrixCotangent (line 54) | def getLaplacianMatrixCotangent(mesh, anchorsIdx):
function solveLaplacianMesh (line 101) | def solveLaplacianMesh(mesh, anchors, anchorsIdx, cotangent=True):
class fast_deform (line 127) | class fast_deform():
method __init__ (line 128) | def __init__(self,
method deform (line 150) | def deform(self, mesh, anchors):
class fast_deform_dsa (line 177) | class fast_deform_dsa():
method __init__ (line 178) | def __init__(self,
method deform (line 200) | def deform(self, verts, achr_verts, active_index = []):
class fast_deform_dja (line 228) | class fast_deform_dja():
method __init__ (line 229) | def __init__(self,
method deform (line 251) | def deform(self, verts, achr_verts):
FILE: src/network.py
class Reshape (line 17) | class Reshape(nn.Module):
method __init__ (line 18) | def __init__(self, *args):
method forward (line 21) | def forward(self, x):
function make_layers_vgg (line 25) | def make_layers_vgg(cfg, in_channels, batch_norm=False):
class joint_net_vgg16 (line 40) | class joint_net_vgg16(nn.Module):
method __init__ (line 41) | def __init__(self,
method forward (line 69) | def forward(self, x):
method _initialize_weights (line 75) | def _initialize_weights(self):
class anchor_net_vgg16 (line 92) | class anchor_net_vgg16(nn.Module):
method __init__ (line 93) | def __init__(self,
method forward (line 121) | def forward(self, x):
method _initialize_weights (line 127) | def _initialize_weights(self):
class joint_net_res152 (line 142) | class joint_net_res152(nn.Module):
method __init__ (line 143) | def __init__(self,
method _make_layer (line 190) | def _make_layer(self, block, planes, blocks, stride=1):
method forward (line 207) | def forward(self, x):
method _initialize_weights (line 222) | def _initialize_weights(self):
class joint_net_dense121 (line 238) | class joint_net_dense121(nn.Module):
method __init__ (line 239) | def __init__(self,
method forward (line 301) | def forward(self, x):
method _initialize_weights (line 308) | def _initialize_weights(self):
class shading_net (line 324) | class shading_net(nn.Module):
method __init__ (line 325) | def __init__(self, init_weights=False):
method forward (line 349) | def forward(self, x, mask):
method _initialize_weights (line 370) | def _initialize_weights(self):
FILE: src/predictor.py
class joint_predictor (line 10) | class joint_predictor():
method __init__ (line 11) | def __init__(self, test_model,
method predict_one (line 36) | def predict_one(self, input_arr):
method predict_batch (line 42) | def predict_batch(self, input_arr):
class anchor_predictor (line 51) | class anchor_predictor():
method __init__ (line 52) | def __init__(self, test_model,
method predict_one (line 78) | def predict_one(self, input_arr):
method predict_batch (line 84) | def predict_batch(self, input_arr):
FILE: src/renderer.py
function eprint (line 25) | def eprint(*args, **kwargs):
class SMPLRenderer (line 28) | class SMPLRenderer(object):
method __init__ (line 29) | def __init__(self,
method __call__ (line 44) | def __call__(self,
method set_verts (line 112) | def set_verts(self, verts):
method rotated (line 116) | def rotated(self,
method silhouette (line 147) | def silhouette(self,
function _create_renderer (line 176) | def _create_renderer(w=640,
function _rotateY (line 197) | def _rotateY(points, angle):
function simple_renderer (line 204) | def simple_renderer(rn,
function get_alpha (line 248) | def get_alpha(imtmp, bgval=1.):
function append_alpha (line 259) | def append_alpha(imtmp):
function render_model (line 268) | def render_model(verts,
function render_depth (line 310) | def render_depth(mesh, require_visi = False, img_size = (448, 448), f = ...
function render_depth_v (line 329) | def render_depth_v(verts, faces,
function render_bound (line 349) | def render_bound(mesh, require_id = False, img_size=(448, 448), f=1000):
function render_sil (line 369) | def render_sil(mesh, norm = True, img_size=(448, 448), f=1000):
class all_renderer (line 392) | class all_renderer(object):
method __init__ (line 393) | def __init__(self,
method __call__ (line 402) | def __call__(self,
method set_verts (line 459) | def set_verts(self, verts):
method rotated (line 463) | def rotated(self,
method silhouette (line 494) | def silhouette(self,
FILE: src/utility.py
function show_img_arr (line 16) | def show_img_arr(arr):
function take_notes (line 23) | def take_notes(content, target_file, create_file = False):
function save_to_img (line 33) | def save_to_img(src, output_path_name, src_type = "tensor", channel_orde...
function save_batch_tensors (line 52) | def save_batch_tensors(src_tensor, tgt_tensor, pred_tensor, output_name):
class CamPara (line 68) | class CamPara():
method __init__ (line 69) | def __init__(self, K=None, Rt=None):
method get_camcenter (line 95) | def get_camcenter(self):
method get_center_dir (line 98) | def get_center_dir(self):
method project (line 101) | def project(self, p_xyz):
method inv_project (line 110) | def inv_project(self, p_uv, depth=None):
function photometricLossgray (line 125) | def photometricLossgray(colorImg_gray, depthImg, albedoImg_gray,
function scale_and_crop (line 150) | def scale_and_crop(image, scale, center, img_size):
function get_line_length (line 173) | def get_line_length(pixel_list):
function measure_achr_dist (line 194) | def measure_achr_dist(achr_verts,
function draw_vert_move (line 295) | def draw_vert_move(ori_achrs, new_achrs, bg_img = None):
class loss_board (line 325) | class loss_board():
method __init__ (line 326) | def __init__(self):
method draw (line 333) | def draw(self, loss_file, kn_smth = 0):
method show (line 369) | def show(self):
method get_list (line 389) | def get_list(self):
function get_joint_move (line 394) | def get_joint_move(verts, lsp_joint, proc_para, mesh_joint, unseen_mode=...
function get_joint_posi (line 459) | def get_joint_posi(verts,
function get_achr_move (line 497) | def get_achr_move(gt_sil, verts, vert_norms, proj_sil):
function sil_iou (line 527) | def sil_iou(src_sil, tgt_sil):
class random_joint_deform (line 553) | class random_joint_deform():
method __init__ (line 554) | def __init__(self,
method __call__ (line 574) | def __call__(self,
function get_sil_bbox (line 607) | def get_sil_bbox(sil, margin = 0):
function resize_img (line 624) | def resize_img(img, scale_factor):
function make_trimesh (line 635) | def make_trimesh(verts, faces, compute_vn = True):
function shift_verts (line 661) | def shift_verts(proc_param, verts, cam):
function transform_mpii_joints (line 673) | def transform_mpii_joints(joints):
function transform_coco_joints (line 693) | def transform_coco_joints(joints):
function transform_h36m_joints (line 715) | def transform_h36m_joints(joints):
function points2sil (line 740) | def points2sil(seg_points, sil_shape):
function pad_arr (line 749) | def pad_arr(arr, pad):
function center_crop (line 760) | def center_crop(arr, center, size = 64):
function center_crop_2dsize (line 776) | def center_crop_2dsize(arr, center, size):
function draw_rect (line 795) | def draw_rect(img_arr, center, size=64, color=[255,0,0]):
function draw_joints_rect (line 806) | def draw_joints_rect(img_arr, joint_posi, ratio = 1):
function draw_anchors_rect (line 820) | def draw_anchors_rect(img_arr, anchor_posi, sample = 1, ratio = 1):
function verts2obj (line 838) | def verts2obj(out_verts, filename):
function get_anchor_posi (line 851) | def get_anchor_posi(achr_verts):
function refine_sil (line 861) | def refine_sil(sil, min_pixel):
function subdiv_mesh_x4 (line 888) | def subdiv_mesh_x4(mesh):
function smpl_detoe (line 925) | def smpl_detoe(mesh):
function flatten_naval (line 989) | def flatten_naval(mesh):
function rotate_verts_y (line 1003) | def rotate_verts_y(verts, y):
function rotate_verts_x (line 1018) | def rotate_verts_x(verts, x):
function rotate_verts_z (line 1033) | def rotate_verts_z(verts, z):
function str2bool (line 1048) | def str2bool(v):
Copy disabled (too large)
Download .json
Condensed preview — 51 files, each showing path, character count, and a content snippet. Download the .json file for the full structured content (10,332K chars).
[
{
"path": "LICENSE",
"chars": 1067,
"preview": "MIT License\n\nCopyright (c) 2019 zhuhao-nju\n\nPermission is hereby granted, free of charge, to any person obtaining a copy"
},
{
"path": "README.md",
"chars": 4548,
"preview": "# Detailed Human Shape Estimation from a Single Image by Hierarchical Mesh Deformation\n\n[Hao Zhu](https://zhuhao-nju.git"
},
{
"path": "conf.ini",
"chars": 640,
"preview": "[HMR]\nhmr_path = /media/hao/Document/Code/hmr/\n\n[DATA]\ntgt_path = /media/hao/Document/Data/HybridHuman/\nlsp_path = /med"
},
{
"path": "datasets/COCO.py",
"chars": 12605,
"preview": "from __future__ import print_function \nimport numpy as np\nimport PIL.Image\nimport skimage.io as io\nimport pickle\nimport "
},
{
"path": "datasets/H36M.py",
"chars": 6270,
"preview": "from __future__ import print_function \nimport sys\nsys.path.append(\"../src/\")\nimport numpy as np\nimport PIL.Image\nimport "
},
{
"path": "datasets/LSP.py",
"chars": 8291,
"preview": "from __future__ import print_function \nimport sys\nsys.path.append(\"../src/\")\nimport numpy as np\nimport PIL.Image\nimport "
},
{
"path": "datasets/LSPET.py",
"chars": 5417,
"preview": "from __future__ import print_function \nimport numpy as np\nimport PIL.Image\nimport pickle\nimport json\nfrom tqdm import tr"
},
{
"path": "datasets/MPII.py",
"chars": 8761,
"preview": "from __future__ import print_function \nimport sys\nsys.path.append(\"../src/\")\nimport numpy as np\nimport PIL.Image\nimport "
},
{
"path": "datasets/data.md",
"chars": 3495,
"preview": "## Despription\nWe assemble a quite large dataset (named as WILD dataset in the paper) for training and testing by extrac"
},
{
"path": "datasets/data_filter.py",
"chars": 3884,
"preview": "import numpy as np\nimport scipy.ndimage\n\n# select from LSPET dataset\n# RULE: TESTED\n# (1) valid point number >=12\n# (2) "
},
{
"path": "datasets/h36m_cdf2mat.m",
"chars": 739,
"preview": "% This script is the pre-process for h36m dataset processing.\n\n% H36M dataset save the pose sequence as cdf file, which "
},
{
"path": "datasets/h36m_list.txt",
"chars": 7848,
"preview": "35\r\nVideos_Directions/S1/Videos/Directions 1.54138969.mp4\r\nSegments_gt_bs_Directions/S1/MySegmentsMat/ground_truth_bs/Di"
},
{
"path": "datasets/proc_all_data.py",
"chars": 1956,
"preview": "from __future__ import print_function\nimport os\nimport sys\nimport datetime\nimport configparser\nfrom LSP import proc_lsp\n"
},
{
"path": "demo/demo.py",
"chars": 12842,
"preview": "from __future__ import print_function\nimport numpy as np\nimport PIL.Image\nimport torch\nimport cv2\nimport argparse\nimport"
},
{
"path": "demo/demo_data/test/para/00000002.json",
"chars": 891013,
"preview": "{\"proc_para\": {\"end_pt\": [319, 335], \"img_size\": 224, \"scale\": 1.3099415204678362, \"start_pt\": [95, 111]}, \"joint_move\":"
},
{
"path": "demo/demo_data/test/para/00000477.json",
"chars": 890324,
"preview": "{\"proc_para\": {\"end_pt\": [295, 335], \"img_size\": 224, \"scale\": 1.4834437086092715, \"start_pt\": [71, 111]}, \"joint_move\":"
},
{
"path": "demo/demo_data/test/para/00002040.json",
"chars": 889640,
"preview": "{\"proc_para\": {\"end_pt\": [356, 319], \"img_size\": 224, \"scale\": 1.103448275862069, \"start_pt\": [132, 95]}, \"joint_move\": "
},
{
"path": "demo/demo_data/test/para/00002726.json",
"chars": 889431,
"preview": "{\"proc_para\": {\"end_pt\": [302, 400], \"img_size\": 224, \"scale\": 0.45528455284552843, \"start_pt\": [78, 176]}, \"joint_move\""
},
{
"path": "demo/download_pretrained_model.sh",
"chars": 292,
"preview": "if [ -f \"pretrained_model.tar.gz\" ]; then\n echo \"Model downloaded.\"\nelse\n echo \"Currently wget link cannot be used"
},
{
"path": "demo_wild/demo_wild.md",
"chars": 2216,
"preview": "## Demo wild\nThis demo runs for images out of the dataset. HMR repository is required to predict the initial shape. Ple"
},
{
"path": "demo_wild/predict_hmd.py",
"chars": 13249,
"preview": "from __future__ import print_function\nimport numpy as np\nimport PIL.Image\nimport torch\nimport cv2\nimport openmesh as om\n"
},
{
"path": "demo_wild/predict_hmr.py",
"chars": 2351,
"preview": "from __future__ import print_function \nimport numpy as np\nimport PIL.Image\nimport openmesh as om\nimport argparse\nimport "
},
{
"path": "eval/eval.md",
"chars": 2778,
"preview": "## Evaluation\n\nThis part generates quantitative evaluation results on WILD, RECON, and SYN testing datasets. For WILD t"
},
{
"path": "eval/eval_data/save_downloaded_zip_here",
"chars": 0,
"preview": ""
},
{
"path": "eval/eval_functions.py",
"chars": 17133,
"preview": "\nfrom __future__ import absolute_import\nfrom __future__ import division\nfrom __future__ import print_function\n\nimport nu"
},
{
"path": "eval/eval_recon.py",
"chars": 4868,
"preview": "import numpy as np\nimport PIL.Image, open3d, sys, argparse\nimport openmesh as om\nfrom tqdm import trange\nfrom eval_funct"
},
{
"path": "eval/eval_syn.py",
"chars": 4669,
"preview": "import numpy as np\nimport PIL.Image, open3d, sys, argparse\nimport openmesh as om\nfrom tqdm import trange\nfrom eval_funct"
},
{
"path": "eval/eval_wild.py",
"chars": 7072,
"preview": "import numpy as np\nimport PIL.Image\nimport cv2, pickle, sys, os\nfrom tqdm import trange\nsys.path.append(\"../src/\")\nfrom "
},
{
"path": "eval/pred_hmd_ja.py",
"chars": 6831,
"preview": "import numpy as np\nimport cv2, argparse, pickle, sys, PIL.Image\nimport openmesh as om\nfrom tqdm import trange\nsys.path.a"
},
{
"path": "eval/pred_hmd_s.py",
"chars": 5579,
"preview": "from __future__ import print_function\nimport torch, PIL.Image, cv2, pickle, sys, argparse\nimport numpy as np\nimport open"
},
{
"path": "eval/pred_hmr.py",
"chars": 1434,
"preview": "import numpy as np\nimport openmesh as om\nfrom tqdm import trange\nimport sys, os, pickle, argparse, PIL.Image\nsys.path.ap"
},
{
"path": "predef/anchor_point_list.pkl",
"chars": 6343,
"preview": "cnumpy.core.multiarray\n_reconstruct\np0\n(cnumpy\nndarray\np1\n(I0\ntp2\nS'b'\np3\ntp4\nRp5\n(I1\n(I200\ntp6\ncnumpy\ndtype\np7\n(S'i8'\np"
},
{
"path": "predef/dja_IJV.pkl",
"chars": 2679672,
"preview": "(dp0\nS'I'\np1\n(lp2\nI0\naI0\naI0\naI0\naI0\naI0\naI0\naI1\naI1\naI1\naI1\naI1\naI1\naI1\naI2\naI2\naI2\naI2\naI2\naI2\naI2\naI3\naI3\naI3\naI3\naI3"
},
{
"path": "predef/dja_achr.pkl",
"chars": 1359,
"preview": "(dp0\nS'achr_num'\np1\nI190\nsS'achr_id'\np2\n(lp3\nI132\naI134\naI164\naI165\naI170\naI171\naI258\naI272\naI274\naI413\naI3163\naI3644\naI"
},
{
"path": "predef/dsa_IJV.pkl",
"chars": 2693329,
"preview": "(dp0\nS'I'\np1\n(lp2\nI0\naI0\naI0\naI0\naI0\naI0\naI0\naI1\naI1\naI1\naI1\naI1\naI1\naI1\naI2\naI2\naI2\naI2\naI2\naI2\naI2\naI3\naI3\naI3\naI3\naI3"
},
{
"path": "predef/dsa_achr.pkl",
"chars": 6387,
"preview": "(dp0\nS'achr_num'\np1\nI200\nsS'achr_id'\np2\ncnumpy.core.multiarray\n_reconstruct\np3\n(cnumpy\nndarray\np4\n(I0\ntp5\nS'b'\np6\ntp7\nRp"
},
{
"path": "predef/exempt_vert_list.pkl",
"chars": 68528,
"preview": "(lp0\nI0\naI1\naI2\naI3\naI4\naI5\naI6\naI7\naI8\naI9\naI10\naI11\naI12\naI13\naI14\naI16\naI17\naI18\naI19\naI20\naI21\naI22\naI23\naI24\naI25\na"
},
{
"path": "predef/mesh_joint_list.pkl",
"chars": 1797,
"preview": "(dp0\nS'point_list'\np1\n(lp2\n(lp3\nI132\naI134\naI164\naI165\naI170\naI171\naI258\naI272\naI274\naI413\naI3163\naI3644\naI3645\naI3675\na"
},
{
"path": "requirements.txt",
"chars": 208,
"preview": "# python requirements\nopenmesh>=1.1.2\nopencv-python>=3.4.2.17\nPyOpenGL>=3.1.0\nnumpy\nscipy\nmatplotlib\nPillow\nscikit-learn"
},
{
"path": "src/data_loader.py",
"chars": 20121,
"preview": "from torch.utils.data.dataset import Dataset\nimport numpy as np\nimport PIL.Image\nimport random\nimport json\nimport pickle"
},
{
"path": "src/hmr_predictor.py",
"chars": 3560,
"preview": "from __future__ import print_function \nimport numpy as np\nimport sys\nimport tensorflow as tf\nfrom utility import scale_a"
},
{
"path": "src/lighting.py",
"chars": 9533,
"preview": "from __future__ import print_function\nimport os\nimport torch\nimport torch.nn.functional as F\nimport numpy as np\nimport m"
},
{
"path": "src/mesh_edit.py",
"chars": 10532,
"preview": "import numpy as np\nfrom scipy import sparse\nfrom scipy.sparse.linalg import lsqr, cg, eigsh\nimport matplotlib.pyplot as "
},
{
"path": "src/network.py",
"chars": 15079,
"preview": "import torch\nimport torch.nn as nn\nimport torch.nn.functional\nimport numpy as np\nimport pickle\nfrom torch.nn.modules.los"
},
{
"path": "src/predictor.py",
"chars": 3592,
"preview": "from __future__ import print_function\nimport torch\nimport numpy as np\nfrom network import joint_net_vgg16\nfrom network i"
},
{
"path": "src/renderer.py",
"chars": 15666,
"preview": "\"\"\"\nRenders mesh using OpenDr for visualization.\n\"\"\"\n\nfrom __future__ import absolute_import\nfrom __future__ import divi"
},
{
"path": "src/train_anchor.py",
"chars": 6339,
"preview": "from __future__ import print_function\n\nimport argparse\nimport os\nimport random\nimport torch\nimport torch.nn as nn\nimport"
},
{
"path": "src/train_joint.py",
"chars": 6085,
"preview": "from __future__ import print_function\n\nimport argparse\nimport os\nimport random\nimport torch\nimport torch.nn as nn\nimport"
},
{
"path": "src/train_shading.py",
"chars": 6315,
"preview": "from __future__ import print_function\r\nimport argparse\r\nimport os\r\nimport random\r\nimport torch\r\nimport torch.nn as nn\r\ni"
},
{
"path": "src/utility.py",
"chars": 38047,
"preview": "import numpy as np\nimport PIL.Image\nimport cv2\nimport math\nimport skimage.draw\nimport matplotlib.pyplot as plt\nimport pi"
}
]
// ... and 1 more files (download for full content)
About this extraction
This page contains the full source code of the zhuhao-nju/hmd GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 51 files (8.9 MB), approximately 2.3M tokens, and a symbol index with 175 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.
Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.