opencv之(多)手势识别

这篇具有很好参考价值的文章主要介绍了opencv之(多)手势识别。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

一、开发环境

二、手势识别的概述

三、Hand Landmark模型

四、工具和依赖库安装

4.1 python下载及安装:

4.2 pycharm 安装

五、多手势识别源码

5.1 源码使用注意事项

5.2 运行效果展示


一、开发环境

1、pycharm

2、python3.9

3、opencv-python

4、mdiapipe-0.8.3

二、手势识别的概述

感知手的形状和运动的能力是改善各种技术领域和平台的用户体验的重要组成部分。例如,它可以形成手语理解和手势控制的基础,还可以在增强现实中实现数字内容和信息在物理世界之上的叠加。
MediaPipe Hands是一款高保真的手和手指跟踪解决方案。它使用机器学习(ML)从单个帧中推断出21个手的3D地标。当前最先进的方法主要依赖于强大的桌面环境进行推理,并且在移动电话上实现了实时性能,甚至可以扩展到多手。

三、Hand Landmark模型

在整个图像上进行手掌检测之后,Hand Landmark模型通过回归对检测到的手区域内的21个3D手关节坐标进行精确的关键点定位,即直接坐标预测。
为了获得训练的真实数据,使用了21个3D坐标手动标注了约30K幅真实的图像,如下所示(如果它存在于对应的坐标中,从图像中获取Z值)。为了更好地覆盖手部姿势,并提供对手部几何特性的额外监督,我们还可以在各种背景上渲染高质量的合成手部模型,并将其映射到相应的3D坐标。

opencv之(多)手势识别

 opencv之(多)手势识别

四、工具和依赖库安装

4.1 python下载及安装:

  • 官网下载(现在的电脑基本都支持64bit):

opencv之(多)手势识别

opencv之(多)手势识别

  • 下载后双击运行,记得先勾选 “Add Python 3.9 to PATH ”,再点击 “Install Now” 安装

4.2 pycharm 安装

  • 官网下载(默认安装即可)

opencv之(多)手势识别

五、多手势识别源码

import cv2
import mediapipe as mp
import time

class handDetector():
    def __init__(self, mode=False, maxHands=2, complexity=1, detectionCon=0.5, trackCon=0.5):
        # 初始化类的参数
        self.mode = mode
        self.maxHands = maxHands
        self.complexity = complexity
        self.detectionCon = detectionCon
        self.trackCon = trackCon

        # 初始化手跟踪模块
        self.mpHands = mp.solutions.hands
        # mediapipe version: 0.8.11
        # self.hands = self.mpHands.Hands(self.mode, self.maxHands, self.complexity,
        #                                 self.detectionCon, self.trackCon)
        # mediapipe version: 0.8.3
        self.hands = self.mpHands.Hands(self.mode, self.maxHands,
                                        self.detectionCon, self.trackCon)
        self.mpDraw = mp.solutions.drawing_utils

    # 跟踪手关节点位置
    def findHands(self, img, draw=True):
        imgRGB = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
        self.results = self.hands.process(imgRGB)

        if self.results.multi_hand_landmarks:
            for handLms in self.results.multi_hand_landmarks:
                if draw:
                    self.mpDraw.draw_landmarks(img, handLms,
                                               self.mpHands.HAND_CONNECTIONS)
        return img

    # 对手关节点绘制圆圈
    def findPostion(self, img, handNo=0, draw=True):
        lmList = []
        if self.results.multi_hand_landmarks:
            for myHand in self.results.multi_hand_landmarks:
                for id, lm in enumerate(myHand.landmark):
                    h, w, c = img.shape
                    cx, cy = int(lm.x * w), int(lm.y * h)
                    lmList.append([id, cx, cy])
                    if draw:
                        cv2.circle(img, (cx, cy), 12, (255, 0, 255), cv2.FILLED)
        return lmList


def main():
    pTime = 0
    cTime = 0

    # 打开摄像机Camera0
    cap = cv2.VideoCapture(0)

    # 实例化类对象
    detector = handDetector()

    while True:
        # 读取摄像机的视频图像
        success, img = cap.read()

        # 跟踪关节点位置
        img = detector.findHands(img)

        # 对手关节点绘制圆圈
        lmList = detector.findPostion(img)

        # 计算实时帧率
        cTime = time.time()
        fps = 1 / (cTime - pTime)
        pTime = cTime

        # 显示实时帧率
        cv2.putText(img, str(int(fps)), (10, 70), cv2.FONT_HERSHEY_PLAIN, 2,
                    (255, 0, 255), 2)

        # 显示视频图像
        cv2.imshow("Image", img)
        cv2.waitKey(1)


