OpenCV+Mediapipe人物动作捕捉与Unity引擎的结合

OpenCV+Mediapipe人物动作捕捉与Unity引擎的结合

  • 前言
  • Demo演示
  • 认识Mediapipe
  • 项目环境
  • 身体动作捕捉部分
  • 核心代码
    • 完整代码
      • Motion.py
      • 运行效果
  • Unity 部分
    • 建模
    • Line.cs
    • Action.cs
      • 最终实现效果

前言

本篇文章将介绍如何使用Python利用OpenCV图像捕捉,配合强大的Mediapipe库来实现人体动作检测与识别;将识别结果实时同步至Unity中,实现人物模型在Unity中运动身体结构识别

Demo演示

Demo展示:https://hackathon2022.juejin.cn/#/works/detail?unique=WJoYomLPg0JOYs8GazDVrw
在这里插入图片描述
在这里插入图片描述
本篇文章所用的技术会整理后开源,后续可以持续关注:
项目地址:https://github.com/BIGBOSS-dedsec/OpenCV-Unity-To-Build-3DPerson

GitHub:https://github.com/BIGBOSS-dedsec

CSDN: https://blog.csdn.net/weixin_50679163?type=edu

同时本篇文章实现的技术参加了稀土掘金2022编程挑战赛-游戏赛道-优秀奖
作品展示:https://hackathon2022.juejin.cn/#/works/detail?unique=WJoYomLPg0JOYs8GazDVrw
alt

认识Mediapipe

项目的实现,核心是强大的Mediapipe ,它是google的一个开源项目:

功能详细
人脸检测 FaceMesh从图像/视频中重建出人脸的3D Mesh
人像分离从图像/视频中把人分离出来
手势跟踪21个关键点的3D坐标
人体3D识别33个关键点的3D坐标
物体颜色识别可以把头发检测出来,并图上颜色

Mediapipe Dev
在这里插入图片描述
以上是Mediapipe的几个常用功能 ,这几个功能我们会在后续一一讲解实现
Python安装Mediapipe

pip install mediapipe==0.8.9.1

也可以用 setup.py 安装
https://github.com/google/mediapipe

项目环境

Python 3.7
Mediapipe 0.8.9.1
Numpy 1.21.6
OpenCV-Python 4.5.5.64
OpenCV-contrib-Python 4.5.5.64

在这里插入图片描述
实测也支持Python3.8-3.9

身体动作捕捉部分

身体数据文件

这部分是我们通过读取视频中人物计算出每个特征点信息进行数据保存,这些信息很重要,后续在untiy中导入这些动作数据
**加粗样式**
关于身体特征点
**加粗样式**

核心代码

摄像头捕捉部分:

import cv2cap = cv2.VideoCapture(0)       #OpenCV摄像头调用:0=内置摄像头(笔记本)   1=USB摄像头-1  2=USB摄像头-2while True:success, img = cap.read()imgRGB = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)       #cv2图像初始化cv2.imshow("HandsImage", img)       #CV2窗体cv2.waitKey(1)      #关闭窗体

视频帧率计算

import time#帧率时间计算
pTime = 0
cTime = 0while True
cTime = time.time()fps = 1 / (cTime - pTime)pTime = cTimecv2.putText(img, str(int(fps)), (10, 70), cv2.FONT_HERSHEY_PLAIN, 3,(255, 0, 255), 3)       #FPS的字号,颜色等设置

身体动作捕捉:

while True:if bboxInfo:lmString = ''for lm in lmList:lmString += f'{lm[1]},{img.shape[0] - lm[2]},{lm[3]},'posList.append(lmString)

完整代码

Motion.py

import cv2
from cvzone.PoseModule import PoseDetector# 读取cv来源,也可以调用摄像头使用
cap = cv2.VideoCapture('asoul.mp4')detector = PoseDetector()
posList = []while True:success, img = cap.read()img = detector.findPose(img)lmList, bboxInfo = detector.findPosition(img)if bboxInfo:lmString = ''for lm in lmList:lmString += f'{lm[1]},{img.shape[0] - lm[2]},{lm[3]},'posList.append(lmString)cv2.imshow("Image", img)key = cv2.waitKey(1)if key == ord('s'):with open("MotionFile.txt", 'w') as f:		# 将动作数据保存下来f.writelines(["%s\n" % item for item in posList])

运行效果

在这里插入图片描述

Unity 部分

建模

在Unity中,我们需要搭建一个人物的模型,这里需要一个33个Sphere作为身体的特征点33个Cube作为中间的支架
具体文件目录如下:
在这里插入图片描述
Line的编号对应人物模型特征点
在这里插入图片描述

Line.cs

这里是每个Line对应cs文件,实现功能:使特征点和Line连接在一起

