当前位置: 首页 > news >正文

基于 RealSense D435相机实现手部姿态检测

基于 RealSense D435i相机进行手部姿态检测,其中采用 Mediapipe 进行手部检测,以下是详细步骤:

Mediapipe 是一个由 Google开发的开源框架,专门用于构建多媒体处理管道,特别是计算机视觉和机器学习任务。它提供了一系列预训练的模型和工具,可以用于实时处理图像和视频流。
主要功能:

  1. 手部检测:可以检测并跟踪手部的位置和姿态。
  2. 面部检测:识别面部特征点,用于表情识别和面部跟踪。
  3. 姿态估计:检测人体的关键点,用于运动分析和健身应用。
  4. 物体检测:实现物体检测和识别,适用于各种场景。
  5. 语音识别:支持音频处理和语音识别功能。

主要特点:

  • 高效性:能够在移动设备和边缘设备上运行,具备良好的性能。
  • 跨平台:支持多种操作系统和设备,包括 Android、iOS 和桌面环境。
  • 易于使用:提供简单的 API,方便开发者快速集成和使用。

使用场景:

Mediapipe 被广泛应用于增强现实、游戏开发、健康监测、安防监控等领域。
可以访问 Mediapipe的官方文档了解详细内容和使用示例。

一、手部姿态检测

步骤 1: 安装所需库

首先,请确保您已经安装了 Python 和 pip。然后,通过以下命令安装所需库:

pip install pyrealsense2 opencv-python mediapipe numpy

步骤 2: 设置 RealSense D435i

确保您的 RealSense D435 相机已正确连接,并安装了 RealSense SDK。
可以从 Intel 的 RealSense SDK 页面获取更多信息。

步骤 3: 演示代码

以下是一个整合了 RealSense D435i 和 Mediapipe 手部检测的 Python 脚本示例。具体的实现细节可能需要根据需求进行调整。

import cv2
import numpy as np
import pyrealsense2 as rs
import mediapipe as mp# 初始化 Mediapipe 手部模块
mp_hands = mp.solutions.hands
hands = mp_hands.Hands(static_image_mode=False, max_num_hands=2, min_detection_confidence=0.7)
mp_drawing = mp.solutions.drawing_utils# 配置 RealSense 流
pipeline = rs.pipeline()
config = rs.config()
config.enable_stream(rs.stream.depth, 640, 480, rs.format.z16, 30)
config.enable_stream(rs.stream.color, 640, 480, rs.format.bgr8, 30)# 启动流
pipeline.start(config)try:while True:# 等待获取新的帧frames = pipeline.wait_for_frames()color_frame = frames.get_color_frame()if not color_frame:continue# 将图像转换为 NumPy 数组image = np.asanyarray(color_frame.get_data())# 转换颜色空间image_rgb = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)image_rgb.flags.writeable = False# 使用 Mediapipe 检测手部results = hands.process(image_rgb)# 绘制手部标记image_rgb.flags.writeable = Trueif results.multi_hand_landmarks:for hand_landmarks in results.multi_hand_landmarks:mp_drawing.draw_landmarks(image_rgb, hand_landmarks, mp_hands.HAND_CONNECTIONS)# 在这里可以调用 Dex-Retargeting 算法,处理 hand_landmarks# dex_retargeting_function(hand_landmarks)# 显示结果cv2.imshow('Hand Tracking', image_rgb)if cv2.waitKey(1) & 0xFF == ord('q'):breakfinally:# 停止流pipeline.stop()cv2.destroyAllWindows()

步骤 4: 运行代码

将上述代码保存为 hand_tracking.py,然后在终端中运行:

python hand_tracking.py

在这里插入图片描述

二、记录/打印手指关节姿态

1、修改上述步骤 3的演示代码

# 定义手指的关键点索引范围
finger_indices = {"thumb": range(0, 5),"index": range(5, 9),"middle": range(9, 13),"ring": range(13, 17),"pinky": range(17, 21)
}try:while True:# 等待新帧frames = pipeline.wait_for_frames()color_frame = frames.get_color_frame()depth_frame = frames.get_depth_frame()if not color_frame or not depth_frame:continue# 转换为 numpy 数组img = cv2.cvtColor(np.asanyarray(color_frame.get_data()), cv2.COLOR_RGB2BGR)# 处理手部检测results = hands.process(cv2.cvtColor(img, cv2.COLOR_BGR2RGB))if results.multi_hand_landmarks:for hand_landmarks in results.multi_hand_landmarks:# 绘制手部关键点mp_drawing.draw_landmarks(img, hand_landmarks, mp_hands.HAND_CONNECTIONS)# 提取并打印每个手指的关键点空间姿态for finger, indices in finger_indices.items():keypoints = [(hand_landmarks.landmark[i].x, hand_landmarks.landmark[i].y, hand_landmarks.landmark[i].z) for i in indices]print(f"{finger} keypoints: {keypoints}")# 将手指关节姿态信息写入文件with open('hand_landmarks.txt', 'a') as f:f.write(f"{finger}: {keypoints}\n")

