【基于Mediapipe与Unity的人体姿态捕捉系统】

基于Mediapipe与Unity的人体姿态捕捉系统

  • 1. 工程整体介绍
  • 2. 基于Mediapipe的人体姿态估计
    • 2.1 环境搭建
    • 2.2 代码片段
    • 2.3 结果展示
    • 2.4 结果分析
    • 2.5 本章总结
  • 3. 基于Unity的人体姿态展示
    • 3.1 Unity 人体骨骼动画
    • 3.2 Mediapipe坐标到Unity的映射
  • 4. 从Mediapipe到Unity的数据传递
    • 4.1 使用Python发送数据
    • 4.2 使用C#接收数据
  • 5. 成果展示
  • 6. 后续展望
  • 7.联系方式

1. 工程整体介绍

整个工程主要分成三部分:1.基于Mediapipe的人体姿态估计;2.基于Unity的人体姿态展示;3.从Mediapipe到Unity的通讯,即Mediapipe估计的姿态如何实时传递给Unity。

2. 基于Mediapipe的人体姿态估计

姿态估计部分,使用opencv进行人体采集,然后调用Mediapipe对读取的每一帧图像进行姿态估计。

2.1 环境搭建

版本要求:python >= 3.7

 pip install mediapipepip install opencv-pythonpip install opencv-contrib-python

参考官方文档:
链接: https://google.github.io/mediapipe/solutions/pose.

2.2 代码片段

博主假设你已经掌握了最基础的python语法

import cv2
import mediapipe as mp
import numpy as npdef Pose_Images():#使用算法包进行姿态估计时设置的参数mp_pose = mp.solutions.posewith mp_pose.Pose(min_detection_confidence=0.5,min_tracking_confidence=0.8) as pose:#打开摄像头cap = cv2.VideoCapture(0)while(True):#读取摄像头图像hx, image = cap.read() if hx is False:print('read video error')exit(0)image.flags.writeable = False# Convert the BGR image to RGB before processing.# 姿态估计results = pose.process(cv2.cvtColor(image, cv2.COLOR_BGR2RGB))print(results.pose_landmarks)cv2.imshow('image', image)if cv2.waitKey(10) & 0xFF == ord('q'):       # 按q退出breakcap.release()if __name__ == '__main__':Pose_Images()

2.3 结果展示

在你的控制台可以看到一个一个点的输出,如下,那么姿态估计就完成了第一步。

landmark {x: 0.7439931035041809y: 3.0562074184417725z: -0.25115278363227844visibility: 0.00022187501599546522
}
landmark {x: 0.5690034627914429y: 3.0262765884399414z: -0.44416818022727966visibility: 0.00034665243583731353
}
......

2.4 结果分析

下面我们来分析一下这些点的坐标到底代表了什么。
每一张图片都会产生一组坐标,每组坐标包含32个坐标点。
在这里插入图片描述
每个地标包括以下内容:

  • x和y:通过图像宽度和高度分别归一化为[0.0, 1.0],通俗点说是,真实的x,y坐标,分别除以图像的宽度跟高度。
  • z: 代表坐标的深度,臀部中点的深度为原点,数值越小,地标就越靠近摄像机。z的大小使用与x大致相同的比例。
  • visibility:一个[0.0, 1.0]的值,表示坐标在图像中可见(存在且不被遮挡)的可能性。

2.5 本章总结

我们通过使用opencv库,打开摄像头采集照片,将照片传递给Mediapipe进行姿态坐标估计,后续我们将坐标放到Unity中进行展示就可以了。

3. 基于Unity的人体姿态展示

博主假设你已经掌握了unity的基础知识。

3.1 Unity 人体骨骼动画

我们可以从Unity商店中或者在此网站https://www.mixamo.com选择任意一个3D的人物模型导入到工程中。

3.2 Mediapipe坐标到Unity的映射

具体转换细节会专门写一篇文件来解释,数据是驱动骨骼运动的。整体的实现参考了开源的解决方案。
参考:
https://github.com/digital-standard/ThreeDPoseTracker
VNectModel.cs 文件实现了从预测坐标到Unity骨骼坐标的转换。

4. 从Mediapipe到Unity的数据传递

姿态预测跟unity的姿态展示毕竟属于不同的进程,对于进程之间的通讯有不同的实现方式。本文选择网络通讯中的UDP通讯,因为UDP通讯具有延迟小的特点,同时我们对于数据的丢失存在一定的容忍性。

4.1 使用Python发送数据

