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

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

相关文章

PHP抓取网站图片脚本

方法一: <?phpheader("Content-type:image/jpeg"); class download_image{function read_url($str) { $file=fopen($str,"r");$result = ''; while(!feof($file)) { $result.=fgets($file,9999); } fclose($file); re

数据集 3DPW-开源户外三维人体建模-姿态估计-人体关键点-人体mesh建模 >> DataBall

3DPW 3DPW-开源户外三维人体建模数据集-姿态估计-人体关键点-人体mesh建模 开源户外三维人体数据集 @inproceedings{vonMarcard2018, title = {Recovering Accurate 3D Human Pose in The Wild Using IMUs and a Moving Camera}, author = {von Marc

用Java抓取CSDN主页上的图片

一,步骤一:获取网页源码 1,定义要爬取的页面的URL对象 //定义即将访问的链接String url="http://www.csdn.net";//获取CSDN的URL对象URL realURL = new URL(url); 2,获得这个链接的一个连接对象 URLConnection connection = realURL.openConnection();

【go语言爬虫】go语言高性能抓取手机号码归属地、所属运营商

一、需求分析 根据手机号码获取手机号码的归属地和所属运营商类型 类似:四川 18683339513 乐山 614000 0833 中国联通 二、运行效果 三、实现源代码 package main//网址:https://github.com/M2shad0w/phone-go//安装包:go get github.com/M2shad0w/phone-goimport ("fmt

【python爬虫】网贷天眼平台表格数据抓取

一、需求分析 抓取url: http://www.p2peye.com/shuju/ptsj/ 抓取字段: 昨日数据 排序 平台名称 成交额 综合利率 投资人 借款周期 借款人 满标速度 累计贷款余额 资金净流入 二、python爬虫源代码 # -*- coding:utf-8*-import sysreload(sys)sys.setdefaultencoding('utf-

【R语言爬虫】网贷天眼数据平台表格数据抓取2

一、需求分析 抓取url: http://www.p2peye.com/shuju/ptsj/ 昨日数据: 字段:排序 平台名称 成交额 综合利率 投资人 借款周期 借款人 满标速度 累计贷款余额 资金净流入 二、rvest爬虫实现源代码 rm(list=ls())gc()options(scipen = 200)library('rvest')timestart<-Sys

【python 百度指数抓取】python 模拟登陆百度指数,图像识别百度指数

一、算法思想 目的奔着去抓取百度指数的搜索指数,搜索指数的爬虫不像是其他爬虫,难度系数很高,分析之后发现是图片,坑爹的狠,想了下,由于之前做过身份证号码识别,验证码识别之类,豁然开朗,不就是图像识别麽,图像识别我不怕你,于是就有了思路,果然有异曲同工之妙,最后成功被我攻破了,大致思路如下: 1、首先得模拟登陆百度账号(用selenium+PhantomJS模拟登陆百度,获取cookie) 2

python scrapy爬虫框架 抓取BOSS直聘平台 数据可视化统计分析

使用python scrapy实现BOSS直聘数据抓取分析 前言   随着金秋九月的悄然而至,我们迎来了业界俗称的“金九银十”跳槽黄金季,周围的朋友圈中弥漫着探索新机遇的热烈氛围。然而,作为深耕技术领域的程序员群体,我们往往沉浸在代码的浩瀚宇宙中,享受着解决技术难题的乐趣,却也不经意间与职场外部的风云变幻保持了一定的距离,对行业动态或许仅有一鳞半爪的了解,甚至偶有盲区。   但正是这份对技术

SpringCloud之Sleuth(Micrometer)+ZipKin分布式链路追踪

(学习笔记) 1、分布式链路追踪概述 问题:在微服务框架中,一个由客户端发起的请求在后端系统中会经过多个不同的的服务节点调用来协同产生最后的请求结果,每一个前段请求都会形成一条复杂的分布式服务调用链路,链路中的任何一环出现高延时或错误都会引起整个请求最后的失败。 在分布式与微服务场景下,我们需要解决如下问题:   在大规模分布式与微服务集群下,如何实时观测系统的整体调用链路情况。

钓鱼邮件真相追踪:XDR见招拆招!

钓鱼陷阱,财富“蒸发” 如果一家规模5000人、业务遍布全球的企业之中有一位员工不小心点进了一个钓鱼邮件,会发生什么……?终端失陷?数据泄露?失去客户信任? 最让人破碎的当然是……核心资产泄露,钱没了!! 人有失手,"鱼"有逃命 某大型零售企业财务部门小张收到一封看似来自公司财务部的邮件,由于内容与其实际工作情况相符,小张打开了邮件中的附件,并点击了附件里的下载链接