又又参加打卡了一次paddle活动,这次积极参加创意赛!
看了不少其他参赛作品,想到的一个创意是通过人体骨骼关键点检测(Pose Estimation)来对运动员辅助训练或评价提供一些帮助,因此有了这个标题:双人跳水评价小助手。
因为在双人跳水中,两名运动员的跳跃及空中姿态统一协调是评价运动员动作的重要指标,如果能把两名运动员人体骨骼关键点标识出来,即可进行直观地对比和判断。
1、先到B站搜一个双人跳水的视频,用you-get将视频下载下来。you-get使用起来特别简单,首先电脑需装有pip,然后用pip install you-get安装,安装后再you-get 视频所在的B站地址,就能将视频下载。
2、将视频中,正对运动员的慢动作截取一段视频下来。
3、把截取的小段视频上传至平台中,用cv2.VideoCapture将视频按帧存为图片。
4、将运动员的人体骨骼关键点标识出来。在这里,由于有两个人(好在只有两个),需要将图片从中间分成2张图后再进行关键点标识。关键代码如下:
[h, w] = img_origin.shape[:2] #获取图宽高
limg = img_origin[:, :int(w/2), :] #左图
rimg = img_origin[:, int(w/2):, :] #右图
cv2.imwrite(leftpath, limg) #存左图
cv2.imwrite(rightpath, rimg) #存右图
仅显示关键点,观看效果并不理想,因此我参考了https://aistudio.baidu.com/aistudio/projectdetail/439568项目,将关键点连接起来。关键代码是
def change_data(result):
def write_line(predict_img_path,out_img_path):
两个函数。
5.将分开并画好检测线的两张图再合并起来。
l_p = cv2.imread(leftpath) #准备将左右图再拼起来
r_p = cv2.imread(rightpath)
final_path = 'picout/' + out_pic
final_matrix = np.zeros((h, w, 3), np.uint8)
# change
final_matrix[0:h, :int(w/2)] = l_p
final_matrix[0:h, int(w/2):] = r_p
cv2.imwrite(final_path,final_matrix) #将拼好的图存放好
6.最后是视频的合成,即将生成的图片再逐帧拼回一个视频。函数为def CompVideo(comb_path):
不足与展望:
从结果来看,效果还是很差的o(╥﹏╥)o,左边的关键点都跑出去了,我又尝试了先把人像抠图抠出来(好的抠图项目的不能运行了,包括官号的项目,要注意维护啊https://aistudio.baidu.com/aistudio/projectdetail/341116,要修改
results = module.segmentation(data=input_dict, output_dir=out_path, batch_size=1,use_gpu=True, visualization=True)
),但人像抠的也不完整同样影响了效果。
由于截止时间就快到了,通宵草草完成了这次初版,后续考虑先处理一下图片,让人物更明显更容易找出关键点,下次再继续参加创意赛。
项目地址:https://aistudio.baidu.com/aistudio/projectdetail/709646