文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

基于Mediapipe+Opencv如何实现手势检测功能

2023-06-26 03:52

关注

今天给大家介绍一下基于Mediapipe+Opencv如何实现手势检测功能。,文章的内容小编觉得不错,现在给大家分享一下,觉得有需要的朋友可以了解一下,希望对大家有所帮助,下面跟着小编的思路一起来阅读吧。

一、前言

基于Mediapipe+Opencv实现手势检测,想实现一下姿态识别的时候,感觉手势识别也蛮重要的就过来顺便实现一下。

二、环境配置

软件:

ANACONDA3+Pycharm2019

环境:

注:一定关掉科学上网

三、全部源码

比较短小且只有一个源文件MediapipeHandTracking.py我就直接在这里贴了

MediapipeHandTracking.py程序结构:

MediapipeHandTracking.py源码与注释

import cv2import mediapipe as mpimport time#第一步:保存mediapipe中的手势识别解决方案到mpHands,hands,mpDraw中mpHands = mp.solutions.hands #以下三个是mediapipe 中的API调用模板了hands = mpHands.Hands(min_detection_confidence=0.5, min_tracking_confidence=0.5)#最小检测置信度,最小追踪置信度mpDraw = mp.solutions.drawing_utils                              #获取mediapipe解决方案的绘画工具包#第二步:参数设定handLmsStyle = mpDraw.DrawingSpec(color=(0, 0, 255), thickness=3)#绘制手部关键点的颜色与粗细handConStyle = mpDraw.DrawingSpec(color=(0, 255, 0), thickness=5)#绘制手部线条的颜色与粗细pTime = 0 #和下面的cTime一起用于计算视频输入流FPScTime = 0cap = cv2.VideoCapture(0) #打开编号为0的摄像头,这个一般是自带摄像头#第三步:循环读取视频流到img,img输入hands.hands函数得到结果,绘制结果到img并输出while True:    ret, img = cap.read()       #从cap中读取图片到img,并将读取是否成功的结果保存在ret    if ret:        imgRGB = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)  #模型训练的时候是使用RGB训练,对于这个类型识别精度和速度比较高        result = hands.process(imgRGB)                 #将RGB图片输入手部模型将结果保存在result        # print(result.multi_hand_landmarks)           #打印result.multi_hand_landmarks内容,可以去掉试一下        imgHeight = img.shape[0]       #获取摄像机图片的高        imgWidth = img.shape[1]        #获取摄像机图片的宽        if result.multi_hand_landmarks:#如果multi_hand_landmarks不为空进入循环            for handLms in result.multi_hand_landmarks:  #遍历multi_hand_landmarks内每一个hand_landmark(手部关键点),相对于遍历图片中每一个手                mpDraw.draw_landmarks(img, handLms, mpHands.HAND_CONNECTIONS, handLmsStyle, handConStyle) #调用mediapipe内绘画工具包绘画手部关键点                for i, lm in enumerate(handLms.landmark):  #i保存第几个手部关键点,lm保存该点在图中的归一化值                    xPos = int(lm.x * imgWidth) #第i个关键点x                    yPos = int(lm.y * imgHeight)#第i个关键点y                    cv2.putText(img, str(i), (xPos-25, yPos+5), cv2.FONT_HERSHEY_SIMPLEX, 0.4, (0, 0, 255), 2)#绘制关键点在,关键点左边靠下一点                    if i == 8:#当画到第八个关键点时                         cv2.circle(img, (xPos, yPos), 10, (166, 0, 0), cv2.FILLED)#画一个圆                         #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) #绘制FSP到图中        cv2.imshow('img', img) #输出图片    if cv2.waitKey(1) == ord('q'):#点击视频,输入q退出        break

四、环境配置

1、在Anaconda3上新建环境Gesture

打开Anaconda Prompt,输入:

conda create -n Gesture python=3.8

2、激活Gesture环境并下载opencv-python包

激活环境:conda activate Gesture
下载opencv-python包:pip install opencv-python -i https://pypi.tuna.tsinghua.edu.cn/simple/

基于Mediapipe+Opencv如何实现手势检测功能

3、下载mediapipe包

pip install mediapipe -i https://pypi.tuna.tsinghua.edu.cn/simple/

基于Mediapipe+Opencv如何实现手势检测功能

4、打开Pycharm完成环境导入项目

配置代码运行环境

基于Mediapipe+Opencv如何实现手势检测功能

基于Mediapipe+Opencv如何实现手势检测功能

基于Mediapipe+Opencv如何实现手势检测功能

基于Mediapipe+Opencv如何实现手势检测功能

五、运行程序:

用Pycharm打开包含hanTracking.py程序的文件夹,并运行

基于Mediapipe+Opencv如何实现手势检测功能

运行结果

基于Mediapipe+Opencv如何实现手势检测功能

六、程序应用扩展

1、手部的关键点的位置和次序我们全部已知的特点

基于Mediapipe+Opencv如何实现手势检测功能

该功能可用于图片ROI提取截取出图片,然后进行其他一些图片操作。
该功能可用于手势响应事件。比如约定,食指和大拇指也就是4号和8号触碰时候触发某事件
,等等。
实现AL+操作

基于Mediapipe+Opencv如何实现手势检测功能

2、和其他AL结合

比如姿态检测AL,能将人识别成一个火柴人,开发空间有不少用处。

3、全身检测源码

import cv2import timeimport mediapipe as mpmp_drawing = mp.solutions.drawing_utilsmp_holistic = mp.solutions.holisticholistic = mp_holistic.Holistic(min_detection_confidence=0.5, min_tracking_confidence=0.5)handLmsStyle = mp_drawing.DrawingSpec(color=(0, 0, 255), thickness=0)#绘制手部关键点的颜色与粗细handConStyle = mp_drawing.DrawingSpec(color=(0, 255, 0), thickness=4)#绘制手部线条的颜色与粗细cap = cv2.VideoCapture(0)while True:    ret,image=cap.read()    if ret:        image = cv2.flip(image, 1)        image=cv2.cvtColor(image,cv2.COLOR_BGR2RGB)        results = holistic.process(image)        if results.pose_landmarks:            mp_drawing.draw_landmarks(image, results.face_landmarks, mp_holistic.FACEMESH_CONTOURS,handLmsStyle,handConStyle)            mp_drawing.draw_landmarks(image, results.left_hand_landmarks, mp_holistic.HAND_CONNECTIONS)            mp_drawing.draw_landmarks(image, results.right_hand_landmarks, mp_holistic.HAND_CONNECTIONS)            mp_drawing.draw_landmarks(image, results.pose_landmarks, mp_holistic.POSE_CONNECTIONS)        cv2.imshow("img",image)        if cv2.waitKey(1)==ord("q"):            breakholistic.close()

运行效果如下:
晒晒我帅气的舍友

基于Mediapipe+Opencv如何实现手势检测功能

以上就是基于Mediapipe+Opencv如何实现手势检测功能的全部内容了,更多与基于Mediapipe+Opencv如何实现手势检测功能相关的内容可以搜索编程网之前的文章或者浏览下面的文章进行学习哈!相信小编会给大家增添更多知识,希望大家能够支持一下编程网!

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     807人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     351人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     314人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     433人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     221人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