-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathpct_to_csv.py
108 lines (82 loc) · 3.63 KB
/
pct_to_csv.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
from __future__ import absolute_import
from __future__ import division
from __future__ import print_function
import sys
from absl import flags
import numpy as np
import skimage.io as io
import tensorflow as tf
from src.util import image as img_util
from src.util import openpose as op_util
import src.config
from src.RunModel import RunModel
import pandas as pd
import glob
tf.logging.set_verbosity(tf.logging.WARN)
flags.DEFINE_string('img_path', 'data/im1963.jpg', 'Image to run')
flags.DEFINE_string(
'json_path', None,
'If specified, uses the openpose output to crop the image.')
def preprocess_image(img_path, json_path=None):
img = io.imread(img_path)
if img.shape[2] == 4:
img = img[:, :, :3]
if json_path is None:
if np.max(img.shape[:2]) != config.img_size:
print('Resizing so the max image size is %d..' % config.img_size)
scale = (float(config.img_size) / np.max(img.shape[:2]))
else:
scale = 1.
center = np.round(np.array(img.shape[:2]) / 2).astype(int)
center = center[::-1]
else:
scale, center = op_util.get_bbox(json_path)
crop, proc_param = img_util.scale_and_crop(img, scale, center,
config.img_size)
crop = 2 * ((crop / 255.) - 0.5)
return crop, proc_param, img
def main(img_path, json_path=None):
sess = tf.Session()
model = RunModel(config, sess=sess)
input_img, proc_param, img = preprocess_image(img_path, json_path)
# Add batch dimension: 1 x D x D x 3
input_img = np.expand_dims(input_img, 0)
joints, verts, cams, joints3d, theta = model.predict(
input_img, get_theta=True)
joints_names = ['Ankle.R_x', 'Ankle.R_y', 'Ankle.R_z',
'Knee.R_x', 'Knee.R_y', 'Knee.R_z',
'Hip.R_x', 'Hip.R_y', 'Hip.R_z',
'Hip.L_x', 'Hip.L_y', 'Hip.L_z',
'Knee.L_x', 'Knee.L_y', 'Knee.L_z',
'Ankle.L_x', 'Ankle.L_y', 'Ankle.L_z',
'Wrist.R_x', 'Wrist.R_y', 'Wrist.R_z',
'Elbow.R_x', 'Elbow.R_y', 'Elbow.R_z',
'Shoulder.R_x', 'Shoulder.R_y', 'Shoulder.R_z',
'Shoulder.L_x', 'Shoulder.L_y', 'Shoulder.L_z',
'Elbow.L_x', 'Elbow.L_y', 'Elbow.L_z',
'Wrist.L_x', 'Wrist.L_y', 'Wrist.L_z',
'Neck_x', 'Neck_y', 'Neck_z',
'Head_x', 'Head_y', 'Head_z',
'Nose_x', 'Nose_y', 'Nose_z',
'Eye.L_x', 'Eye.L_y', 'Eye.L_z',
'Eye.R_x', 'Eye.R_y', 'Eye.R_z',
'Ear.L_x', 'Ear.L_y', 'Ear.L_z',
'Ear.R_x', 'Ear.R_y', 'Ear.R_z']
joints_export = pd.DataFrame(joints3d.reshape(1,57), columns=joints_names)
joints_export.index.name = 'frame'
joints_export.iloc[:, 1::3] = joints_export.iloc[:, 1::3]*-1
joints_export.iloc[:, 2::3] = joints_export.iloc[:, 2::3]*-1
hipCenter = joints_export.loc[:][['Hip.R_x', 'Hip.R_y', 'Hip.R_z',
'Hip.L_x', 'Hip.L_y', 'Hip.L_z']]
joints_export['hip.Center_x'] = hipCenter.iloc[0][::3].sum()/2
joints_export['hip.Center_y'] = hipCenter.iloc[0][1::3].sum()/2
joints_export['hip.Center_z'] = hipCenter.iloc[0][2::3].sum()/2
joints_export.to_csv("hmr.csv")
if __name__ == '__main__':
config = flags.FLAGS
config(sys.argv)
# Using pre-trained model, change this to use your own.
config.load_path = src.config.PRETRAINED_MODEL
config.batch_size = 1
main(config.img_path, config.json_path)
print('\nDone.')