#代码片段示例:
json_data = json.dumps(pose_data)
udp_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
dest_addr = ('127.0.0.1', 5052)
text = json_data.encode('utf-8')
udp_socket.sendto(text, dest_addr)

4.2 使用C#接收数据

此代码片段借鉴了此博主的文章(如有侵权,联系删除)。
Link

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using System;
using System.Text;
using System.Net;
using System.Net.Sockets;
using System.Threading;public class UDPRecive : MonoBehaviour
{Thread receiveThread;UdpClient client; public int port = 5052;public bool startRecieving = true;public string data;// Start is called before the first frame updatevoid Start(){receiveThread = new Thread(new ThreadStart(ReceiveData));receiveThread.IsBackground = true;receiveThread.Start();}// Update is called once per framevoid Update(){}private void ReceiveData(){client = new UdpClient(port);while (startRecieving){Debug.Log("startRecieving");try{IPEndPoint anyIP = new IPEndPoint(IPAddress.Any, 0);byte[] dataByte = client.Receive(ref anyIP);data = Encoding.UTF8.GetString(dataByte);Debug.Log(data);}catch (Exception err){print(err.ToString());}}}
}

5. 成果展示

从姿态预测到3D展示就完成了,那么我们来看一下效果吧。

11月25日

6. 后续展望

后续会根据需求,出一个对全部代码的讲解,可以帮助读者一步步实现自己的工程。
欢迎提出意见或建议。

7.联系方式

欢迎私信加我。

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

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

相关文章

Hugging Face 模型下载方法一览。

huggingface可谓是深度学习里 最重要的社区之一了。 里面有无数个我们需要的模型和代码。近年来,知名的模型都会在huggingFace里先放一份代码和模型参数。 我们要做的就是下载这些模型。 以Bert为例。 bert-base-chinese at main 这是bert的网址。 截图可以看到有…

如何用3D软件做好人头建模?

一般头部建模有两种方法 1、用box调整出头部轮廓然后细调整; 2、用面片挤压,逐步挤压出整个面部,这里用第一种方法,直观感觉较快 形体初始准备阶段 1、 创建一个长方体 2、 将长方体改为长、宽、高都相同的正方体 3、 将正方…

3D软件开发工具HOOPS全套产品开发介绍 | HOOPS Exchange、HOOPS Communicator

一、概述HOOPS产品主要应用于3D模型的转换、显示、处理和发布,包括HOOPS Exchange、HOOPS Communicator、HOOPS Visualize和HOOPS Publish等4种产品,其中: HOOPS Exchange主要应用于模型的文件格式转换。HOOPS Communicator主要应用于WEB端模…

淘宝APP用户行为数据分析案例(附python代码及注释)

淘宝APP用户行为数据分析案例 一.分析背景与目的 1.1背景与数据限制 电商平台的最核心的功能就是为买卖双方提供高效和体验良好的交易服务。得益于算法技术的发展,淘宝APP给买方提供了搜索、推荐及广告等系统和功能,使用户能高效地触达感兴…

【Python爬虫+数据分析】采集电商平台数据信息,并做可视化演示

文章目录 前言一、准备工作二、分析目标网站1.商品信息 三、编写爬虫程序五、总结 前言 随着电商平台的兴起,越来越多的人开始在网上购物。而对于电商平台来说,商品信息、价格、评论等数据是非常重要的。因此,抓取电商平台的商品信息、价格、…

利用Python进行词频统计并生成词云——以京东商城iphone13购物评论为例

本文介绍一种快速生成关键词-词频统计-词云生成的办法,作为Python数据分析初级技能,除基本运行环境外无需其他软件或工具,且流程搭建成功后可重复利用,可极大提升相似事务的处理效率。 一、操作环境 1.1 搭建Python运行环境&#…

Python爬虫+可视化分析技术实现招聘网站岗位数据抓取与分析推荐系统

程序主要采用Python 爬虫flask框架htmljavascript实现岗位推荐分析可视化系统,实现工作岗位的实时发现,推荐检索,快速更新以及工作类型的区域分布效果,关键词占比分析等。 程序模块实现 工作范围分布 岗位区域分布 岗位技术情况…

API接口调用,获取淘宝天猫,拼多多,1688等平台商品详情,python采集爬虫数据

Python技术 爬虫(又称为网页蜘蛛,网络机器人,在 FOAF 社区中间,更经常的称为网页追逐者);它是一种按照一定的规则,自动地抓取网络信息的程序或者脚本。 如果我们把互联网比作一张大的蜘蛛网&a…

