使用MediaPipe和OpenCV的Python实现手势识别

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

手势识别

手势识别技术是一种非常有用的技术,它可以将人类的手势转化为计算机可以理解的形式,从而实现更加自然、快速和直观的交互方式。本文将介绍一种基于MediaPipe和OpenCV的手势识别技术,可以实现对手势的实时识别和分析。

MediaPipe

MediaPipe是一种开源的机器学习框架,可以用于构建计算机视觉和机器学习应用,并且提供了很多预训练的模型和工具。在本文中,我们将使用MediaPipe中的Hands模型,它可以实现对手部的实时跟踪和关键点检测。OpenCV是一个开源的计算机视觉库,可以用于图像处理和分析。

在本文中,我们将使用MediaPipe和OpenCV来实现手势识别技术,并且将其应用于实际场景中。

首先,我们需要引入MediaPipe和OpenCV的库,并且创建一个Hands模型的实例:

import cv2
import mediapipe as mp

mpHands = mp.solutions.hands
hands = mpHands.Hands(static_image_mode=False,
                      max_num_hands=2,
                      min_detection_confidence=0.5,
                      min_tracking_confidence=0.5)
mpDraw = mp.solutions.drawing_utils

然后,我们需要打开摄像头,并且开始对图像进行处理:

cap = cv2.VideoCapture(0)
while True:
    ok, img = cap.read()
    if ok:
        imgRGB = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
        results = hands.process(imgRGB)
        # print(results.multi_hand_landmarks)
        # ...

在循环中,我们首先从摄像头中读取一帧图像,并且将其转换为RGB格式。然后,我们将图像传递给Hands模型进行处理,并且得到处理结果。接下来,我们将对处理结果进行分析,并且将结果可视化。

在Hands模型中,每个检测到的手部都会被表示为一个HandLandmark对象,其中包含了21个关键点的位置信息。我们可以通过遍历HandLandmark对象中的关键点,并且在图像中绘制出关键点的位置,来实现对手部的跟踪和分析。例如,我们可以使用下面的代码来绘制出每个关键点的位置:

for handLms in results.multi_hand_landmarks:
    for id, lm in enumerate(handLms.landmark):
        h, w, c = img.shape
        cx, cy = int(lm.x * w), int(lm.y * h)
        cv2.circle(img, (cx, cy), int(w / 50), (200, 0, 200), cv2.FILLED)

在这段代码中,我们遍历了所有检测到的手部,然后遍历每个关键点,并且计算出其在图像中的位置。最后,我们使用cv2.circle函数在图像中绘制一个圆圈表示该关键点的位置。

除了手部的跟踪和分析之外,我们还可以使用Hands模型来实现手势识别。例如,我们可以根据手指的弯曲程度来判断手势类型。在本文的代码中,我们使用了一个简单的算法来实现手指的弯曲程度的判断,具体实现如下:

finger_count = 0
for id in [4, 8, 12, 16, 20]:
    if handLms.landmark[id].y < handLms.landmark[id - 2].y:
        finger_count += 1

在这段代码中,我们遍历了五个手指的关键点,并且通过比较当前关键点的位置和前一个关键点的位置,来判断手指是否弯曲。如果当前关键点的位置比前一个关键点的位置低,那么就说明手指弯曲了。最后,我们统计了弯曲的手指数量,并且根据手指数量来判断手势类型。

最后,我们可以将手势类型输出到屏幕上,并且实现对手势的实时识别和分析。例如,我们可以使用下面的代码将手势类型输出到屏幕上:

gesture_dict = {
    1: "Fist",
    2: "One",
    3: "Two",
    4: "Three",
    5: "Four",
    6: "Five"
}
prev_fingers = [0, 0, 0, 0, 0]
for handLms in results.multi_hand_landmarks:
    finger_count = 0
    for id in [4, 8, 12, 16, 20]:
        if handLms.landmark[id].y < handLms.landmark[id - 2].y:
            finger_count += 1
            cv2.circle(img, (cx, cy), int(w / 50), (0, 255, 0), cv2.FILLED)
    prev_fingers.pop(0)
    prev_fingers.append(finger_count)
    if prev_fingers == [0, 5, 5, 5, 5]:
        gesture_type = 6
    elif prev_fingers[1:] == [1, 1, 1, 1]:
        gesture_type = 2
    elif prev_fingers[1:] == [2, 2, 2, 2]:
        gesture_type = 3
    elif prev_fingers[1:] == [3, 3, 3, 3]:
        gesture_type = 4
    elif prev_fingers[1:] == [4, 4, 4, 4]:
        gesture_type = 5
    else:
        gesture_type = 1
    cv2.putText(img, gesture_dict[gesture_type], (50, 50), cv2.FONT_HERSHEY_SIMPLEX, 1, (0, 0, 255), 2)

