한 frame으로 시각화한 것을 모든 frame에 대해 시각화한 후, video로 추출해보자
전체 코드는 깃에 업로드하였다
https://github.com/dangdang2222/frankmocap_project/blob/main/3D_skeleton_visualize_to_video.ipynb
먼저 pkl이 저장되어있는 output 디렉토리로 이동한 후 pkl 파일들 이름 형식을 잠깐 보자
반복문으로 처리할 수 있을 것 같다
for index in range(0,301):
if index<10:
pkl_name = 'mocap/0000'+str(index)+'_prediction_result.pkl'
elif index<100:
pkl_name = 'mocap/000'+str(index)+'_prediction_result.pkl'
else:
pkl_name = 'mocap/00'+str(index)+'_prediction_result.pkl'
pickle_f = pd.read_pickle(pkl_name)
301 대신 전체 frame 개수를 써줘야한다
plotting 코드는 이전과 같으므로 설명을 생략
매 프레임의 plotting을 jpg로 저장하려고 한다. 편의를 위해 plotting을 저장할 폴더를 생성하고 그 안에 frame 순서대로 저장한다
for index in range(0,301):
(생략)
if index<10:
spkl_name = 'mid/s0000'+str(index)+'.jpg'
elif index<100:
spkl_name = 'mid/s000'+str(index)+'.jpg'
else:
spkl_name = 'mid/s00'+str(index)+'.jpg'
fig.savefig(spkl_name)
아래 코드는 output으로 나온 jpg와 위에서 저장한 pkl을 visualize한 jpg를 합치기 위한 코드이다. 대충 각각 jpg를 읽고, 사이즈를 동일하게 조절한 후 paste로 이어붙여서 새로운 jpg를 저장하는 과정
from PIL import Image
for index in range(0,301):
if index<10:
one_name = 'rendered/0000'+str(index)+'.jpg'
two_name = 'mid/s0000'+str(index)+'.jpg'
new_name = 'concat/0000'+str(index)+'.jpg'
elif index<100:
one_name = 'rendered/000'+str(index)+'.jpg'
two_name = 'mid/s000'+str(index)+'.jpg'
new_name = 'concat/000'+str(index)+'.jpg'
else:
one_name = 'rendered/00'+str(index)+'.jpg'
two_name = 'mid/s00'+str(index)+'.jpg'
new_name = 'concat/00'+str(index)+'.jpg'
one = Image.open(one_name)
two = Image.open(two_name)
two = two.resize((one.size[0]//2, one.size[1]))
new = Image.new('RGB',(one.size[0]+two.size[0],one.size[1]),(250,250,250))
new.paste(one,(0,0))
new.paste(two,(one.size[0],0))
new.save(new_name)
영상으로 추출한다
cat *.jpg | ffmpeg -f image2pipe -i - output2.mkv
(velog는 영상 업로드가 안되는거 같아서 gif로 변환해서 올림)