手部关键点抓取及手部追踪

2024-03-16 17:10
文章标签 抓取 追踪 关键点 手部

本文主要是介绍手部关键点抓取及手部追踪,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

当我们可以追踪手部关键点的时候我们就可以进行一些手语的识别或者手势含义方面的应用,本文讲采用opencv以及mediapipe两个模组对首部关键点进行编码。

 

这是我们要采集的21个点。当我们把这21个点找出来之后,我们就可以大概知道手部动作了。

首先引进这两个个模组

 

然后我们需要引入我们的摄像头,用opencv来调取。然后接下来就要用到mediapipe这个模组,其中就有手部关键点的模组然后我们调用这个方程进行使用。

 

调用mediapipe的手部模组

其中要注意的一点是我们需要的是RGB的图片,而opencv读取到的都是BGR的图片所以我们需将它转换。

 

后面就是手部模组函数的应用:其中我们需要用到这个函数,它能帮我们读取手上那21点的坐标。然后我们要做的就是将这21个点的坐标画到手上面去。

 首先先调用mediapipe中的函数:

 把它放进if ret里面进行引用

 然后便可以讲手上的21点进行标注,后面就需要把这21个点链接起来即可。

只需要在mpDraw.Draw_landmarks函数里面加入第三个参数mp.HANDS_CONNECTIONS

然后再运行一次就可以将手上的21点链接起来了。如果想要更改点的样式和线的样式,我们可以在mpDraw.Draw_landmarks函数里面加入第四或第五个参数。

然后我们需要知道这21个点的坐标才可以进行运用,比如通过这21个点的坐标分析每跟手指之间的角度来进行运算分析此时的手势是什么意思。所以我们要打印出这21个点的坐标。

我们可以再套入一个for循环来打印这21个点的坐标。因为我们要知道这个坐标对应的是第几个点,所以我们可以利用enumerate函数。

 但此时我们输出的并不是它的坐标而是它对应图像长宽高的比例。我们需要进行以下的输出。

 我们也可以在图像中标注出点对应的数字。

如果要知道跟踪手掌刷新几次我们可以添加time模组进行应用。

完全的代码如下:

import cv2
import mediapipe as mp
import time

cap = cv2.VideoCapture(0)
mpHands = mp.solutions.hands
hands = mpHands.Hands() #使用meidapipe的手部追踪模型
mpDraw = mp.solutions.drawing_utils #将点坐标画在手上的函数
handLmsStyle = mpDraw.DrawingSpec(color=(0,0,255), thickness=5)#调整点的样式
handConStyle = mpDraw.DrawingSpec(color=(0,255,0), thickness=10)#线的样式
pTime = 0
cTime = 0

while True:
    ret, img = cap.read()
    if ret:
        imgRGB = cv2.cvtColor(img,cv2.COLOR_BGR2RGB) #bgr的图片转化成rgb
        result = hands.process(imgRGB)
        #print(result.multi_hand_landmarks)#侦测手并输出手的坐标
        imgHeight = img.shape[0]
        imgWidth = img.shape[1]

        if result.multi_hand_landmarks:
            for handLms in result.multi_hand_landmarks:
                mpDraw.draw_landmarks(img,handLms,mpHands.HAND_CONNECTIONS,handLmsStyle,handConStyle)
                for i, lm in enumerate(handLms.landmark):
                    xPos =int(lm.x * imgWidth)
                    yPos =int(lm.y * imgHeight)
                    cv2.putText(img , str(i),(xPos-25,yPos+5),cv2.FONT_HERSHEY_SIMPLEX,0.4,(0,0,255),2)#给点编号

                    print(i, xPos, yPos)

        #算手部追踪的帧率
        cTime = time.time()
        fps   = 1/(cTime-pTime)
        pTime = cTime
        cv2.putText(img, f'fps  : {int(fps)}',(30,50),cv2.FONT_HERSHEY_SIMPLEX,1,(255,0,0),3)


        cv2.imshow('img',img)
        if cv2.waitKey(1) == ord('q'):#q关闭运行
            Break

这篇关于手部关键点抓取及手部追踪的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/816147

相关文章

使用Jsoup抓取数据

问题 最近公司的市场部分布了一个问题,到一个网站截取一下医院的数据。刚好我也被安排做。后来,我发现为何不用脚本去抓取呢? 抓取的数据如下: Jsoup的使用实战代码 结构 Created with Raphaël 2.1.0 开始 创建线程池 jsoup读取网页 解析Element 写入sqlite 结束

转:搜索引擎如何抓取互联网页面