2、结果显示和分析

thumb: [(0.9687821865081787, 0.6210590600967407, 3.910763268777373e-07), (0.9071911573410034, 0.6109362840652466, -0.03194861114025116), (0.8624528646469116, 0.554160475730896, -0.04743020609021187), (0.8405251502990723, 0.49807286262512207, -0.06013686582446098), (0.8232850432395935, 0.4591226577758789, -0.0727970078587532)]
index: [(0.9149847626686096, 0.4301099479198456, -0.02639639377593994), (0.9145824909210205, 0.3440428376197815, -0.04998774453997612), (0.9162378907203674, 0.2871255874633789, -0.07186762243509293), (0.9200422763824463, 0.23657603561878204, -0.08782264590263367)]
middle: [(0.9503715634346008, 0.4127236604690552, -0.02441730722784996), (0.9643440246582031, 0.31598132848739624, -0.042417172342538834), (0.9733370542526245, 0.2534366846084595, -0.05844615772366524), (0.9829654097557068, 0.19702278077602386, -0.07070045918226242)]
ring: [(0.9794745445251465, 0.41305306553840637, -0.026965150609612465), (0.9923086762428284, 0.3207796812057495, -0.04289492592215538), (1.0009437799453735, 0.2619915306568146, -0.05437065660953522), (1.0100406408309937, 0.21127769351005554, -0.06270640343427658)]
pinky: [(1.0050956010818481, 0.42907220125198364, -0.033185433596372604), (1.018389105796814, 0.3570478856563568, -0.046027250587940216), (1.024712324142456, 0.31118300557136536, -0.0520443469285965), (1.030387043952942, 0.2696005702018738, -0.05643028765916824)]

上述代码打印的信息表示了拇指各个关节在三维空间中的位置坐标。具体来说,每个元组代表一个关节的 (x)、(y) 和 (z)坐标,解释如下:

  1. 拇指的关节列表

    • thumb:表示这是拇指的关键点信息。
    • 里面的每个元组均表示拇指某个关节的空间坐标。
  2. 坐标含义

    • 每个元组包含三个值:
      • (x): 表示该关节在图像宽度方向上的相对位置,值范围为 0 到 1。
      • (y): 表示该关节在图像高度方向上的相对位置,值范围为 0 到 1。
      • (z): 表示关节相对于手掌的深度值(通常是负值表示离相机更远,正值则表示更近)。

对于拇指的五个关节,上述打印的坐标信息分别是:

  1. 第一个关节(根部): ((0.9688, 0.6211, 0))
  2. 第二个关节: ((0.9072, 0.6109, -0.0319))
  3. 第三个关节: ((0.8625, 0.5542, -0.0474))
  4. 第四个关节: ((0.8405, 0.4981, -0.0601))
  5. 第五个关节(指尖): ((0.8233, 0.4591, -0.0728))
    这些数据可以用于分析拇指的姿态和运动,帮助实现手势识别或其他与手部交互相关的应用。

三、注意事项

  1. 确保 RealSense D435i 相机已连接并正常工作。
  2. 若有其他依赖项或运行环境问题,请根据错误提示进行调试。
  3. 调整 min_detection_confidence 和 min_tracking_confidence 以提高检测效果。

通过这些步骤,可以实现手部姿态检测,并将每个手指的关节空间姿态信息保存到文件中。

相关文章:

基于 RealSense D435相机实现手部姿态检测

基于 RealSense D435i相机进行手部姿态检测,其中采用 Mediapipe 进行手部检测,以下是详细步骤: Mediapipe 是一个由 Google开发的开源框架,专门用于构建多媒体处理管道,特别是计算机视觉和机器学习任务。它提供了一系列…...

linux 下mailx 的使用。发送短信

1. 安装 mailx yum install -y mailx 2.请求数字证书 163 邮箱 mkdir -p /root/.certs/ ####创建目录,用来存放证书 echo -n | openssl s_client -connect smtp.163.com:465 | sed -ne /-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p >…...

把网易云音乐的网页源码复制出来,粘贴在hbuilder中,运行于浏览器,为什么没有任何内容显示?

在将网易云音乐的网页源码复制并粘贴到HBuilder中后,如果运行于浏览器时没有任何内容显示,这可能是由于以下几个原因造成的: 1. 外部资源加载问题 ‌资源路径错误‌:网易云音乐的网页源码中可能包含大量的外部资源链接,如CSS、JavaScript文件、图片等。当这些资源链接的路…...

excel怎么转换json