if __name__ == "__main__":
    main()

5.1 源码使用注意事项

  • 本例程是基于 mediapipe-0.8.3 版本实现的 ,同时也兼容了 0.8.11 版本的代码实现。
  • 如果你已安装了 mediapipe-0.8.11 版本,可将已注释掉的代码打开,并将 0.8.3 版本相关的实现代码注释掉即可。
  • 0.8.11 比 0.8.3 版本多了一个 complexity 参数,同时手掌标识号的顺序也存在差异。

5.2 运行效果展示

opencv之(多)手势识别opencv之(多)手势识别opencv之(多)手势识别

opencv之(多)手势识别文章来源地址https://www.toymoban.com/news/detail-454033.html

到了这里,关于opencv之(多)手势识别的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • opencv实战项目 手势识别-手势控制键盘

    手势识别是一种人机交互技术,通过识别人的手势动作,从而实现对计算机、智能手机、智能电视等设备的操作和控制。 1.  opencv实现手部追踪(定位手部关键点) 2.opencv实战项目 实现手势跟踪并返回位置信息(封装调用) 3.opencv实战项目 手势识别-手势控制鼠标 4.opencv实战

    2024年02月13日
    浏览(42)
  • OpenCV实例(二)手势识别

    作者:Xiou 手势识别的范围很广泛,在不同场景下,有不同类型的手势需要识别,例如: ● 识别手势所表示的数值。 ● 识别手势在特定游戏中的含义,如“石头、剪刀、布”等。 ● 识别手势在游戏中表示的动作,如前进、跳跃、后退等。 ● 识别特定手势的含义,如表示“

    2024年02月04日
    浏览(55)
  • 基于opencv的手势识别

    大家好,我是一名本科生,我的主要学习方向是计算机视觉以及人工智能。按照目前的学习进度来说,我就是一小白,在这里写下自己编写的程序,与大家分享,记录一下自己的成长。 思路分析 获取图片,在图片中找到手,然后进行一系列的闭运算,降噪平滑处理,轮廓查

    2024年02月03日
    浏览(57)
  • opencv之(多)手势识别

    目录 一、开发环境 二、手势识别的概述 三、Hand Landmark模型 四、工具和依赖库安装 4.1 python下载及安装: 4.2 pycharm 安装 五、多手势识别源码 5.1 源码使用注意事项 5.2 运行效果展示 1、pycharm 2、python3.9 3、opencv-python 4、mdiapipe-0.8.3 感知手的形状和运动的能力是改善各种技术领

    2024年02月05日
    浏览(42)
  • Opencv + MediaPipe -> 手势识别

    一、概述         OpenCV(Open Source Computer Vision Library)是一个跨平台的计算机视觉库,它提供了许多用于图像和视频处理的功能,包括图像和视频的读取、预处理、特征提取、特征匹配、目标检测等。OpenCV是C++编写的,也提供了Python、Java等语言的接口,可以方便地在不同

    2024年02月05日
    浏览(77)
  • OpenCV-手势语言识别

    本部分包括Python环境、TensorFlow环境和OpenCV-Python环境。 需要Python 3.6及以上配置,在Windows环境下推荐下载Anaconda完成Python所需的配置,下载地址为:https://www.anaconda.com/,也可以下载虚拟机在Linux环境下运行代码。 打开Anaconda Prompt,输入清华仓库镜像,输入命令: conda config–

    2024年02月11日
    浏览(55)
  • opencv-手势识别

    2024年02月12日
    浏览(49)
  • 基于opencv-mediapipe的手势识别

    上一篇文章介绍了基于opencv的手势识别,如果大家运行了我的代码,会发现代码中找出手部轮廓的效果不是很理想。当时我在网上找寻解决的办法,刚好找到了mediapip库,然后我就利用opencv和mediapipe这两个库重新进行了手势识别的代码编写。效果还不错,写篇文章记录一下。

    2024年02月09日
    浏览(51)
  • 基于OpenCV的简易实时手势识别(含代码)

    这是我大一寒假时写着玩的,非常简陋。基于凸包检测,所以实际上是计算指尖数量判断1~5的手势。又为1 ~3手势赋了控制鼠标操作的功能(但不能移动鼠标,而且因为手势识别不太准确所以这个功能实现得很废/doge)。(才疏学浅,希望有生之年能写个更好的 版本信息:Vi

    2024年02月03日
    浏览(52)
  • OpenCV C++案例实战二十二《手势识别》

    本文将使用OpenCV C++ 实现手势识别效果。本案例主要可以分为以下几个步骤: 1、手部关键点检测 2、手势识别 3、效果显示 接

    2024年02月05日
    浏览(85)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包