在这段代码中,我们定义了一个手势类型的字典,其中包含了六种手势类型。然后,我们使用一个列表来记录前四帧中每个手指弯曲的情况,并且根据弯曲的手指数量来判断当前手势类型。最后,我们将手势类型输出到屏幕上,并且用不同的颜色和大小来表示每个关键点的位置和手指的弯曲情况。

总结

本文介绍了一种基于MediaPipe和OpenCV的手势识别技术,可以实现对手势的实时识别和分析。该技术具有很高的实用价值,可以应用于很多领域,例如智能家居、游戏控制、人机交互等。未来,随着计算机视觉和人工智能技术的不断发展,手势识别技术将会变得更加先进和智能,为人们的生活和工作带来更多便利和创新。文章来源地址https://www.toymoban.com/news/detail-624226.html

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

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

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

相关文章

  • 基于Mediapipe的Python手势识别项目(手势识别游戏)附项目源码

    基于Mediapipe的手势识别,完成的手势识别游戏。运行效果图如下: 首先是初始的界面效果图: 游戏规则:屏幕上会出现蚊子和蜜蜂,当手蜷曲握起时,表示抓的动作。如果抓到右边移动的蚊子,则会增加分数,如果抓到右边的蜜蜂,则会出现被蛰到的声音 :) 调用Mediapip

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

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

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

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

    2024年02月09日
    浏览(50)
  • 竞赛项目 深度学习手势识别算法实现 - opencv python

    🔥 优质竞赛项目系列,今天要分享的是 🚩 深度学习手势识别算法实现 - opencv python 该项目较为新颖,适合作为竞赛课题方向,学长非常推荐! 🥇学长这里给一个题目综合评分(每项满分5分) 难度系数:3分 工作量:3分 创新点:4分 🧿 更多资料, 项目分享: https://gitee.com/

    2024年02月13日
    浏览(100)
  • Python使用Opencv图像处理方法完成手势识别(一)

    由于是使用Opencv完成手势识别,所以首先利用颜色特征是对手的颜色进行提取,获得HSV的最小值与最大值。 HSV颜色空间阈值主要是靠 Trackbar 调节阈值和 cv2.inRange 来生成掩膜来提取。 这是我写的HSV阈值获取的代码: 使用方法: 运行代码之后,从第一个依次调节滑块,使画面中

    2024年02月05日
    浏览(71)
  • OpenCV+python实现摄像头简单手势识别--进度条控制亮度

    例如:随着人工智能的不断发展,计算机视觉这门技术也越来越重要,很多人都开启了学习计算机视觉,本文在Opencv基础上实现了摄像头简单手势识别–进度条控制亮度的基础内容,并没有使用深度学习技术,因此准确率并不高。 ∙ bullet ∙ 第一步: 开启摄像头,检测每帧图

    2023年04月08日
    浏览(46)
  • 使用OpenCV和MediaPipe实现姿态识别!

    大家好,我是小F~ MediaPipe是一款由Google开发并开源的数据流处理机器学习应用开发框架。 它是一个基于图的数据处理管线,用于构建使用了多种形式的数据源,如视频、音频、传感器数据以及任何时间序列数据。 MediaPipe通过将各个感知模型抽象为模块并将其连接到可维护的

    2024年02月11日
    浏览(40)
  • 树莓派4B Python3.7.3 Opencv+Mediapipe 手指方向识别

    起因: 2023年4月接触树莓派之后,想实现手指方向的实时识别,现有Google的框架Mediapipe可以实现21个手指关键点位置实时识别,去尝试装Mediapipe以及相关依赖库,发现树莓派的源(官方源),一些库比较旧(15年的都有),所以整体思想要装15年 16年的版本,才能适配 系统环境

    2024年02月03日
    浏览(48)
  • 数字图像处理二维码识别python+opencv实现二维码实时识别

    数字图像处理二维码识别 python+opencv实现二维码实时识别 特点: (1)可以实现普通二维码,条形码; (2)解决了opencv输出中文乱码的问题 (3)增加网页自动跳转功能 (4)实现二维码实时检测和识别 代码保证原创、无错误、能正常运行(如果电脑环境配置没问题) 送二维

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

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

    2024年02月03日
    浏览(50)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包