using System.Collections;
using System.Collections.Generic;
using UnityEngine;public class LineCode : MonoBehaviour
{LineRenderer lineRenderer;public Transform origin;public Transform destination;void Start(){lineRenderer = GetComponent<LineRenderer>();lineRenderer.startWidth = 0.1f;lineRenderer.endWidth = 0.1f;}
// 连接两个点void Update(){lineRenderer.SetPosition(0, origin.position);lineRenderer.SetPosition(1, destination.position);}
}

Action.cs

这里是读取上文识别并保存的人物动作数据并将每个子数据循环遍历到每个Sphere点,使特征点随着视频中人物动作运动

using System.Collections;
using System.Collections.Generic;
using System.Linq;
using UnityEngine;
using System.Threading;public class AnimationCode : MonoBehaviour
{public GameObject[] Body;List<string> lines;int counter = 0;void Start(){// 读取MotionFile.txt的动作数据文件lines = System.IO.File.ReadLines("Assets/MotionFile.txt").ToList();}void Update(){string[] points = lines[counter].Split(',');// 循环遍历到每一个Sphere点for (int i =0; i<=32;i++){float x = float.Parse(points[0 + (i * 3)]) / 100;float y = float.Parse(points[1 + (i * 3)]) / 100;float z = float.Parse(points[2 + (i * 3)]) / 300;Body[i].transform.localPosition = new Vector3(x, y, z);}counter += 1;if (counter == lines.Count) { counter = 0; }Thread.Sleep(30);}
}

最终实现效果

这里的视频与Unity运行有延时
在这里插入图片描述
Good Luck,Have Fun and Happy Coding!!!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/44089.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

动作捕捉软件系统有那么重要吗?

很多人会问&#xff0c;科技产品到底是硬件重要还是软件重要&#xff1f;这个真的不好回答&#xff0c;软件和硬件是一样的。有人说“硬件不够&#xff0c;软件来凑”&#xff0c;但是很多软件系统对硬件要求也很高&#xff0c;不然运行不起来。 比如动作捕捉相机&#xff0c;…

角色动画(四)——动作捕捉

在我们的动画的制作中&#xff0c;由于一部分细致的k帧如人物表情&#xff0c;手部的活动是需要细致k帧的&#xff0c;而一些大的持续长的人体动作k 起帧来比较麻烦&#xff0c;所以引入了我们需要使用动捕设备&#xff0c;诺亦腾惯性动捕设备。 使用动捕设备做角色动画能使人…

【Unity】超简单特效 - 子弹拖尾效果

前言&#xff1a; 游戏中往往少不了 “子弹 ”&#xff0c;子弹常常需要带着小尾巴&#xff0c;今天我们就来了解并简单在Unity中实现子弹拖尾效果。 初步实现&#xff1a; 第一步我们还是新建一个场景&#xff0c;这里我们选择2D与黑底摄像机方便观察。然后创建一个空对象作为…

浅谈低成本视频动作捕捉技术

原文链接 快手Y-tech 原创 最新技术干货分享 近年来&#xff0c;随着人工智能技术的发展和移动互联网的兴起&#xff0c;基于视频的低成本动作捕捉技术逐渐在游戏制作、虚拟主播、AR/VR等领域展露头角。低成本视频动捕技术大大拓展了动捕技术的受众范围&#xff0c;给普通用户…

动画合成技术中的动作捕捉

近几年来&#xff0c;三维动画合成技术被广泛地运用到游戏动画、电影特效、虚拟现实等数字媒体领域&#xff0c;已然成为计算机图形学领域的研究热点。该技术的实现依赖于动作捕捉技术&#xff0c;通过动作捕捉系统获取到运动物体的数据信息&#xff0c;再利用动作融合模型将捕…

steam/csgo搬砖技巧,有手就会的副业

"Steam 搬砖" 是指通过在 Steam 平台上购买游戏或道具&#xff0c;然后在其他平台上卖出以获取差价赚取利润的一种方式。放眼互联网行业&#xff0c;steam的收益率和稳定性都是非常客观的&#xff0c;可以说远超过许多项目。 应该如何掌握了正确搬砖的方法和技巧呢&a…

深度学习训练营实现minist手写数字识别

深度学习训练营 原文链接环境介绍前置工作设置GPU导入要使用的包进行归一化操作样本可视化调整图片格式 构建CNN网络编译模型模型训练预测操作 原文链接 &#x1f368; 本文为&#x1f517;365天深度学习训练营 中的学习记录博客&#x1f366; 参考文章&#xff1a;365天深度学…

365天深度学习训练营-第P1周:实现mnist手写数字识别

&#x1f368; 本文为&#x1f517;365天深度学习训练营 内部限免文章&#xff08;版权归 K同学啊 所有&#xff09;&#x1f366; 参考文章地址&#xff1a; &#x1f517;第P1周&#xff1a;实现mnist手写数字识别 | 365天深度学习训练营&#x1f356; 作者&#xff1a;K同学…

找工作交流群

群定义 源码圈找工作交流群&#xff0c;不同于原有的源码圈技术群&#xff0c;主要如下几点不同&#xff1a; 按照地区拆分。精力有限&#xff0c;暂时只有北上广深杭&#xff0c;拉人进群很累的&#xff01;&#xff01;&#xff01;探讨面试相关的问题。你懂的&#xff0c;面…

最近找工作的行情大家来交流交流

人在广州 4 年经验前端没有大厂经历&#xff0c;广州的外包岗位都不好进&#xff0c;现在开始往北京上海投简历了&#xff0c;恐怕面临转行 最近广州大厂是不是在裁员&#xff0c;这样下去更难找了 坐标上海外企&#xff0c;有岗位&#xff0c;投递简历也很多&#xff0c;但是大…

字节跳动、小米、吉利汽车、同程艺龙、沙特阿美等公司高管变动

中国 字节跳动确认&#xff0c;TikTok首席执行官凯文梅耶尔(Kevin Mayer)已辞职。TikTok现任总经理瓦妮莎帕帕斯(Vanessa Pappas)将成为临时首席执行官。凯文梅耶尔于今年6月1日正式加入字节跳动&#xff0c;担任字节跳动COO兼TikTok全球CEO&#xff0c;此前为迪士尼流媒体负责…

【舆情监控】社会化大数据应用平台TOOM舆情监测系统

TOOM舆情监测系统 1.全面性 整合智能爬虫信息采集技术及信息研判和情感分析技术&#xff0c;对网上海量信息自动抓取、自动分类聚类、主题检测、专题聚焦&#xff0c;实现用户的网络舆情监测需求&#xff0c;形成简报、报告、图表等分析结果&#xff0c;为客户全面掌握网民舆…

大数据舆情监测

大数据舆情监测是当前比较流行的一项监测&#xff0c;今天&#xff0c;大数据技术的应用范围日益广泛。大数据正在促进信息技术与各行业的深度融合&#xff0c;其中的重点应用范围之一是在商业领域的运用&#xff0c;接下来我们简单了解大数据舆情监测分析方案&#xff0c;以及…

TOOM舆情分析网络舆情监控平台研究现状

随着网络舆情迅速发展&#xff0c;国内的舆情监测行业也日渐完善&#xff0c;舆情监控平台在企业发展过程中发挥重要作用&#xff0c;但同样也是有问题存在的&#xff0c;接下来TOOM舆情分析网络舆情监控平台研究现状? 一、网络舆情监控平台 网络舆情监控平台是一种能够对网…

舆情监测平台TOOM

随着互联网快速发展&#xff0c;如今市场上网络舆情监测平台种类有很多&#xff0c;但对于消费者很难挑选一款合适的舆情监测平台&#xff0c;接下来我们从网络舆情监测平台有哪些&#xff0c;舆情监测平台实时方案&#xff0c;如何挑选合适舆情监测平台三个方面&#xff0c;让…

网络舆情监测TOOM

网络舆情工作是收集整理分析和报送网络舆情信息&#xff0c;通过网络舆情监测实时监测网络信息&#xff0c;为企业提供强有力的支持工作&#xff0c;有效防范网络舆情危机&#xff0c;全面监测网络舆情信息的需求不断增加&#xff0c;接下来我们简单了解网络舆情监测相关事宜。…

搞笑短视频如何撰写脚本?分享简单小技巧

搞笑短视频如何撰写脚本&#xff1f;分享简单小技巧 在正式拍摄短视频之前&#xff0c;我们往往还需要撰写好脚本才行&#xff0c;它可以帮助我们更加顺利的拍摄短视频&#xff0c;也能让我们在后期制作的时候更为方便。而且短视频脚本撰写其实也相当于是短视频拍摄前的准备工…

【剪辑必备】短视频全自动切片软件,带货直播切片必备脚本【永久脚本+技术教程】

全自动切片系统 多线程处理 2小时的视频只需要30秒切片完成 影视剪辑 解说 抖音看电影项目 带货直播切片必备 如果你不会做影视解说 那你可以配合抖音看电影项目一起做 这项目目前都是用的这种软件切片制作的 某大V直播带货的时候把直播间录制下来 然后马上切片发布作…

TamperMonkey脚本开发_无限制视频提取

背景 已购课程下载 ,在提取m3u8视频时,视频缓存使用ASE加密 以及VI偏移量等等,由于对这方面了解并不多.不知道如何提取到真实的地址 通过几种方式 嗅探 抓包 控制台监控 都无法获取到 IDM的视频下载由于法律原因无法下载该ts文件 但是这些ts都是分段的 就算下载了 我自己也无…

互动视频脚本 : 电子类的短视频

测试视频&#xff1a;电子实验理论与实践 01 测试互动段视频 这是一个测试互动段视频的测试片段。 一、P1-有趣的电子实验 这是一个测试短视频&#xff0c;主要是用来练习在B站搭建互动段视频的过程。 下面选取其中几段视频&#xff0c;组成三个视频分P片段&#xff0c;用于互…