使用python爬取BOSS直聘岗位数据并做可视化(Boss直聘对网页做了一些修改,现在的代码已经不能用了)

使用python爬取BOSS直聘岗位数据并做可视化 结果展示首页岗位信息岗位详情薪资表学历需求公司排名岗位关键词福利关键词 代码展示爬虫代码一、导入库二、爬取数据1、爬取数据代码展示2、通过selenium打开浏览器(1)打开网页(2)找到…

用Python对淘宝用户行为数据的分析

目录 项目前言 一、分析目的 二、数据获取与理解 1.数据来源 2.理解数据 三、具体做法 1.导入并清洗数据 3.1.1.把时间戳改为datetime类型 3.1.2.查看是否存在重复的行数据 3.1.3.查看列中是否存在缺失数据 2.用户维度 3.2.1.一个月内每天pv、uv的变化 ​3.2.2.日A…

小白也可以开发闲鱼自动化工具(自动找爆款)

在闲鱼上,我们的课程里面教给大家,如何找爆款,主要是看数据,分析,那么这个分析过程,能否自动化下? 事实是可以的。这个是这几天写的一个,自动化分析电脑这个词下面的一些爆款&#x…

基于Python+网络爬虫的兼职招聘就业信息数据可视化分析

🔥作者:雨晨源码🔥 💖简介:java、微信小程序、安卓;定制开发,远程调试 代码讲解,文档指导,ppt制作💖 精彩专栏推荐订阅:在下方专栏👇&…

Python抓取电商平台数据 / 采集商品评论 / 可视化展示 词云图...

前言 大家早好、午好、晚好吖 ❤ ~ 我给大家准备了一些资料,包括: 2022最新Python视频教程、Python电子书10个G (涵盖基础、爬虫、数据分析、web开发、机器学习、人工智能、面试题)、Python学习路线图等等 直接在文末名片自取即可&#x…

chatgpt赋能python:Python简单数据采集教程:提高SEO排名的必要工具

Python简单数据采集教程:提高SEO排名的必要工具 在当前数字化时代下,数据已经成为商业流量和营销策略中至关重要的交易资源。因此,数据采集成为了提高SEO排名的必要手段之一。现在,Python由于其强大的数据处理能力被广泛应用于数…

利用 Python 爬虫采集 1688商品详情关键词数据-API

要利用 Python 爬虫采集 1688 商品详情数据,需要先了解 1688 网站的页面结构和数据请求方式。一般使用 requests 库请求网站的数据,使用 BeautifulSoup 库解析网页中的数据。 以下是一个简单的 Python 爬虫采集 1688 商品详情数据的示例代码&#xff1a…

英特尔淘汰迷你电脑,宣布放弃 NUC 业务!

整理 | 屠敏 出品 | CSDN(ID:CSDNnews) 相比造芯这件事,也许有很多人不知道全球知名半导体公司英特尔还在造电脑。 只是有些遗憾的是,据外媒 ServetheHome 报道,英特尔已经开始通知其生态系统的合作伙伴们&…

Web版和客户端哪种SQL工具更好?ChatGPT有话要说

2023年年初公司发布了一款Web版SQL工具,短期内就赢得了众多用户的喜爱和下载。不过,也有SQL用户在评论区中提出自己的观点,认为Web版工具都不可靠,甚至看见Web版工具就劝返… … 工具Web化逐渐成为一种趋势,比如&…

自动批量日文翻译工具,免费日文等小语种翻译互译工具

日文翻译工具具有日文、俄语、韩语、德语等多国小语种翻译,支持日文整篇文章翻译成中文等多种语种,长篇文章翻译后保留原文格式段落,并通过批量内容编辑处理,实现翻译后的文章敏感词删除、插图图片和同义词替换实现本地化翻译。 日…

谁说首富不懂技术!马斯克晒出Twitter2.0架构图

推荐阅读: 《重磅:Spring Boot 3.0 发布!》 《职场霸凌、潜规则,已经这么猖獗了吗。。》 出品 | OSC开源社区(ID:oschina2013) 近日,马斯克前往 Twitter 总部大楼和工程师团队进行了 code revie…

马斯克在中国的44小时!行程、会面与表态,释放出什么信号?

时隔3年,“自带流量”的美国特斯拉首席执行官马斯克再次到访中国,从公布的信息来看,可谓是行程满满。在中美关系似乎春寒料峭之际,马斯克的来华及表态极具象征意义。 马斯克:反对“脱钩断链” 5月30日下午15时30分左右…