先说说搜索引擎的原理吧。搜索引擎是把互联网上的网页内容存在自己的服务器上,当用户搜索某个词的时候,搜索引擎就会在自己的服务器上找相关的内容,这样就是说,只有保存在搜索引擎服务器上的网页才会被搜索到。哪些网页才能被保存到搜索引擎的服务器上呢?只有搜索引擎的网页抓取程序抓到的网页才会保存到搜索引擎的服务器上,这个网页抓取程序就是搜索引擎的蜘蛛.整个过程分为爬行和抓取。   一、 蜘蛛   搜索引擎用

fiddler抓包——抓取App上https请求

配置 https的请求需要安装证书(http的话不用安装) 1、fiddler配置 2、手机浏览器输入http://你的电脑的ipv4地址:8888/ 例如:http://192.168.1.101:8888/,打开看的以下页面,点击:FiddlerRoot certificate下载证书。这样就安装了证书了,可以抓HTTPS的包的。  要是打不开这个地址,先在电脑上浏览器输入这

使用CURL构建爬虫,抓取百度百科内容

实现这个功能的步骤: 1、首先打开百度百科,在搜索框输入“php”关键词,得到搜索列表,一般都是10条; 2、然后使用火狐的Firebug分析百度列表的内容组成,主要是html标签,发现去向百科内容的链接url的格式都是http://baike.baidu.com/view/5721060.htm,于是使用正则匹配链接,得到10条链接; 3、之后把链接交由curl()批处理函数(自定

告别手抖尴尬!教你轻松缓解手部震颤的小秘诀!

在我们的日常生活中,手抖这个现象可能并不罕见。不论是因为紧张、疲劳还是某些健康问题,手抖都会给我们的生活带来诸多不便。今天,就让我们一起探讨如何缓解手部震颤,让你告别手抖的尴尬! 一、手抖的成因及影响 手抖,医学上称为震颤,是指手部不自主地、有节律地颤动。手抖的成因多种多样,包括生理性手抖(如紧张、疲劳、寒冷等)和病理性手抖(如帕金森病、甲状腺功能亢进等)。手抖不仅影响我们的日常生活,如写

Charles抓取安卓应用https包演示

一、准备软件 夜神安卓模拟器 (yeshen.com) Charles (charlesproxy.com) 二、配置抓包 2.1 Charles安装PC根证书 记住这里的ip+端口 三、安卓模拟器配置 3.1 配置安卓客户端网络代理 填写上文的ip+端口,保存 3.2 安装根证书 3.2.1 导出根证书 linux主机执行 openssl x50

OpenCV轮廓、多边形逼近、关键点、周长和面积、边界框、矩、轮廓树、凹凸包、几何直方图、匹配

1.轮廓的多边形逼近  2.轮廓的关键点  3.轮廓的周长和面积  4.轮廓的边界框  5.轮廓的矩  6.轮廓的轮廓树   7.轮廓的凸包和凸缺陷  8.轮廓的成对几何直方图   9.轮廓的匹配    轮廓的特性: 1.轮廓的多边形逼近     轮廓的多边形逼近指的是:使用多边形来近似表示一个轮廓。     多边形逼近的目的是为了减少轮

Reddit、Discord等社媒网站抓取总结:如何更高效实现网页抓取?

有效的网络抓取需要采取战略方法来克服挑战并确保最佳数据提取。让我们深入研究一些关键实践,这些实践将使您能够掌握复杂的网络抓取。 一、了解 Web 抓取检测 在深入探讨最佳实践之前,让我们先了解一下网站如何识别和抵御网络爬虫。了解您在这一过程中可能遇到的挑战至关重要。 1. 速率限制:一种控制访问的策略 速率限制是网站对抗爬虫的常用策略。本质上,它限制了用户(或爬虫)在指定时间范围内从单

springCloudAlibaba之链路追踪组件---skywalking

skywalking skywalking skywalking 介绍 对于一个大型的几十个、几百个微服务构成的微服务架构系统,通常会遇到下面一些问题,比如:如何串联整个调用链路、快速定位问题?如何明确各个微服务之间的依赖关系?如何进行各个微服务接口的性能分析?如何跟踪整个业务流程的通用处理程序?

一步步学习SPD2010--第三章节--处理列表和库(19)----关键点

1. SP Foundation和SP Server提供了许多内置列表定义,你可以用来作为使用SPD创建列表或库的基础 2. 用SPD,可以创建/修改列表栏、网站列、内容类型和创建列表模板。但不能创建或修改列表项或与文档相关的元数据。 3. 栏目,也叫字段,决定了列表或库能储存的数据类型。每个栏目都与栏目数据类型相关联。 4. 使用XSLT列表视图(XLV)Web部件来显示列表和库的内容