如何将 Excel 转换为 JSON 方法一:使用内置函数 在 Excel 中选择要转换的数据范围。 转到“数据”选项卡 > “获取外部数据”组 > “自其他来源” > “JSON”。 在“从文件”对话框中,选择要保存 JSON 文件的位置,然后单击“导入”…...

二、认识大模型

认识大模型 什么是大模型?发展趋势AGI是不是泡沫大模型对比【时效】大模型特点大模型技术原理向量化除了向量化,大模型还具有特征提取特点 总结结语 什么是大模型? 大模型是大规模语言模型(Large Language Model)的简…...

2024年【电工(高级)】考试题及电工(高级)考试内容

题库来源:安全生产模拟考试一点通公众号小程序 电工(高级)考试题根据新电工(高级)考试大纲要求,安全生产模拟考试一点通将电工(高级)模拟考试试题进行汇编,组成一套电工…...

Unity中分辨率适配

在Unity中,分辨率适配问题是一个常见的挑战,尤其是在开发跨平台游戏时。为了确保你的游戏在不同设备上都能良好显示,以下是一些解决方案和最佳实践: 1. 使用Canvas Scaler 在UI的Canvas组件中,设置 UI Scale Mode …...

图像处理基础知识点简记

简单记录一下图像处理的基础知识点 一、取样 1、释义 图像的取样就是图像在空间上的离散化处理,即使空间上连续变化的图像离散化, 决定了图像的空间分辨率。 2、过程 简单描述一下图象取样的基本过程,首先用一个网格把待处理的图像覆盖,然后把每一小格上模拟图像的各个…...

微信小程序-使用vant组件库

文章目录 微信小程序-使用vant组件库概述构建npm构建步骤使用vant注册使用添加事件使用插槽 样式覆盖解除样式隔离使用外部样式类使用CSS变量 微信小程序-使用vant组件库 概述 Vant Weapp 是有赞前端团队开源的小程序 UI 组件库,基于微信小程序的自定义组件开发&a…...

Java【注解】

概述 ①Java的注解又称标注,它是程序的元数据,也是程序代码的标记,主要添加到程序代码上,作说明和解释。元数据是用来描述数据的一种数据。 ②Java中的注解可用于类、构造方法、成员变量、方法、参数等的声明中,注解…...

基于安卓开发大型体育场管理系统的设计与实现(源码+定制+讲解)

博主介绍: ✌我是阿龙,一名专注于Java技术领域的程序员,全网拥有10W粉丝。作为CSDN特邀作者、博客专家、新星计划导师,我在计算机毕业设计开发方面积累了丰富的经验。同时,我也是掘金、华为云、阿里云、InfoQ等平台…...

【Go】-Websocket的使用

目录 为什么需要websocket 使用场景 在线教育 视频弹幕 Web端即时通信方式 什么是web端即时通讯技术? 轮询 长轮询 长连接 SSE websocket 通信方式总结 Websocket介绍 协议升级 连接确认 数据帧 socket和websocket 常见状态码 gorilla/websocket实…...

怎么查看员工电脑安装了什么软件

1、使用专业监控软件:安装如金刚钻信息网站行为审计系统、WorkWin等专业的电脑监控软件。这些软件能够实时监控员工的电脑操作,包括安装的软件、运行的程序等。通过软件的管理端,您可以轻松查看员工电脑上安装的所有软件,并可以设…...

面积开运算bwareaopen

一个非常有用的二值图像形态学后处理算法,建立在连通分量分析的基础之上。 bwareaopen 从二值图像中删除小对象 语法 BW2 bwareaopen(BW,P) BW2 bwareaopen(BW,P,conn) 说明 BW2 bwareaopen(BW,P) 从二值图像 BW 中删除少于 P 个像素的所有连通分量&#x…...

TortoiseGit 下载和安装

下载 1,下载路径 Download – TortoiseGit – Windows Shell Interface to Git 2,选择windows64的, 3,下载完成后 安装 1,双击运行,点击next 2,点击next 3,点击next 4&#xff0…...

0x09 瑞友 应用虚拟化系统 GetBSAppUrl SQL注入漏洞 - 复现

参考:瑞友 应用虚拟化系统 GetBSAppUrl SQL注入漏洞 | PeiQi文库 (wgpsec.org) 漏洞描述 瑞友应用虚拟化系统中的 GetBSAppUrl 方法存在 SQL注入漏洞。由于请求参数未经过滤,攻击者可以利用此漏洞执行恶意SQL查询,从而获取数据库中的敏感信息。 漏洞影响 受影响版本:瑞友…...

C++(Qt)软件调试---内存调试器Dr.Memory(21)

C(Qt)软件调试—内存调试器Dr. Memory(21) 文章目录 C(Qt)软件调试---内存调试器Dr. Memory(21)[toc]1、概述🐜2、安装Dr.Memory🪲3、命令行使用Dr.Memory🦗4、Qt Creator集成使用Dr.Memory&…...

