基于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自动化脚本简直不要太秀!全程无需自己动手操作(附源码)https://www.bilibili.com/video/BV1VWxrefEqx/?vd_source=989ae2b903ea1b5acebbe2c4c4a635ee
【源码下载地址】
https://download.csdn.net/download/FL1623863129/89815307