使用飞桨Paddlehub实现皮影戏

本文介绍了如何利用飞桨PaddlePaddle的PaddleHub和人体骨骼关键点检测模型,实现皮影戏效果。首先安装PaddlePaddle、PaddleHub及相关模型,然后通过检测人体骨骼关键点信息,拼接皮影素材,最后将连续帧转换为视频,完成皮影戏的动态呈现。
摘要由CSDN通过智能技术生成

前沿

飞桨(PaddlePaddle)是集深度学习核心框架、工具组件和服务平台为一体的技术先进、功能完备的开源深度学习平台,已被中国企业广泛使用,深度契合企业应用需求,拥有活跃的开发者社区生态。提供丰富的官方支持模型集合,我们这里将要使用到其中的骨骼节点检测模型,通过PaddleHub提供的人体骨骼关键点检测预训练模型,我们就可以快速实现皮影戏的效果。

PaddleHub可以便捷地获取PaddlePaddle生态下的预训练模型,完成模型的管理和一键预测。配合使用Fine-tune API,可以基于大规模预训练模型快速完成迁移学习,让预训练模型能更好地服务于用户特定场景的应用。

人体骨骼关键点检测(Pose Estimation)是计算机视觉的基础性算法之一,在诸多计算机视觉任务起到了基础性的作用,如行为识别、人物跟踪、步态识别等相关领域。具体应用主要集中在智能视频监控,病人监护系统,人机交互,虚拟现实,人体动画,智能家居,智能安防,运动员辅助训练等等。该模型的论文《Simple Baselines for Human Pose Estimation and Tracking》由 MSRA发表于 ECCV18,使用 MPII 数据集训练完成。

思路:通过PaddleHub完成人体骨骼关键点检测,将人体骨骼关键点进行连接,就可以获取到人体的肢体骨骼,在骨骼肢体上覆盖皮影素材,就可以得到皮影人了。将视频中连续帧进行转换,就可以实现“皮影戏”的效果。

环境:
python3.7.9、pip21.1、PaddlePaddle2.0.2、human_pose_estimation_resnet50_mpii 1.1.1

目录结构:
 |-demo(总文件夹)
   |-work(文件夹)
     |-imgs(存放人体示例图片的文件夹)
     |-mp4_img(存放视频帧图片的文件夹)
     |-mp4_img_analysis(存放视频姿势映射图片的文件夹)
     |-output_pose(存放骨骼节点图片的文件夹)
     |-shadow_play_material(存放皮影各部分图片的文件夹)
     |-background.jpg(背景图片)
     |-demo.py(皮影戏python代码)
     |-test.mp4(源视频)

1、安装模型

先使用快捷键【win+R】输入cmd后打开命令行,然后按以下步骤在命令行输入命令进行逐一安装。

可以在命令行通过【python -V】命令查询自己的python版本号,可以通过【pip -V】命令查询自己的pip版本号。

1)安装PaddlePaddle

python -m pip install paddlepaddle==2.0.2 -i https://mirror.baidu.com/pypi/simple

其他版本安装请参考飞桨官网

2)安装PaddleHub

pip install PaddleHub

3)安装人体骨骼关键节点检测模型

通过PaddleHub来安装人体骨骼关键点检测模型:human_pose_estimation_resnet50_mpii。

hub install human_pose_estimation_resnet50_mpii==1.1.1

2、测试及拼接皮影素材

打开pycharm软件,首先安装以下依赖库:cv2 4.5.1.48、matplotlib 3.0.3、numpy 1.16.2、tensorflow 2.4.1等。

1)检测是否安装成功

此步是测试上面的人体骨骼关键点检测模型是否安装成功。

选取一张含有人体姿态的作为输入,检测人体骨骼关键点信息。
①代码如下:

import os
import cv2
import paddlehub as hub
import matplotlib.pyplot as plt
from matplotlib.image import imread
import numpy as np

def show_img(img_path, size=8):
    im = imread(img_path)
    plt.figure(figsize=(size, size))
    plt.axis("off")
    plt.imshow(im)

def img_show_bgr(image, size=8):
    image = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)
    plt.figure(figsize=(size, size))
    plt.imshow(image)

    plt.axis("off")
    plt.show()

pose_estimation = hub.Module(name="human_pose_estimation_resnet50_mpii")
result = pose_estimation.keypoint_detection(paths=['imgs/01.jpg'], visualization=True, output_dir="output_pose/")
print(result)

②打开output_pose文件夹会发现多出一张图片为检测图片骨骼节点图,若安装成功的话,结果如下图所示:
在这里插入图片描述

2)拼接皮影素材

实现姿态映射:
要实现皮影戏的效果,我们首先要解析人体各个骨骼关键点的位置信息,通过这些关键点的信息,计算人体的肢体长度,旋转角度,这样就可以将皮影的素材对应的缩放和旋转,并移动到指定位置,从而达到与人体动作同步的效果。具体的实现思路如下:

  1. 首先解析某个部位相关骨骼关键点的,这里以手臂进行举例 :在人体骨骼关键点解析结果中,想要获取手臂在图像中具体坐标位置信息,我们可以通过肩膀(shoulder)和肘部(elbow)关键点得到。
  2. 通过两个骨骼关键点可以确认肢体的位置,长度和旋转角度,根据长度就可以对素材进行缩放,根据旋转角度,可以先对素材进行中心旋转,再结合骨骼关键点位置信息,最终得到素材旋转后需要位移的信息,就可以得到最终素材显示的位置。按照这种方法将各个素材图片映射到对应的肢体上,便可以达到人体姿态映射的效果。
  3. 除了得到动作映射后的皮影人之外,我们还需要有一个合适的背景,将皮影人合并到背景图像中进行输出。

整体资源在此处下载。

拼接完成的话会如下图所示:
在这里插入图片描述

3、实现皮影戏

想要真正让皮影动起来,我们就需要对视频进行操作,具体实现思路如下:

  1. 准备含有人体运动的视频素材(视频只能有单个人物且需要全身出境);
  2. 将视频中每一帧保存成图片;
  3. 分析图片中的人体姿势, 并转换为皮影姿势,并保存;
  4. 将转换后所有的合并图像到视频,得到最终的结果;

程序成功运行完成后,会在总文件夹下生成一个mp4_analysis.mp4文件,这就是我们需要的结果(按照个人计算机配置的不同,程序运行时间长短不一;我这里源视频2分钟,运算了一个多小时)。如下图所示:
在这里插入图片描述

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

念芯

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值