--- a +++ b/app/scratch/bvh_animation4.py @@ -0,0 +1,106 @@ +import numpy as np +import matplotlib.pyplot as plt +import mpl_toolkits.mplot3d.axes3d as p3 +from matplotlib import animation +from resources.pymo.pymo.parsers import BVHParser +from matplotlib.widgets import Slider +from resources.pymo.pymo.preprocessing import MocapParameterizer +import matplotlib.pyplot + +# Set up formatting for the movie files +# Writer = animation.writers['ffmpeg'] +# writer = Writer(fps=15, metadata=dict(artist='Me'), bitrate=1800) + +# BVH-File +bvh = BVHParser() +bvh_data = bvh.parse('../../output/BVH/RightHand.bvh') +bvh_number_frames = np.size(bvh.data.values.RightHandIndex2_Xrotation.values) +bvh_frames = np.arange(0, bvh_number_frames) + + +mp = MocapParameterizer('position') +positions = mp.fit_transform([bvh_data]) + + +fig = plt.figure(figsize=(6, 6)) +ax = fig.add_subplot(111, projection='3d') + +joints_to_draw = positions[0].skeleton.keys() +lines = [] +points = [] + +df = positions[0].values +# frame = 10 + +for joint in joints_to_draw: + parent_x = df['%s_Xposition' % joint][0] + parent_y = df['%s_Yposition' % joint][0] + parent_z = df['%s_Zposition' % joint][0] + # ^ In mocaps, Y is the up-right axis + + points.append(ax.plot([parent_x], + [parent_y], + [parent_z], + linestyle="", c='b', marker='o')) + + children_to_draw = [c for c in positions[0].skeleton[joint]['children'] if c in joints_to_draw] + + for c in children_to_draw: + child_x = df['%s_Xposition' % c][0] + child_y = df['%s_Yposition' % c][0] + child_z = df['%s_Zposition' % c][0] + # ^ In mocaps, Y is the up-right axis + + lines.append(ax.plot([parent_x, child_x], [parent_y, child_y], [parent_z, child_z], 'k-', lw=2, c='black')) + + +def update(frame): + index1 = 0 + index2 = 0 + + for up_joint in joints_to_draw: + up_parent_x = df['%s_Xposition' % up_joint][frame] + up_parent_y = df['%s_Yposition' % up_joint][frame] + up_parent_z = df['%s_Zposition' % up_joint][frame] + # ^ In mocaps, Y is the up-right axis + + points[index1][0].set_data([up_parent_x], [up_parent_y]) + points[index1][0].set_3d_properties([up_parent_z]) + index1 += 1 + + up_children_to_draw = [c for c in positions[0].skeleton[up_joint]['children'] if c in joints_to_draw] + + for c in up_children_to_draw: + up_child_x = df['%s_Xposition' % c][frame] + up_child_y = df['%s_Yposition' % c][frame] + up_child_z = df['%s_Zposition' % c][frame] + # ^ In mocaps, Y is the up-right axis + + lines[index2][0].set_data([[up_parent_x, up_child_x], [up_parent_y, up_child_y]]) + lines[index2][0].set_3d_properties([up_parent_z, up_child_z]) + index2 += 1 + + +ax.set_xlim3d([-200.0, 200.0]) +ax.set_xlabel('X') + +ax.set_ylim3d([-200.0, 200.0]) +ax.set_ylabel('Y') + +ax.set_zlim3d([-200.0, 200.0]) +ax.set_zlabel('Z') + +ax.view_init(elev=135, azim=-90) + +# Creating the Animation object +line_ani = animation.FuncAnimation(fig, update, bvh_number_frames-1, + interval=5, blit=False) +line_ani.save('bvh_video.mp4') + +plt.show() + + + + + +