Python3自带HTTP服务:轻松开启与后台管理

Python3自带有http服务,可以在服务器,也可以在本地启动,并运行一些常用的网页程序。比如:我们可以把streamlit框架编写的网页放到服务器上,开启http服务,就可以通过网页来调用这个pythont程序了&#xff0c…...

传统行业选择企业大文件传输系统需要注意哪些?

数字化转型的洪流中,传统行业正经历着前所未有的挑战与机遇。随着数据量的激增,企业大文件传输系统的选型成为了一个至关重要的议题。今天小编将深入探讨传统行业在这一过程中的考量因素,并以镭速企业大文件传输系统为例,展示其如…...

如何配置路由器支持UDP

一、UDP协议简介 UDP是一种传输层协议,与TCP(传输控制协议)不同,它不需要建立连接,因此传输速度较快。由于UDP不需要确认数据包的接收状态,它适用于不需要严格数据完整性但需要低延迟的场景。 常见的UDP应…...

网络六边形受到攻击

大家读完觉得有帮助记得关注和点赞!!! 抽象 现代智能交通系统 (ITS) 的一个关键要求是能够以安全、可靠和匿名的方式从互联车辆和移动设备收集地理参考数据。Nexagon 协议建立在 IETF 定位器/ID 分离协议 (…...

Linux链表操作全解析

Linux C语言链表深度解析与实战技巧 一、链表基础概念与内核链表优势1.1 为什么使用链表?1.2 Linux 内核链表与用户态链表的区别 二、内核链表结构与宏解析常用宏/函数 三、内核链表的优点四、用户态链表示例五、双向循环链表在内核中的实现优势5.1 插入效率5.2 安全…...

Neo4j 集群管理:原理、技术与最佳实践深度解析

Neo4j 的集群技术是其企业级高可用性、可扩展性和容错能力的核心。通过深入分析官方文档,本文将系统阐述其集群管理的核心原理、关键技术、实用技巧和行业最佳实践。 Neo4j 的 Causal Clustering 架构提供了一个强大而灵活的基石,用于构建高可用、可扩展且一致的图数据库服务…...

06 Deep learning神经网络编程基础 激活函数 --吴恩达

深度学习激活函数详解 一、核心作用 引入非线性:使神经网络可学习复杂模式控制输出范围:如Sigmoid将输出限制在(0,1)梯度传递:影响反向传播的稳定性二、常见类型及数学表达 Sigmoid σ ( x ) = 1 1 +...

C++使用 new 来创建动态数组

问题: 不能使用变量定义数组大小 原因: 这是因为数组在内存中是连续存储的,编译器需要在编译阶段就确定数组的大小,以便正确地分配内存空间。如果允许使用变量来定义数组的大小,那么编译器就无法在编译时确定数组的大…...

Python基于历史模拟方法实现投资组合风险管理的VaR与ES模型项目实战

说明:这是一个机器学习实战项目(附带数据代码文档),如需数据代码文档可以直接到文章最后关注获取。 1.项目背景 在金融市场日益复杂和波动加剧的背景下,风险管理成为金融机构和个人投资者关注的核心议题之一。VaR&…...

git: early EOF

macOS报错: Initialized empty Git repository in /usr/local/Homebrew/Library/Taps/homebrew/homebrew-core/.git/ remote: Enumerating objects: 2691797, done. remote: Counting objects: 100% (1760/1760), done. remote: Compressing objects: 100% (636/636…...

Python 高效图像帧提取与视频编码:实战指南

Python 高效图像帧提取与视频编码:实战指南 在音视频处理领域,图像帧提取与视频编码是基础但极具挑战性的任务。Python 结合强大的第三方库(如 OpenCV、FFmpeg、PyAV),可以高效处理视频流,实现快速帧提取、压缩编码等关键功能。本文将深入介绍如何优化这些流程,提高处理…...

0x-3-Oracle 23 ai-sqlcl 25.1 集成安装-配置和优化

是不是受够了安装了oracle database之后sqlplus的简陋,无法删除无法上下翻页的苦恼。 可以安装readline和rlwrap插件的话,配置.bahs_profile后也能解决上下翻页这些,但是很多生产环境无法安装rpm包。 oracle提供了sqlcl免费许可&#xff0c…...

6️⃣Go 语言中的哈希、加密与序列化:通往区块链世界的钥匙

Go 语言中的哈希、加密与序列化:通往区块链世界的钥匙 一、前言:离区块链还有多远? 区块链听起来可能遥不可及,似乎是只有密码学专家和资深工程师才能涉足的领域。但事实上,构建一个区块链的核心并不复杂,尤其当你已经掌握了一门系统编程语言,比如 Go。 要真正理解区…...