基于mediapipe深度学习算法的手势数字0-9识别系统python源码+精美GUI界面

【算法原理】

判断弯曲状态的方法

为了判断每根手指是伸直还是弯曲,采用了基于关键点相对位置的角度分析方法。以大拇指为例,系统首先识别出大拇指上的四个关键点(假设这些点按手指的自然顺序标记为点1至点4)。接着,利用这些关键点的坐标,计算两组相邻关键点之间的角度:一组是点4与点3之间的角度a,另一组是点2与点1之间的角度b。通过比较这两个角度的差值(取绝对值),我们可以评估大拇指的整体弯曲程度。如果这个差值的绝对值小于预设的阈值(如12度),则判断大拇指处于相对伸直的状态。类似地,这一逻辑也被应用于其他四根手指的弯曲状态判断。

基于手指弯曲程度的手势识别逻辑

一旦我们掌握了每根手指的弯曲状态,接下来的步骤就是将这些信息整合起来,以识别出用户所做出的具体手势及其对应的数字。以数字五和数字四为例,如果系统检测到所有五根手指均处于伸直状态,那么它会自动将该手势识别为数字五。相反,如果仅大拇指呈现弯曲状态,而其余四根手指(食指、中指、无名指、小指)均伸直,则系统会判断该手势为数字四。

这一识别逻辑可以进一步扩展,涵盖更多的手势和数字。通过为每种手势定义一套明确的弯曲状态组合规则,并不断优化这些规则以适应不同用户的手型和习惯,我们可以使手势识别系统更加智能、准确和易于使用。

总的来说,我的这一手势识别方法充分利用了MediaPipe在手掌关键点识别方面的优势,通过精细分析手指的弯曲状态,实现了对手势的准确识别和数字的对应判断。

手指位置:

 【示范图】

【效果展示】

【测试通过环境】

opencv-python==4.8.0.76
mediapipe==0.10.3
pyqt5

【部分实现代码】

# -*- coding: utf-8 -*-
import os
import sys
from PyQt5 import QtCore, QtGui, QtWidgets
from PyQt5.QtCore import QThread, pyqtSignal
from PyQt5.QtGui import QImage, QPixmap
from PyQt5.QtWidgets import QFileDialog, QLabel, QApplication
import image_rc
import threading
import cv2
import numpy as np
import time
from GestureDetector import *


class Ui_MainWindow(QtWidgets.QMainWindow):
    signal = QtCore.pyqtSignal(str, str)

    def setupUi(self):
        self.setObjectName("MainWindow")
        self.resize(1280, 728)
        self.centralwidget = QtWidgets.QWidget(self)
        self.centralwidget.setObjectName("centralwidget")
        self.detector=GestureDetector()

        self.picture = QtWidgets.QLabel(self.centralwidget)
        self.picture.setGeometry(QtCore.QRect(260, 10, 1010, 630))
        self.picture.setStyleSheet("background:black")
        self.picture.setObjectName("picture")
        self.picture.setScaledContents(True)


        self.label_3 = QtWidgets.QLabel(self.centralwidget)
        self.label_3.setGeometry(QtCore.QRect(10, 1, 72, 21))
        self.label_3.setObjectName("label_3")
        self.hs_conf = QtWidgets.QSlider(self.centralwidget)
        self.hs_conf.setGeometry(QtCore.QRect(10, 30, 181, 22))
        self.hs_conf.setProperty("value", 75)
        self.hs_conf.setOrientation(QtCore.Qt.Horizontal)
        self.hs_conf.setObjectName("hs_conf")
        self.hs_conf.valueChanged.connect(self.conf_change)
        self.dsb_conf = QtWidgets.QDoubleSpinBox(self.centralwidget)
        self.dsb_conf.setGeometry(QtCore.QRect(200, 30, 51, 22))
        self.dsb_conf.setMaximum(1.0)
        self.dsb_conf.setSingleStep(0.01)
        self.dsb_conf.setProperty("value", 0.75)
        self.dsb_conf.setObjectName("dsb_conf")
        self.dsb_conf.valueChanged.connect(self.dsb_conf_change)
        self.dsb_iou = QtWidgets.QDoubleSpinBox(self.centralwidget)
        self.dsb_iou.setGeometry(QtCore.QRect(200, 100, 51, 22))
        self.dsb_iou.setMaximum(1.0)
        self.dsb_iou.setSingleStep(0.01)
        self.dsb_iou.setProperty("value", 0.75)
        self.dsb_iou.setObjectName("dsb_iou")
        self.dsb_iou.valueChanged.connect(self.dsb_iou_change)
        self.hs_iou = QtWidgets.QSlider(self.centralwidget)
        self.hs_iou.setGeometry(QtCore.QRect(10, 100, 181, 22))
        self.hs_iou.setProperty("value", 75)
        self.hs_iou.setOrientation(QtCore.Qt.Horizontal)
        self.hs_iou.setObjectName("hs_iou")
        self.hs_iou.valueChanged.connect(self.iou_change)
        self.label_4 = QtWidgets.QLabel(self.centralwidget)
        self.label_4.setGeometry(QtCore.QRect(10, 70, 72, 21))
        self.label_4.setObjectName("label_4")
        self.label_5 = QtWidgets.QLabel(self.centralwidget)
        self.label_5.setGeometry(QtCore.QRect(10, 130, 240, 21))
        self.label_5.setObjectName("label_5")
        self.label_5.setStyleSheet("background:black")
        self.label_5.setScaledContents(True)
        self.label_5.setPixmap(QPixmap('./images/logo.jpg'))

 【视频演示】

基于mediapipe深度学习算法的手势数字0-9识别系统python源码+精美GUI界面_哔哩哔哩_bilibili【测试通过环境】opencv-python==4.8.0.76mediapipe==0.10.3pyqt5更多实现细节和源码下载参考博文:https://blog.csdn.net/FL1623863129/article/details/142632591, 视频播放量 1、弹幕量 0、点赞数 0、投硬币枚数 0、收藏人数 0、转发人数 0, 视频作者 未来自主研究中心, 作者简介 未来自主研究中心,相关视频:yolov9+deepsort+pyqt5实现目标追踪结果演示,别再学按键精灵和易语言了 python可以直接用中文编写脚本了,yolov8 TensorRT C++ C#部署,将yolov8封装成一个类几行代码完成语义分割任务,C#实现全网yolov7目前最快winform目标检测,基于yolov8+deepsort实现目标追踪视频演示,使用C#的winform部署yolov8的onnx实例分割模型,基于opencvC++版本yolov8-onnx和bytetrack追踪算法实现目标追踪,使用C++部署yolov8的onnx和bytetrack实现目标追踪,用Python训练AI自动玩王者荣耀,Python自动化脚本简直不要太秀!全程无需自己动手操作(附源码)icon-default.png?t=O83Ahttps://www.bilibili.com/video/BV1VWxrefEqx/?vd_source=989ae2b903ea1b5acebbe2c4c4a635ee

【源码下载地址】

https://download.csdn.net/download/FL1623863129/89815307

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

FL1623863129

你的打赏是我写文章最大的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值