IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 人工智能 -> 基于python-mediapipe手部识别 -> 正文阅读

[人工智能]基于python-mediapipe手部识别

前言

今天学习了一个非常神奇的手部识别模块mediapipe,只是其中一个功能还有很多功能以后有时间再去学习

请添加图片描述

效果如图

在这里做一下记录

学习记录

首先呢我们先安装必要的模块

mediapipe
opencv-python  =>cv2  
我们用的工具时pycharm  直接在那个模块下点加号搜索其模块安装就行

好了 安装好了之后就开始用了

首先是

cap= cv2.VideoCapture()
参数是0的话表示打开笔记本的内置摄像头,参数是视频文件路径则打开视频 返回一个对象

有了对象之后就可以按帧来读了

success,img= cap.read() 读取图像帧 有两个返回值,第一个是是否读取成功,第二个是每一帧的图像

再就是cv2.waitKey()用法

参数是1,表示延时1ms切换到下一帧图像,对于视频而言

参数为0,如cv2.waitKey(0)只显示当前帧图像,相当于视频暂停

今天的主角是这个

生成手部对象,注意的是,在后面处理的是RGB格式图像 所以使用 hands.process()处理的图像必须是RGB格式
myHands= mediapipe.soultions.hands
hands= myHands.Hands()

当然也离不开画图模块

	#对产生的result.multi_hand_landmarks标志物进行连接
    mpDraw = mediapipe.soultions.drawing_utils
    img_R=  cv2.cvtColor(img,cv2.COLOR_BGR2RGB)
    result = hands.process(img_R)
    #result.multi_hand_landmarks是检测到所有手的列表,对该列表进行访问我们可以得到每只手对应标志位的信息
     for handLms in  result.multi_hand_landmarks:
     	 mpDraw.draw_landmarks(img, handLms, myHands.HAND_CONNECTIONS)

也可以用cv2.putText()方法进行标记

cv2.putText(img, str(int(id)), (cx , cy ), cv2.FONT_HERSHEY_PLAIN,1, (0, 0, 255), 2)
贴大佬的解释
参数:
image:它是要在其上绘制文本的图像。
text:要绘制的文本字符串。
org:它是图像中文本字符串左下角的坐标。坐标表示为两个值的元组,即(X坐标值,Y坐标值)。
font:它表示字体类型。一些字体类型是FONT_HERSHEY_SIMPLEX,FONT_HERSHEY_PLAIN,等
fontScale:字体比例因子乘以font-specific基本大小。
color:它是要绘制的文本字符串的颜色。对于BGR,我们通过一个元组。例如:(25500)为蓝色。
thickness:它是线的粗细像素。
lineType:这是一个可选参数,它给出了要使用的行的类型。
bottomLeftOrigin:这是一个可选参数。如果为true,则图像数据原点位于左下角。否则,它位于左上角。

请添加图片描述

相关代码为

import  cv2

import  mediapipe as mp
import time
#视频操作函数
#也可以导入视频
cap = cv2.VideoCapture(0)
#手部跟踪  处理的事RGB格式 所以使用 hands.process()处理的图像必须是RGB格式
myHands= mp.solutions.hands
hands= myHands.Hands()
mpDraw = mp.solutions.drawing_utils
pTime = 0
cTime = 0
while 1:
    #读取摄像头每一帧并显示
    success,img= cap.read()
    cv2.imshow("image",img)
    #必须是RGB格式 而得到的图像默认是BGR格式所以要转
    img_R=  cv2.cvtColor(img,cv2.COLOR_BGR2RGB)
    result = hands.process(img_R)
    #检测所有手的列表,对列表进行访问可以获得 手的位置信息
    if(result.multi_hand_landmarks):
        for handLms in  result.multi_hand_landmarks:
            #每一个标志位都有一个id 获取并将其显示
            for id,lm in enumerate(handLms.landmark):
                h, w, c = img.shape
                #获取界面中的坐标 ,这里经过测试是获取的小数需要*界面获取真正坐标
                cx, cy = int(lm.x*w), int(lm.y*h)
                cv2.putText(img, str(int(id)), (cx , cy ), cv2.FONT_HERSHEY_PLAIN,
                            1, (0, 0, 255), 2)
    cv2.imshow("Image", img)
    cv2.waitKey(1)
换成
mpDraw.draw_landmarks(img, handLms, mpHands.HAND_CONNECTIONS)
就成了一开始图片的结果

当然也可以加

fps

操作为
 cTime = time.time()
    fps = 1 / (cTime - pTime)
    pTime = cTime

    cv2.putText(img, str(int(fps)), (10, 70), cv2.FONT_HERSHEY_PLAIN, 3,
                (255, 0, 255), 3)

所以最后效果为

请添加图片描述
贴一下写的代码

import  cv2

import  mediapipe as mp
import time
#视频操作函数
#也可以导入视频
cap = cv2.VideoCapture(0)
#手部跟踪  处理的事RGB格式 所以使用 hands.process()处理的图像必须是RGB格式
myHands= mp.solutions.hands
hands= myHands.Hands()
mpDraw = mp.solutions.drawing_utils
pTime = 0
cTime = 0
while 1:
    #读取摄像头每一帧并显示
    success,img= cap.read()
    cv2.imshow("image",img)
    img_R=  cv2.cvtColor(img,cv2.COLOR_BGR2RGB)
    result = hands.process(img_R)
    #检测所有手的列表,对列表进行访问可以获得 手的位置信息
    if(result.multi_hand_landmarks):
        for handLms in  result.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.putText(img, str(int(id)), (cx , cy ), cv2.FONT_HERSHEY_PLAIN,
                #            1, (0, 0, 255), 2)
                #mpDraw.draw_landmarks(img, handLms, myHands.HAND_CONNECTIONS)
                #然后进行画图
            mpDraw.draw_landmarks(img, handLms, myHands.HAND_CONNECTIONS)

    cTime = time.time()
    fps = 1 / (cTime - pTime)
    pTime = cTime

    cv2.putText(img, str(int(fps)), (10, 70), cv2.FONT_HERSHEY_PLAIN, 3,
                (255, 0, 255), 3)

    cv2.imshow("Image", img)


    cv2.waitKey(1)






最后的总结是:太神奇了,学到了模块的一小部分,就可以实现这个,还有更多东西需要学习.

参考链接:
https://www.computervision.zone

  人工智能 最新文章
2022吴恩达机器学习课程——第二课(神经网
第十五章 规则学习
FixMatch: Simplifying Semi-Supervised Le
数据挖掘Java——Kmeans算法的实现
大脑皮层的分割方法
【翻译】GPT-3是如何工作的
论文笔记:TEACHTEXT: CrossModal Generaliz
python从零学(六)
详解Python 3.x 导入(import)
【答读者问27】backtrader不支持最新版本的
上一篇文章      下一篇文章      查看所有文章
加:2021-10-04 12:51:04  更:2021-10-04 12:51:24 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/22 10:18:18-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码